draft 1.2.21

This commit is contained in:
Ralph Soika 2024-07-25 18:33:28 +02:00
parent 51da411232
commit 123c3a052c
16 changed files with 301 additions and 108 deletions

View file

@ -1,6 +1,32 @@
# Versionen
### 1.2.21 (Development)
### 1.3.0 (Development - Office-Workflow 5.0.2 )
- Migration auf Imixs-Office-Workflow 5.0.2
- Upgrade Imixs-Workflow 6.7
- Beim XML Invoice Import wird nun auch die Sprache für das Mahnwesen ermittelt (fehlte)
- Währungsunabhängigkeit
**Migration**
1. Parameter Pflegen
a) Währungen pflegen
- DE = EUR;CHF;SEK;RUB;NOK;GBP;USD;CAD
- PL = PLN;EUR;CHF;SEK;RUB;NOK;GBP;USD;CAD
- DWC = AED; EUR;CHF;SEK;RUB;NOK;GBP;USD;CAD
b) Mandant ID
2. OP Listen Template im Textbausteein aktualisieren
3. Alle Workflow Modelle erneuern
### 1.2.21 (Draft)
- Beim XML Invoice Import wird nun auch die Sprache für das Mahnwesen ermittelt (fehlte)
- Währungsunabhängigkeit

View file

@ -0,0 +1,14 @@
# SEPA Schnittstelle Emirates NBD
Für die Bank Emirates NBD kann die bestehene SEPA Schnittstelle nicht verwendet werden. Hierfür wird eine Excel Basierte Dateischnittstelle benötigt.
Diese ist im Adapter `SEPAExportAdapterNBD` umgesetzt.
## Schnittstelle
Die Schnittstelle ist über den `SEPAExportAdapterNBD` realisiert. Dieser läd das Template für den Bulk File Upload aus dem Textbaustein und befüllt es anhand der Schnittstellenbeschreibung
- businessONLINE - Bulk File Upload specifications_20Columns.pdf

View file

