dodil/erp-method
modules/payroll/signoff/payroll/payroll_pay_run.bpmn
<?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" xmlns:dodil="https://git.dodil.io/dodil/erp-platform/bpmn/1" id="Definitions_payroll_v2" name="Payroll processes" targetNamespace="https://git.dodil.io/dodil/erp-platform/processes" exporter="erp-platform erp-compose bpmn" exporterVersion="1">
<bpmn:collaboration id="Collaboration_payroll_v2">
<bpmn:documentation>Payroll: one pool per entity lifecycle, generated from module.yaml.</bpmn:documentation>
<bpmn:participant id="Participant_payroll_pay_run" name="Pay run" processRef="Process_payroll_pay_run_v2" />
</bpmn:collaboration>
<bpmn:process id="Process_payroll_pay_run_v2" name="Pay run" isExecutable="false">
<bpmn:documentation>Lifecycle of the pay run, generated from module.yaml by erp-compose bpmn; change the workflow there, not this file. States: open, calculated, approved, submitted, paid, closed, cancelled. Note: approved never returns to calculated: a mistake found after approval is corrected in the next period or by an off-cycle run, so no state is ever re-entered</bpmn:documentation>
<bpmn:laneSet id="LaneSet_pay_run">
<bpmn:lane id="Lane_pay_run_system" name="The system">
<bpmn:flowNodeRef>Start_pay_run</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_open_pay_run</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_build_pay_run_documents</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_record_fps_accepted</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_confirm_pay_run_paid</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_close_pay_run</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_pay_run_none__if</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_build_pay_run_documents__if</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_build_pay_run_documents__if_end</bpmn:flowNodeRef>
<bpmn:flowNodeRef>End_pay_run_closed</bpmn:flowNodeRef>
</bpmn:lane>
<bpmn:lane id="Lane_pay_run_payroll_manager" name="Payroll manager / finance director">
<bpmn:flowNodeRef>Task_open_off_cycle_run</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_approve_pay_run</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_approve_approver_payslip</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_cancel_pay_run</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_approve_approver_payslip__if</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_approve_approver_payslip__if_end</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_pay_run_calculated__if</bpmn:flowNodeRef>
<bpmn:flowNodeRef>End_pay_run_cancelled</bpmn:flowNodeRef>
</bpmn:lane>
<bpmn:lane id="Lane_pay_run_payroll_admin" name="Payroll administrator">
<bpmn:flowNodeRef>Task_calculate_pay_run</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_recalculate_pay_run</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Gateway_pay_run_open__if</bpmn:flowNodeRef>
</bpmn:lane>
</bpmn:laneSet>
<bpmn:startEvent id="Start_pay_run" name="Pay run needed">
<bpmn:outgoing>Flow_Start_pay_run__Gateway_pay_run_none__if</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:task id="Task_open_pay_run" name="Open the period" dodil:step="open_pay_run">
<bpmn:documentation>By: The system or Payroll administrator. From none to open. When: the schedule's previous regular run is approved; the period claim (company, schedule, tax year, period, regular) free. Effect: pay_run_id <company>-<schedule>-<tax year>-<period>; the hr extract produced (HR-60).</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_pay_run_none__if__Task_open_pay_run</bpmn:incoming>
<bpmn:outgoing>Flow_Task_open_pay_run__Gateway_pay_run_open__if</bpmn:outgoing>
</bpmn:task>
<bpmn:userTask id="Task_open_off_cycle_run" name="Open an off-cycle run" dodil:step="open_off_cycle_run">
<bpmn:documentation>By: Payroll manager / finance director. From none to open. When: the tax period's regular run approved. Requires: reason. Effect: pay_run_id <regular>-X<n>, kind off_cycle.</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_pay_run_none__if__Task_open_off_cycle_run</bpmn:incoming>
<bpmn:outgoing>Flow_Task_open_off_cycle_run__Gateway_pay_run_open__if</bpmn:outgoing>
</bpmn:userTask>
<bpmn:userTask id="Task_calculate_pay_run" name="Calculate" dodil:step="calculate_pay_run">
<bpmn:documentation>By: Payroll administrator. From open to calculated. When: every employee in it has a tax code and an NI category. Effect: payslips derived from hr's extract, time-off, timesheets and the rows in force on the pay date.</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_pay_run_open__if__Task_calculate_pay_run</bpmn:incoming>
<bpmn:outgoing>Flow_Task_calculate_pay_run__Task_recalculate_pay_run</bpmn:outgoing>
</bpmn:userTask>
<bpmn:userTask id="Task_recalculate_pay_run" name="Recalculate" dodil:step="recalculate_pay_run">
<bpmn:documentation>By: Payroll administrator. From calculated to calculated. Effect: the draft payslips replaced; stale flags cleared.</bpmn:documentation>
<bpmn:incoming>Flow_Task_calculate_pay_run__Task_recalculate_pay_run</bpmn:incoming>
<bpmn:outgoing>Flow_Task_recalculate_pay_run__Gateway_approve_approver_payslip__if</bpmn:outgoing>
</bpmn:userTask>
<bpmn:userTask id="Task_approve_pay_run" name="Approve the run" dodil:step="approve_pay_run" dodil:approval="true">
<bpmn:documentation>By: Payroll manager / finance director. From calculated to approved. When: not_stale; nmw_met; net_not_negative; bacs_lead; the approver is not the preparer (email AND sub); own_payslip_by_peer (the approver's own payslip, if in the run, already approved by a peer). Effect: payslips frozen; after commit, from pending rows: extract sent (HR-60), journal (PRL-16), payouts (PRL-12); the FPS and the pension file are built by build_pay_run_documents (v2), never inside the approval. An approval.</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_pay_run_calculated__if__Task_approve_pay_run</bpmn:incoming>
<bpmn:outgoing>Flow_Task_approve_pay_run__Gateway_build_pay_run_documents__if</bpmn:outgoing>
</bpmn:userTask>
<bpmn:serviceTask id="Task_build_pay_run_documents" name="Build the FPS and the pension file" dodil:step="build_pay_run_documents" implementation="##unspecified">
<bpmn:documentation>By: The system. From approved to approved. When: the approval committed; the run's pending document row claimed once by the worker tick. Effect: v2 (seemo's decided answer 7): the FPS (fps:<run>:1) and the pension contribution file built from the frozen payslips and handed to the capability (PRL-13, PRL-15) or to a manual task; the EPS is built by the tick's monthly EPS pass; a retry builds nothing twice.</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_build_pay_run_documents__if__Task_build_pay_run_documents</bpmn:incoming>
<bpmn:outgoing>Flow_Task_build_pay_run_documents__Gateway_build_pay_run_documents__if_end</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:userTask id="Task_approve_approver_payslip" name="Approve the approver's own payslip" dodil:step="approve_approver_payslip" dodil:approval="true">
<bpmn:documentation>By: Payroll manager / finance director. From calculated to calculated. When: a payroll manager who is neither the payslip's person nor the run's preparer (email AND sub). Effect: that payslip approved; the run may then be approved. An approval.</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_approve_approver_payslip__if__Task_approve_approver_payslip</bpmn:incoming>
<bpmn:outgoing>Flow_Task_approve_approver_payslip__Gateway_approve_approver_payslip__if_end</bpmn:outgoing>
</bpmn:userTask>
<bpmn:serviceTask id="Task_record_fps_accepted" name="HMRC accepted the FPS" dodil:step="record_fps_accepted" implementation="##unspecified">
<bpmn:documentation>By: The system. From approved to submitted. When: the capability's RESULT accepted, or the admin's manual task done with HMRC's reference. Effect: the correlation id kept.</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_build_pay_run_documents__if_end__Task_record_fps_accepted</bpmn:incoming>
<bpmn:outgoing>Flow_Task_record_fps_accepted__Task_confirm_pay_run_paid</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:serviceTask id="Task_confirm_pay_run_paid" name="Every payout settled" dodil:step="confirm_pay_run_paid" implementation="##unspecified">
<bpmn:documentation>By: The system. From submitted to paid. When: every payout paid or returned (payments, PRL-28).</bpmn:documentation>
<bpmn:incoming>Flow_Task_record_fps_accepted__Task_confirm_pay_run_paid</bpmn:incoming>
<bpmn:outgoing>Flow_Task_confirm_pay_run_paid__Task_close_pay_run</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:task id="Task_close_pay_run" name="Close the period" dodil:step="close_pay_run">
<bpmn:documentation>By: The system or Payroll administrator. From paid to closed. When: the journal posted; the pension file sent or its manual task done. Effect: year to date frozen; payslips published on the pay date.</bpmn:documentation>
<bpmn:incoming>Flow_Task_confirm_pay_run_paid__Task_close_pay_run</bpmn:incoming>
<bpmn:outgoing>Flow_Task_close_pay_run__End_pay_run_closed</bpmn:outgoing>
</bpmn:task>
<bpmn:userTask id="Task_cancel_pay_run" name="Cancel the run" dodil:step="cancel_pay_run">
<bpmn:documentation>By: Payroll manager / finance director. From open / calculated to cancelled. Requires: reason. Effect: the period claim released; nothing was sent.</bpmn:documentation>
<bpmn:incoming>Flow_Gateway_pay_run_open__if__Task_cancel_pay_run</bpmn:incoming>
<bpmn:incoming>Flow_Gateway_pay_run_calculated__if__Task_cancel_pay_run</bpmn:incoming>
<bpmn:outgoing>Flow_Task_cancel_pay_run__End_pay_run_cancelled</bpmn:outgoing>
</bpmn:userTask>
<bpmn:exclusiveGateway id="Gateway_pay_run_none__if" name="New pay run?">
<bpmn:incoming>Flow_Start_pay_run__Gateway_pay_run_none__if</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_pay_run_none__if__Task_open_pay_run</bpmn:outgoing>
<bpmn:outgoing>Flow_Gateway_pay_run_none__if__Task_open_off_cycle_run</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:exclusiveGateway id="Gateway_pay_run_open__if" name="Pay run open: what next?">
<bpmn:incoming>Flow_Task_open_pay_run__Gateway_pay_run_open__if</bpmn:incoming>
<bpmn:incoming>Flow_Task_open_off_cycle_run__Gateway_pay_run_open__if</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_pay_run_open__if__Task_calculate_pay_run</bpmn:outgoing>
<bpmn:outgoing>Flow_Gateway_pay_run_open__if__Task_cancel_pay_run</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:exclusiveGateway id="Gateway_approve_approver_payslip__if" name="a payroll manager who is neither the payslip's person nor the run's preparer (email AND sub)?">
<bpmn:incoming>Flow_Task_recalculate_pay_run__Gateway_approve_approver_payslip__if</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_approve_approver_payslip__if__Task_approve_approver_payslip</bpmn:outgoing>
<bpmn:outgoing>Flow_Gateway_approve_approver_payslip__if__Gateway_approve_approver_payslip__if_end</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:exclusiveGateway id="Gateway_approve_approver_payslip__if_end">
<bpmn:incoming>Flow_Gateway_approve_approver_payslip__if__Gateway_approve_approver_payslip__if_end</bpmn:incoming>
<bpmn:incoming>Flow_Task_approve_approver_payslip__Gateway_approve_approver_payslip__if_end</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_approve_approver_payslip__if_end__Gateway_pay_run_calculated__if</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:exclusiveGateway id="Gateway_pay_run_calculated__if" name="Pay run calculated: what next?">
<bpmn:incoming>Flow_Gateway_approve_approver_payslip__if_end__Gateway_pay_run_calculated__if</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_pay_run_calculated__if__Task_approve_pay_run</bpmn:outgoing>
<bpmn:outgoing>Flow_Gateway_pay_run_calculated__if__Task_cancel_pay_run</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:exclusiveGateway id="Gateway_build_pay_run_documents__if" name="the approval committed; the run's pending document row claimed once by the worker tick?">
<bpmn:incoming>Flow_Task_approve_pay_run__Gateway_build_pay_run_documents__if</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_build_pay_run_documents__if__Task_build_pay_run_documents</bpmn:outgoing>
<bpmn:outgoing>Flow_Gateway_build_pay_run_documents__if__Gateway_build_pay_run_documents__if_end</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:exclusiveGateway id="Gateway_build_pay_run_documents__if_end">
<bpmn:incoming>Flow_Gateway_build_pay_run_documents__if__Gateway_build_pay_run_documents__if_end</bpmn:incoming>
<bpmn:incoming>Flow_Task_build_pay_run_documents__Gateway_build_pay_run_documents__if_end</bpmn:incoming>
<bpmn:outgoing>Flow_Gateway_build_pay_run_documents__if_end__Task_record_fps_accepted</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:endEvent id="End_pay_run_closed" name="Pay run closed">
<bpmn:incoming>Flow_Task_close_pay_run__End_pay_run_closed</bpmn:incoming>
</bpmn:endEvent>
<bpmn:endEvent id="End_pay_run_cancelled" name="Pay run cancelled">
<bpmn:incoming>Flow_Task_cancel_pay_run__End_pay_run_cancelled</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_Gateway_pay_run_none__if__Task_open_pay_run" sourceRef="Gateway_pay_run_none__if" targetRef="Task_open_pay_run" />
<bpmn:sequenceFlow id="Flow_Gateway_pay_run_none__if__Task_open_off_cycle_run" sourceRef="Gateway_pay_run_none__if" targetRef="Task_open_off_cycle_run" />
<bpmn:sequenceFlow id="Flow_Start_pay_run__Gateway_pay_run_none__if" sourceRef="Start_pay_run" targetRef="Gateway_pay_run_none__if" />
<bpmn:sequenceFlow id="Flow_Gateway_pay_run_open__if__Task_calculate_pay_run" sourceRef="Gateway_pay_run_open__if" targetRef="Task_calculate_pay_run" />
<bpmn:sequenceFlow id="Flow_Gateway_pay_run_open__if__Task_cancel_pay_run" sourceRef="Gateway_pay_run_open__if" targetRef="Task_cancel_pay_run" />
<bpmn:sequenceFlow id="Flow_Task_open_pay_run__Gateway_pay_run_open__if" sourceRef="Task_open_pay_run" targetRef="Gateway_pay_run_open__if" />
<bpmn:sequenceFlow id="Flow_Task_open_off_cycle_run__Gateway_pay_run_open__if" sourceRef="Task_open_off_cycle_run" targetRef="Gateway_pay_run_open__if" />
<bpmn:sequenceFlow id="Flow_Gateway_approve_approver_payslip__if__Task_approve_approver_payslip" name="a payroll manager who is neither the payslip's person nor the run's preparer (email AND sub)" sourceRef="Gateway_approve_approver_payslip__if" targetRef="Task_approve_approver_payslip" />
<bpmn:sequenceFlow id="Flow_Gateway_approve_approver_payslip__if__Gateway_approve_approver_payslip__if_end" name="otherwise" sourceRef="Gateway_approve_approver_payslip__if" targetRef="Gateway_approve_approver_payslip__if_end" />
<bpmn:sequenceFlow id="Flow_Task_approve_approver_payslip__Gateway_approve_approver_payslip__if_end" sourceRef="Task_approve_approver_payslip" targetRef="Gateway_approve_approver_payslip__if_end" />
<bpmn:sequenceFlow id="Flow_Task_recalculate_pay_run__Gateway_approve_approver_payslip__if" sourceRef="Task_recalculate_pay_run" targetRef="Gateway_approve_approver_payslip__if" />
<bpmn:sequenceFlow id="Flow_Gateway_pay_run_calculated__if__Task_approve_pay_run" sourceRef="Gateway_pay_run_calculated__if" targetRef="Task_approve_pay_run" />
<bpmn:sequenceFlow id="Flow_Gateway_pay_run_calculated__if__Task_cancel_pay_run" sourceRef="Gateway_pay_run_calculated__if" targetRef="Task_cancel_pay_run" />
<bpmn:sequenceFlow id="Flow_Gateway_approve_approver_payslip__if_end__Gateway_pay_run_calculated__if" sourceRef="Gateway_approve_approver_payslip__if_end" targetRef="Gateway_pay_run_calculated__if" />
<bpmn:sequenceFlow id="Flow_Task_calculate_pay_run__Task_recalculate_pay_run" sourceRef="Task_calculate_pay_run" targetRef="Task_recalculate_pay_run" />
<bpmn:sequenceFlow id="Flow_Gateway_build_pay_run_documents__if__Task_build_pay_run_documents" name="the approval committed; the run's pending document row claimed once by the worker tick" sourceRef="Gateway_build_pay_run_documents__if" targetRef="Task_build_pay_run_documents" />
<bpmn:sequenceFlow id="Flow_Gateway_build_pay_run_documents__if__Gateway_build_pay_run_documents__if_end" name="otherwise" sourceRef="Gateway_build_pay_run_documents__if" targetRef="Gateway_build_pay_run_documents__if_end" />
<bpmn:sequenceFlow id="Flow_Task_build_pay_run_documents__Gateway_build_pay_run_documents__if_end" sourceRef="Task_build_pay_run_documents" targetRef="Gateway_build_pay_run_documents__if_end" />
<bpmn:sequenceFlow id="Flow_Gateway_build_pay_run_documents__if_end__Task_record_fps_accepted" sourceRef="Gateway_build_pay_run_documents__if_end" targetRef="Task_record_fps_accepted" />
<bpmn:sequenceFlow id="Flow_Task_approve_pay_run__Gateway_build_pay_run_documents__if" sourceRef="Task_approve_pay_run" targetRef="Gateway_build_pay_run_documents__if" />
<bpmn:sequenceFlow id="Flow_Task_record_fps_accepted__Task_confirm_pay_run_paid" sourceRef="Task_record_fps_accepted" targetRef="Task_confirm_pay_run_paid" />
<bpmn:sequenceFlow id="Flow_Task_confirm_pay_run_paid__Task_close_pay_run" sourceRef="Task_confirm_pay_run_paid" targetRef="Task_close_pay_run" />
<bpmn:sequenceFlow id="Flow_Task_close_pay_run__End_pay_run_closed" sourceRef="Task_close_pay_run" targetRef="End_pay_run_closed" />
<bpmn:sequenceFlow id="Flow_Task_cancel_pay_run__End_pay_run_cancelled" sourceRef="Task_cancel_pay_run" targetRef="End_pay_run_cancelled" />
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_payroll_v2">
<bpmndi:BPMNPlane id="BPMNPlane_payroll_v2" bpmnElement="Collaboration_payroll_v2">
<bpmndi:BPMNShape id="Participant_payroll_pay_run_di" bpmnElement="Participant_payroll_pay_run" isHorizontal="true">
<dc:Bounds x="0" y="0" width="2830" height="660" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Lane_pay_run_system_di" bpmnElement="Lane_pay_run_system" isHorizontal="true">
<dc:Bounds x="30" y="0" width="2800" height="260" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Lane_pay_run_payroll_manager_di" bpmnElement="Lane_pay_run_payroll_manager" isHorizontal="true">
<dc:Bounds x="30" y="260" width="2800" height="260" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Lane_pay_run_payroll_admin_di" bpmnElement="Lane_pay_run_payroll_admin" isHorizontal="true">
<dc:Bounds x="30" y="520" width="2800" height="140" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Start_pay_run_di" bpmnElement="Start_pay_run">
<dc:Bounds x="157" y="42" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_open_pay_run_di" bpmnElement="Task_open_pay_run">
<dc:Bounds x="465" y="20" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_open_off_cycle_run_di" bpmnElement="Task_open_off_cycle_run">
<dc:Bounds x="465" y="280" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_calculate_pay_run_di" bpmnElement="Task_calculate_pay_run">
<dc:Bounds x="805" y="540" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_recalculate_pay_run_di" bpmnElement="Task_recalculate_pay_run">
<dc:Bounds x="975" y="540" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_approve_pay_run_di" bpmnElement="Task_approve_pay_run">
<dc:Bounds x="1655" y="280" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_build_pay_run_documents_di" bpmnElement="Task_build_pay_run_documents">
<dc:Bounds x="1995" y="20" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_approve_approver_payslip_di" bpmnElement="Task_approve_approver_payslip">
<dc:Bounds x="1315" y="280" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_record_fps_accepted_di" bpmnElement="Task_record_fps_accepted">
<dc:Bounds x="2165" y="20" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_confirm_pay_run_paid_di" bpmnElement="Task_confirm_pay_run_paid">
<dc:Bounds x="2335" y="20" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_close_pay_run_di" bpmnElement="Task_close_pay_run">
<dc:Bounds x="2505" y="20" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_cancel_pay_run_di" bpmnElement="Task_cancel_pay_run">
<dc:Bounds x="805" y="280" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_pay_run_none__if_di" bpmnElement="Gateway_pay_run_none__if">
<dc:Bounds x="320" y="35" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_pay_run_open__if_di" bpmnElement="Gateway_pay_run_open__if">
<dc:Bounds x="660" y="555" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_approve_approver_payslip__if_di" bpmnElement="Gateway_approve_approver_payslip__if">
<dc:Bounds x="1170" y="295" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_approve_approver_payslip__if_end_di" bpmnElement="Gateway_approve_approver_payslip__if_end">
<dc:Bounds x="1340" y="415" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_pay_run_calculated__if_di" bpmnElement="Gateway_pay_run_calculated__if">
<dc:Bounds x="1510" y="295" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_build_pay_run_documents__if_di" bpmnElement="Gateway_build_pay_run_documents__if">
<dc:Bounds x="1850" y="35" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_build_pay_run_documents__if_end_di" bpmnElement="Gateway_build_pay_run_documents__if_end">
<dc:Bounds x="2020" y="155" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="End_pay_run_closed_di" bpmnElement="End_pay_run_closed">
<dc:Bounds x="2707" y="42" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="End_pay_run_cancelled_di" bpmnElement="End_pay_run_cancelled">
<dc:Bounds x="1007" y="302" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_Gateway_pay_run_none__if__Task_open_pay_run_di" bpmnElement="Flow_Gateway_pay_run_none__if__Task_open_pay_run">
<di:waypoint x="370" y="60" />
<di:waypoint x="465" y="60" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_pay_run_none__if__Task_open_off_cycle_run_di" bpmnElement="Flow_Gateway_pay_run_none__if__Task_open_off_cycle_run">
<di:waypoint x="370" y="60" />
<di:waypoint x="440" y="60" />
<di:waypoint x="440" y="320" />
<di:waypoint x="465" y="320" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Start_pay_run__Gateway_pay_run_none__if_di" bpmnElement="Flow_Start_pay_run__Gateway_pay_run_none__if">
<di:waypoint x="193" y="60" />
<di:waypoint x="320" y="60" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_pay_run_open__if__Task_calculate_pay_run_di" bpmnElement="Flow_Gateway_pay_run_open__if__Task_calculate_pay_run">
<di:waypoint x="710" y="580" />
<di:waypoint x="805" y="580" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_pay_run_open__if__Task_cancel_pay_run_di" bpmnElement="Flow_Gateway_pay_run_open__if__Task_cancel_pay_run">
<di:waypoint x="710" y="580" />
<di:waypoint x="780" y="580" />
<di:waypoint x="780" y="320" />
<di:waypoint x="805" y="320" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_open_pay_run__Gateway_pay_run_open__if_di" bpmnElement="Flow_Task_open_pay_run__Gateway_pay_run_open__if">
<di:waypoint x="565" y="60" />
<di:waypoint x="635" y="60" />
<di:waypoint x="635" y="580" />
<di:waypoint x="660" y="580" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_open_off_cycle_run__Gateway_pay_run_open__if_di" bpmnElement="Flow_Task_open_off_cycle_run__Gateway_pay_run_open__if">
<di:waypoint x="565" y="320" />
<di:waypoint x="635" y="320" />
<di:waypoint x="635" y="580" />
<di:waypoint x="660" y="580" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_approve_approver_payslip__if__Task_approve_approver_payslip_di" bpmnElement="Flow_Gateway_approve_approver_payslip__if__Task_approve_approver_payslip">
<di:waypoint x="1220" y="320" />
<di:waypoint x="1315" y="320" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_approve_approver_payslip__if__Gateway_approve_approver_payslip__if_end_di" bpmnElement="Flow_Gateway_approve_approver_payslip__if__Gateway_approve_approver_payslip__if_end">
<di:waypoint x="1220" y="320" />
<di:waypoint x="1315" y="320" />
<di:waypoint x="1315" y="440" />
<di:waypoint x="1340" y="440" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_approve_approver_payslip__Gateway_approve_approver_payslip__if_end_di" bpmnElement="Flow_Task_approve_approver_payslip__Gateway_approve_approver_payslip__if_end">
<di:waypoint x="1365" y="360" />
<di:waypoint x="1365" y="480" />
<di:waypoint x="1365" y="480" />
<di:waypoint x="1365" y="465" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_recalculate_pay_run__Gateway_approve_approver_payslip__if_di" bpmnElement="Flow_Task_recalculate_pay_run__Gateway_approve_approver_payslip__if">
<di:waypoint x="1075" y="580" />
<di:waypoint x="1145" y="580" />
<di:waypoint x="1145" y="320" />
<di:waypoint x="1170" y="320" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_pay_run_calculated__if__Task_approve_pay_run_di" bpmnElement="Flow_Gateway_pay_run_calculated__if__Task_approve_pay_run">
<di:waypoint x="1560" y="320" />
<di:waypoint x="1655" y="320" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_pay_run_calculated__if__Task_cancel_pay_run_di" bpmnElement="Flow_Gateway_pay_run_calculated__if__Task_cancel_pay_run">
<di:waypoint x="1535" y="345" />
<di:waypoint x="1535" y="381" />
<di:waypoint x="855" y="381" />
<di:waypoint x="855" y="360" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_approve_approver_payslip__if_end__Gateway_pay_run_calculated__if_di" bpmnElement="Flow_Gateway_approve_approver_payslip__if_end__Gateway_pay_run_calculated__if">
<di:waypoint x="1390" y="440" />
<di:waypoint x="1485" y="440" />
<di:waypoint x="1485" y="320" />
<di:waypoint x="1510" y="320" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_calculate_pay_run__Task_recalculate_pay_run_di" bpmnElement="Flow_Task_calculate_pay_run__Task_recalculate_pay_run">
<di:waypoint x="905" y="580" />
<di:waypoint x="975" y="580" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_build_pay_run_documents__if__Task_build_pay_run_documents_di" bpmnElement="Flow_Gateway_build_pay_run_documents__if__Task_build_pay_run_documents">
<di:waypoint x="1900" y="60" />
<di:waypoint x="1995" y="60" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_build_pay_run_documents__if__Gateway_build_pay_run_documents__if_end_di" bpmnElement="Flow_Gateway_build_pay_run_documents__if__Gateway_build_pay_run_documents__if_end">
<di:waypoint x="1900" y="60" />
<di:waypoint x="1995" y="60" />
<di:waypoint x="1995" y="180" />
<di:waypoint x="2020" y="180" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_build_pay_run_documents__Gateway_build_pay_run_documents__if_end_di" bpmnElement="Flow_Task_build_pay_run_documents__Gateway_build_pay_run_documents__if_end">
<di:waypoint x="2045" y="100" />
<di:waypoint x="2045" y="232" />
<di:waypoint x="2045" y="232" />
<di:waypoint x="2045" y="205" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Gateway_build_pay_run_documents__if_end__Task_record_fps_accepted_di" bpmnElement="Flow_Gateway_build_pay_run_documents__if_end__Task_record_fps_accepted">
<di:waypoint x="2070" y="180" />
<di:waypoint x="2140" y="180" />
<di:waypoint x="2140" y="60" />
<di:waypoint x="2165" y="60" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_approve_pay_run__Gateway_build_pay_run_documents__if_di" bpmnElement="Flow_Task_approve_pay_run__Gateway_build_pay_run_documents__if">
<di:waypoint x="1755" y="320" />
<di:waypoint x="1825" y="320" />
<di:waypoint x="1825" y="60" />
<di:waypoint x="1850" y="60" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_record_fps_accepted__Task_confirm_pay_run_paid_di" bpmnElement="Flow_Task_record_fps_accepted__Task_confirm_pay_run_paid">
<di:waypoint x="2265" y="60" />
<di:waypoint x="2335" y="60" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_confirm_pay_run_paid__Task_close_pay_run_di" bpmnElement="Flow_Task_confirm_pay_run_paid__Task_close_pay_run">
<di:waypoint x="2435" y="60" />
<di:waypoint x="2505" y="60" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_close_pay_run__End_pay_run_closed_di" bpmnElement="Flow_Task_close_pay_run__End_pay_run_closed">
<di:waypoint x="2605" y="60" />
<di:waypoint x="2707" y="60" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Task_cancel_pay_run__End_pay_run_cancelled_di" bpmnElement="Flow_Task_cancel_pay_run__End_pay_run_cancelled">
<di:waypoint x="905" y="320" />
<di:waypoint x="1007" y="320" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>