@ -0,0 +1,153 @@
package com.alexanderlogistics.dwc;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.inject.Inject;
import javax.xml.bind.JAXBException;
import javax.xml.transform.TransformerException;
import org.imixs.workflow.FileData;
import org.imixs.workflow.ItemCollection;
import org.imixs.workflow.SignalAdapter;
import org.imixs.workflow.engine.ReportService;
import org.imixs.workflow.exceptions.AdapterException;
import org.imixs.workflow.exceptions.PluginException;
import org.imixs.workflow.sepa.services.SepaWorkflowService;
import com.alexanderlogistics.OPListExportAdapterByWeek;
/**
* TheSEPAExportAdapterNBD is an extension of the SEPAExportAdapter.
*
* This adapter export the payment information in a Excel Sheet acording to the
* 'businessONLINE NBD' interface description.
*
* @version 1.0
* @author rsoika
*/
public class SEPAExportAdapterNBD implements SignalAdapter {
private static Logger logger = Logger.getLogger(SEPAExportAdapterNBD.class.getName());
public static final String ERROR_CONFIG = "CONFIG_ERROR";
public static final String ERROR_MISSING_INVOICE = "ERROR_MISSING_INVOICE";
@EJB
ReportService reportService;
@Inject
SepaWorkflowService sepaWorkflowService;
/**
* This method collects a data set with all invoices and computes a NBA Excel
* File. The templated is loaded from a text block
*
* @throws PluginException
*/
@SuppressWarnings("unchecked")
@Override
public ItemCollection execute(ItemCollection sepaExport, ItemCollection event)
throws AdapterException, PluginException {
// Textblock laden
// load the text block
FileData fileData = loadTextBlockFileData(textblockRef, template);
// do we found the document?
if (fileData == null) {
throw new PluginException(OPListExportAdapterByWeek.class.getSimpleName(), ERROR_CONFIG,
"invalid op-list configuration in model event - template=" + template + " not found!");
}
fileData.setName(targetName);
// append document
logger.info("...append new op-list Template: " + targetName);
document.addFileData(fileData);
/* Processing .... */
String key = sepaExport.getItemValueString("name");
// load the report
ItemCollection report = reportService.findReport(event.getItemValueString("txtReportName"));
if (report == null) {
throw new PluginException(SEPAExportAdapterNBD.class.getName(), SepaWorkflowService.REPORT_ERROR,
"Missing report definition. Unable to load report '" + event.getItemValueString("txtReportName")
+ "'. Please check model configuration ");
}
// get the data source based on the $workitemref ....
List<String> refList = sepaExport.getItemValue("$workitemref");
List<ItemCollection> data = new ArrayList<ItemCollection>();
ItemCollection configuration = sepaWorkflowService.loadConfiguration();
logger.info("...SEPA export started - " + refList.size() + " invoices found...");
for (String ref : refList) {
// load invoice
ItemCollection invoice = sepaWorkflowService.loadInvoice(ref);
if (invoice == null) {
logger.warning("Invoice '" + ref + "' not found! SEPA Export can not be executed");
continue;
}
// avoid unsupported characters in sepa fields
invoice = sepaWorkflowService.harmonizeSEPAItem(invoice, SepaWorkflowService.ITEM_CDTR_NAME);
invoice = sepaWorkflowService.harmonizeSEPAItem(invoice, SepaWorkflowService.ITEM_DBTR_NAME);
data.add(invoice);
}
// finally we add the sepa export document to the data collection
data.add(sepaExport);
// create the attachment based on the report definition
// attach a file to the current workitem
// create a harmonized debitor name for the filename.....
String sDepName = sepaExport.getItemValueString(SepaWorkflowService.ITEM_DBTR_NAME);
sDepName = sDepName.replace("&", "_");
sDepName = sDepName.replace(">", "_");
sDepName = sDepName.replace("<", "_");
sDepName = sDepName.replace(" ", "_");
// build a timestamp for the filename
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HHmm");
String sepaFileName = "sepa_" + sDepName + "_" + df.format(new Date()) + ".xml";
try {
// now we transform the data source
// if an optional report definition was defined, this report is used for XSL
// processing if not, than the main report definition is used
FileData filedata = null;
String optionalSepaReport = sepaExport.getItemValueString(SepaWorkflowService.ITEM_SEPA_REPORT);
ItemCollection reportOptional = reportService.findReport(optionalSepaReport);
if (reportOptional != null) {
// use optional report
filedata = reportService.transformDataSource(reportOptional, data, sepaFileName);
sepaWorkflowService.logMessage(
"...SEPA export report=" + sepaExport.getItemValueString(SepaWorkflowService.ITEM_SEPA_REPORT),
configuration, sepaExport);
} else {
if (!optionalSepaReport.isEmpty()) {
sepaWorkflowService.logMessage("...WARNING - SEPA export report " + optionalSepaReport
+ " not found! Default report will be used.", configuration, sepaExport);
}
// use the default report
filedata = reportService.transformDataSource(report, data, sepaFileName);
}
// attach the file
sepaExport.addFileData(filedata);
} catch (JAXBException | IOException | TransformerException e) {
throw new PluginException(SEPAExportAdapterNBD.class.getName(), SepaWorkflowService.REPORT_ERROR,
"Failed to generate SEPA File:" + e.getMessage());
}
// write log
logger.info("...SEPA export " + key + " finished.");
return sepaExport;
}
}

View file

@ -6,7 +6,7 @@
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>bf073e72asdf512c4d60af7740872036</MsgId>
<CreDtTm>2024-07-04T11:17:55</CreDtTm>
<CreDtTm>2024-07-11T14:29:56</CreDtTm>
<NbOfTxs>3</NbOfTxs>
<CtrlSum>655.90</CtrlSum>
<InitgPty>
@ -23,7 +23,7 @@
<Cd>SEPA</Cd>
</SvcLvl>
</PmtTpInf>
<ReqdExctnDt>2024-07-04</ReqdExctnDt>
<ReqdExctnDt>2024-07-11</ReqdExctnDt>
<Dbtr>
<Nm>Targo Bank</Nm>
</Dbtr>

View file

@ -6,7 +6,7 @@
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>bf073e72asdf512c4d60af7740872036</MsgId>
<CreDtTm>2024-07-04T11:17:55</CreDtTm>
<CreDtTm>2024-07-11T14:29:57</CreDtTm>
<NbOfTxs>3</NbOfTxs>
<CtrlSum>655.90</CtrlSum>
<InitgPty>
@ -23,7 +23,7 @@
<Cd>SEPA</Cd>
</SvcLvl>
</PmtTpInf>
<ReqdExctnDt>2024-07-04</ReqdExctnDt>
<ReqdExctnDt>2024-07-11</ReqdExctnDt>
<Dbtr>
<Nm>Targo Bank</Nm>
</Dbtr>

View file

@ -32,7 +32,7 @@
</imixs:item>
<open-bpmn:auto-align/>
</bpmn2:extensionElements>
<bpmn2:signal id="Signal_1" name="org.imixs.workflow.sepa.adapter.SEPAExportAdapter"/>
<bpmn2:signal id="Signal_1" name="com.alexanderlogistics.dwc.SEPAExportAdapterNBD"/>
<bpmn2:signal id="signal_3" name="org.imixs.workflow.sepa.adapter.SEPARefFinishAdapter"/>
<bpmn2:message id="Message_6" name="SEPA-Body">
<bpmn2:documentation id="Documentation_15"><![CDATA[The following SEPA run has been completed for processing:
@ -85,7 +85,7 @@
<bpmn2:documentation id="documentation_JYeSLA"/>
<bpmn2:flowNodeRef>textAnnotation_Ku1gIw</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>TextAnnotation_2</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>TextAnnotation_3</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>textAnnotation_VzlLPQ</bpmn2:flowNodeRef>
</bpmn2:lane>
</bpmn2:laneSet>
<bpmn2:task id="Task_2" imixs:processid="1900" name="Completed">
@ -758,13 +758,6 @@ result.isValid=true;
The SEPA Export process runs on a scheduled basis (e.g. once a day)</bpmn2:text>
<bpmn2:documentation id="documentation_ptZvFQ"/>
</bpmn2:textAnnotation>
<bpmn2:textAnnotation id="TextAnnotation_3">
<bpmn2:text>Contains Report Definition</bpmn2:text>
<bpmn2:documentation id="documentation_qyatkA"/>
</bpmn2:textAnnotation>
<bpmn2:association id="Association_2" sourceRef="TextAnnotation_3" targetRef="IntermediateCatchEvent_2">
<bpmn2:documentation id="documentation_iw1Seg"/>
</bpmn2:association>
<bpmn2:textAnnotation id="textAnnotation_Ku1gIw" textFormat="">
<bpmn2:text id="text_QG18Gg"><![CDATA[Optional update Invoice List]]></bpmn2:text>
<bpmn2:documentation id="documentation_1Q3FYw"/>
@ -772,31 +765,38 @@ result.isValid=true;
<bpmn2:association id="association_bYlYaQ" sourceRef="textAnnotation_Ku1gIw" targetRef="IntermediateCatchEvent_18">
<bpmn2:documentation id="documentation_cFJD8w"/>
</bpmn2:association>
<bpmn2:textAnnotation id="textAnnotation_VzlLPQ" textFormat="">
<bpmn2:text id="text_S6SHrA"><![CDATA[For the Bank 'Emirates NBD' the file data is exported into a Excel Sheet instead of a SEPA file.]]></bpmn2:text>
<bpmn2:documentation id="documentation_GKkncg"/>
</bpmn2:textAnnotation>
<bpmn2:association id="association_PAgWfg" sourceRef="textAnnotation_VzlLPQ" targetRef="IntermediateCatchEvent_2">
<bpmn2:documentation id="documentation_jfZ1jg"/>
</bpmn2:association>
</bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="Default Process Diagram">
<bpmndi:BPMNPlane bpmnElement="Collaboration_1" id="BPMNPlane_1">
<bpmndi:BPMNShape bpmnElement="Participant_1" id="BPMNShape_Participant_1" isHorizontal="true">
<dc:Bounds height="400.0" width="1400.0" x="100.0" y="150.0"/>
<dc:Bounds height="700.0" width="1410.0" x="93.0" y="150.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Lane_1" id="BPMNShape_Lane_1" isHorizontal="true">
<dc:Bounds height="400.0" width="1370.0" x="130.0" y="150.0"/>
<dc:Bounds height="700.0" width="1380.0" x="123.0" y="150.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Task_6" id="BPMNShape_Task_6">
<dc:Bounds height="50.0" width="110.0" x="1207.0" y="428.0"/>
<dc:Bounds height="50.0" width="110.0" x="1200.0" y="428.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Task_7" id="BPMNShape_Task_7">
<dc:Bounds height="50.0" width="110.0" x="560.0" y="349.0"/>
<dc:Bounds height="50.0" width="110.0" x="553.0" y="349.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="EndEvent_3" id="BPMNShape_EndEvent_2">
<dc:Bounds height="36.0" width="36.0" x="1410.0" y="356.0"/>
<dc:Bounds height="36.0" width="36.0" x="1403.0" y="356.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_85" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="20.0" width="100.0" x="1378.0" y="392.0"/>
<dc:Bounds height="20.0" width="100.0" x="1371.0" y="392.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_18" id="BPMNShape_IntermediateCatchEvent_18">
<dc:Bounds height="36.0" width="36.0" x="1119.0" y="267.0"/>
<dc:Bounds height="36.0" width="36.0" x="1112.0" y="267.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_23" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="20.0" width="100.0" x="1087.0" y="303.0"/>
<dc:Bounds height="20.0" width="100.0" x="1080.0" y="303.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Message_6" id="BPMNShape_Message_3">
@ -818,190 +818,190 @@ result.isValid=true;
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_1" id="BPMNShape_IntermediateCatchEvent_1">
<dc:Bounds height="36.0" width="36.0" x="552.0" y="435.0"/>
<dc:Bounds height="36.0" width="36.0" x="545.0" y="435.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_7" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="20.0" width="100.0" x="520.0" y="471.0"/>
<dc:Bounds height="20.0" width="100.0" x="513.0" y="471.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Task_2" id="BPMNShape_Task_2">
<dc:Bounds height="50.0" width="110.0" x="1207.0" y="259.0"/>
<dc:Bounds height="50.0" width="110.0" x="1200.0" y="259.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="ExclusiveGateway_1" id="BPMNShape_ExclusiveGateway_1" isMarkerVisible="true">
<dc:Bounds height="50.0" width="50.0" x="720.0" y="349.0"/>
<dc:Bounds height="50.0" width="50.0" x="713.0" y="349.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_34" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="20.0" width="100.0" x="688.0" y="388.0"/>
<dc:Bounds height="20.0" width="100.0" x="681.0" y="388.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="TextAnnotation_2" id="BPMNShape_TextAnnotation_2">
<dc:Bounds height="111.0" width="301.0" x="180.0" y="170.0"/>
<dc:Bounds height="150.0" width="339.0" x="173.0" y="170.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_6" id="BPMNShape_IntermediateCatchEvent_6">
<dc:Bounds height="36.0" width="36.0" x="597.0" y="266.0"/>
<dc:Bounds height="36.0" width="36.0" x="590.0" y="266.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_10" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="20.0" width="100.0" x="565.0" y="302.0"/>
<dc:Bounds height="20.0" width="100.0" x="558.0" y="302.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="StartEvent_2" id="BPMNShape_StartEvent_1">
<dc:Bounds height="36.0" width="36.0" x="470.0" y="356.0"/>
<dc:Bounds height="36.0" width="36.0" x="463.0" y="356.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_14" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="20.0" width="100.0" x="437.5" y="392.0"/>
<dc:Bounds height="20.0" width="100.0" x="430.5" y="392.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_3" id="BPMNShape_IntermediateCatchEvent_3">
<dc:Bounds height="36.0" width="36.0" x="646.0" y="435.0"/>
<dc:Bounds height="36.0" width="36.0" x="639.0" y="435.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_21" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="20.0" width="100.0" x="614.0" y="471.0"/>
<dc:Bounds height="20.0" width="100.0" x="607.0" y="471.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_7" id="BPMNShape_IntermediateCatchEvent_7">
<dc:Bounds height="36.0" width="36.0" x="1119.0" y="435.0"/>
<dc:Bounds height="36.0" width="36.0" x="1112.0" y="435.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_39" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="20.0" width="100.0" x="1087.5" y="471.0"/>
<dc:Bounds height="20.0" width="100.0" x="1080.5" y="471.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Task_1" id="BPMNShape_Task_1">
<dc:Bounds height="50.0" width="110.0" x="920.0" y="259.0"/>
<dc:Bounds height="50.0" width="110.0" x="913.0" y="259.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_2" id="BPMNShape_IntermediateCatchEvent_2">
<dc:Bounds height="36.0" width="36.0" x="820.0" y="266.0"/>
<dc:Bounds height="36.0" width="36.0" x="813.0" y="266.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_2" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="20.0" width="100.0" x="788.0" y="302.0"/>
<dc:Bounds height="20.0" width="100.0" x="781.0" y="302.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="TextAnnotation_3" id="BPMNShape_TextAnnotation_3">
<dc:Bounds height="50.0" width="104.0" x="710.0" y="220.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_4" id="BPMNShape_IntermediateCatchEvent_4">
<dc:Bounds height="36.0" width="36.0" x="957.0" y="180.0"/>
<dc:Bounds height="36.0" width="36.0" x="950.0" y="180.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_16" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="20.0" width="100.0" x="925.0" y="216.0"/>
<dc:Bounds height="20.0" width="100.0" x="918.0" y="216.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="IntermediateCatchEvent_5" id="BPMNShape_IntermediateCatchEvent_5">
<dc:Bounds height="36.0" width="36.0" x="890.0" y="340.0"/>
<dc:Bounds height="36.0" width="36.0" x="883.0" y="340.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_13" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="20.0" width="100.0" x="858.0" y="376.0"/>
<dc:Bounds height="20.0" width="100.0" x="851.0" y="376.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_28" id="BPMNEdge_SequenceFlow_28" sourceElement="BPMNShape_Task_7" targetElement="BPMNShape_ExclusiveGateway_1">
<bpmndi:BPMNLabel id="BPMNLabel_71"/>
<di:waypoint x="670.0" y="374.0"/>
<di:waypoint x="695.0" y="374.0"/>
<di:waypoint x="720.0" y="374.0"/>
<di:waypoint x="663.0" y="374.0"/>
<di:waypoint x="688.0" y="374.0"/>
<di:waypoint x="713.0" y="374.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="Association_1" id="BPMNEdge_Association_1" sourceElement="BPMNShape_TextAnnotation_1" targetElement="BPMNShape_IntermediateCatchEvent_1">
<bpmndi:BPMNLabel id="BPMNLabel_15"/>
<di:waypoint x="485.0" y="460.0"/>
<di:waypoint x="518.0" y="460.0"/>
<di:waypoint x="518.0" y="453.0"/>
<di:waypoint x="552.0" y="453.0"/>
<di:waypoint x="545.0" y="453.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_7" id="BPMNEdge_SequenceFlow_7" sourceElement="BPMNShape_IntermediateCatchEvent_1" targetElement="BPMNShape_Task_7">
<bpmndi:BPMNLabel id="BPMNLabel_18"/>
<di:waypoint x="588.0" y="453.0"/>
<di:waypoint x="596.0" y="453.0"/>
<di:waypoint x="596.0" y="399.0"/>
<di:waypoint x="581.0" y="453.0"/>
<di:waypoint x="589.0" y="453.0"/>
<di:waypoint x="589.0" y="399.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_2" id="BPMNEdge_SequenceFlow_2" sourceElement="BPMNShape_IntermediateCatchEvent_18" targetElement="BPMNShape_Task_2">
<bpmndi:BPMNLabel id="BPMNLabel_25"/>
<di:waypoint x="1155.0" y="285.0"/>
<di:waypoint x="1181.0" y="285.0"/>
<di:waypoint x="1181.0" y="284.0"/>
<di:waypoint x="1207.0" y="284.0"/>
<di:waypoint x="1148.0" y="285.0"/>
<di:waypoint x="1174.0" y="285.0"/>
<di:waypoint x="1174.0" y="284.0"/>
<di:waypoint x="1200.0" y="284.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_10" id="BPMNEdge_SequenceFlow_10" sourceElement="BPMNShape_Task_2" targetElement="BPMNShape_EndEvent_2">
<bpmndi:BPMNLabel id="BPMNLabel_26"/>
<di:waypoint x="1317.0" y="284.0"/>
<di:waypoint x="1428.0" y="284.0"/>
<di:waypoint x="1428.0" y="356.0"/>
<di:waypoint x="1310.0" y="284.0"/>
<di:waypoint x="1421.0" y="284.0"/>
<di:waypoint x="1421.0" y="356.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_17" id="BPMNEdge_SequenceFlow_17" sourceElement="BPMNShape_Task_6" targetElement="BPMNShape_EndEvent_2">
<bpmndi:BPMNLabel id="BPMNLabel_36"/>
<di:waypoint x="1317.0" y="453.0"/>
<di:waypoint x="1428.0" y="453.0"/>
<di:waypoint x="1428.0" y="392.0"/>
<di:waypoint x="1310.0" y="453.0"/>
<di:waypoint x="1421.0" y="453.0"/>
<di:waypoint x="1421.0" y="392.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_12" id="BPMNEdge_SequenceFlow_12" sourceElement="BPMNShape_IntermediateCatchEvent_6" targetElement="BPMNShape_Task_7">
<bpmndi:BPMNLabel id="BPMNLabel_32"/>
<di:waypoint x="615.0" y="302.0"/>
<di:waypoint x="615.0" y="325.0"/>
<di:waypoint x="615.0" y="349.0"/>
<di:waypoint x="608.0" y="302.0"/>
<di:waypoint x="608.0" y="325.0"/>
<di:waypoint x="608.0" y="349.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_6" id="BPMNEdge_SequenceFlow_6" sourceElement="BPMNShape_StartEvent_1" targetElement="BPMNShape_Task_7">
<bpmndi:BPMNLabel id="BPMNLabel_20"/>
<di:waypoint x="506.0" y="374.0"/>
<di:waypoint x="533.0" y="374.0"/>
<di:waypoint x="560.0" y="374.0"/>
<di:waypoint x="499.0" y="374.0"/>
<di:waypoint x="526.0" y="374.0"/>
<di:waypoint x="553.0" y="374.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_8" id="BPMNEdge_SequenceFlow_8" sourceElement="BPMNShape_IntermediateCatchEvent_3" targetElement="BPMNShape_Task_7">
<bpmndi:BPMNLabel id="BPMNLabel_22"/>
<di:waypoint x="646.0" y="453.0"/>
<di:waypoint x="633.0" y="453.0"/>
<di:waypoint x="633.0" y="399.0"/>
<di:waypoint x="639.0" y="453.0"/>
<di:waypoint x="626.0" y="453.0"/>
<di:waypoint x="626.0" y="399.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_18" id="BPMNEdge_SequenceFlow_18" sourceElement="BPMNShape_ExclusiveGateway_1" targetElement="BPMNShape_IntermediateCatchEvent_7">
<bpmndi:BPMNLabel id="BPMNLabel_40"/>
<di:waypoint x="745.0" y="399.0"/>
<di:waypoint x="745.0" y="453.0"/>
<di:waypoint x="1119.0" y="453.0"/>
<di:waypoint x="738.0" y="399.0"/>
<di:waypoint x="738.0" y="453.0"/>
<di:waypoint x="1112.0" y="453.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_19" id="BPMNEdge_SequenceFlow_19" sourceElement="BPMNShape_IntermediateCatchEvent_7" targetElement="BPMNShape_Task_6">
<bpmndi:BPMNLabel id="BPMNLabel_41"/>
<di:waypoint x="1155.0" y="453.0"/>
<di:waypoint x="1181.0" y="453.0"/>
<di:waypoint x="1207.0" y="453.0"/>
<di:waypoint x="1148.0" y="453.0"/>
<di:waypoint x="1174.0" y="453.0"/>
<di:waypoint x="1200.0" y="453.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_1" id="BPMNEdge_SequenceFlow_1" sourceElement="BPMNShape_ExclusiveGateway_1" targetElement="BPMNShape_IntermediateCatchEvent_2">
<bpmndi:BPMNLabel id="BPMNLabel_3"/>
<di:waypoint x="745.0" y="349.0"/>
<di:waypoint x="745.0" y="284.0"/>
<di:waypoint x="820.0" y="284.0"/>
<di:waypoint x="738.0" y="349.0"/>
<di:waypoint x="738.0" y="284.0"/>
<di:waypoint x="813.0" y="284.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_3" id="BPMNEdge_SequenceFlow_3" sourceElement="BPMNShape_IntermediateCatchEvent_2" targetElement="BPMNShape_Task_1">
<bpmndi:BPMNLabel id="BPMNLabel_4"/>
<di:waypoint x="856.0" y="284.0"/>
<di:waypoint x="888.0" y="284.0"/>
<di:waypoint x="920.0" y="284.0"/>
<di:waypoint x="849.0" y="284.0"/>
<di:waypoint x="881.0" y="284.0"/>
<di:waypoint x="913.0" y="284.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_4" id="BPMNEdge_SequenceFlow_4" sourceElement="BPMNShape_Task_1" targetElement="BPMNShape_IntermediateCatchEvent_18">
<bpmndi:BPMNLabel id="BPMNLabel_6"/>
<di:waypoint x="1030.0" y="284.0"/>
<di:waypoint x="1074.0" y="284.0"/>
<di:waypoint x="1119.0277992443885" y="284.0"/>
<di:waypoint x="1023.0" y="284.0"/>
<di:waypoint x="1067.0" y="284.0"/>
<di:waypoint x="1112.0277992443885" y="284.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_5" id="BPMNEdge_SequenceFlow_5" sourceElement="BPMNShape_Task_1" targetElement="BPMNShape_IntermediateCatchEvent_7">
<bpmndi:BPMNLabel id="BPMNLabel_8"/>
<di:waypoint x="975.0" y="309.0"/>
<di:waypoint x="975.0" y="372.0"/>
<di:waypoint x="1137.0" y="372.0"/>
<di:waypoint x="1137.0" y="435.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="Association_2" id="BPMNEdge_Association_2" sourceElement="BPMNShape_TextAnnotation_3" targetElement="BPMNShape_IntermediateCatchEvent_2">
<bpmndi:BPMNLabel id="BPMNLabel_11"/>
<di:waypoint x="814.0" y="245.0"/>
<di:waypoint x="838.0" y="245.0"/>
<di:waypoint x="838.0" y="266.0"/>
<di:waypoint x="968.0" y="309.0"/>
<di:waypoint x="968.0" y="372.0"/>
<di:waypoint x="1130.0" y="372.0"/>
<di:waypoint x="1130.0" y="435.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_11" id="BPMNEdge_SequenceFlow_11" sourceElement="BPMNShape_IntermediateCatchEvent_4" targetElement="BPMNShape_Task_1">
<bpmndi:BPMNLabel id="BPMNLabel_17"/>
<di:waypoint x="975.0" y="216.0"/>
<di:waypoint x="975.0" y="237.0"/>
<di:waypoint x="975.0" y="259.0"/>
<di:waypoint x="968.0" y="216.0"/>
<di:waypoint x="968.0" y="237.0"/>
<di:waypoint x="968.0" y="259.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="SequenceFlow_9" id="BPMNEdge_SequenceFlow_9" sourceElement="BPMNShape_IntermediateCatchEvent_5" targetElement="BPMNShape_Task_1">
<bpmndi:BPMNLabel id="BPMNLabel_19"/>
<di:waypoint x="908.0" y="340.0"/>
<di:waypoint x="908.0" y="292.0"/>
<di:waypoint x="920.0" y="292.0"/>
<di:waypoint x="901.0" y="340.0"/>
<di:waypoint x="901.0" y="292.0"/>
<di:waypoint x="913.0" y="292.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape bpmnElement="textAnnotation_Ku1gIw" id="BPMNShape_60CxWw">
<dc:Bounds height="50.0" width="175.0" x="1190.0" y="173.0"/>
<dc:Bounds height="50.0" width="175.0" x="1183.0" y="173.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="association_bYlYaQ" id="BPMNEdge_yt4O0Q" sourceElement="BPMNShape_60CxWw" targetElement="BPMNShape_IntermediateCatchEvent_18">
<di:waypoint x="1190.0" y="198.0"/>
<di:waypoint x="1172.5" y="198.0"/>
<di:waypoint x="1172.5" y="284.0"/>
<di:waypoint x="1154.9722007556115" y="284.0"/>
<di:waypoint x="1183.0" y="198.0"/>
<di:waypoint x="1165.5" y="198.0"/>
<di:waypoint x="1165.5" y="284.0"/>
<di:waypoint x="1147.9722007556115" y="284.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape bpmnElement="textAnnotation_VzlLPQ" id="BPMNShape_scA8Jw">
<dc:Bounds height="109.0" width="493.0" x="607.0" y="532.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="association_PAgWfg" id="BPMNEdge_R9c2LQ" sourceElement="BPMNShape_scA8Jw" targetElement="BPMNShape_IntermediateCatchEvent_2">
<di:waypoint x="853.5" y="532.0"/>
<di:waypoint x="853.5" y="417.0"/>
<di:waypoint x="831.0" y="417.0"/>
<di:waypoint x="831.0" y="302.0"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
<bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1">