neuer workflow mahnlauf

This commit is contained in:
Ralph Soika 2022-10-06 15:58:26 +02:00
parent dae4560a69
commit 1870d0856a
7 changed files with 1152 additions and 278 deletions

View file

@ -49,6 +49,7 @@ public class DatevCargosoftImportAdapter implements SignalAdapter {
public static final String ENCODING = "ISO-8859-1";
public static final String CHILD_ITEM_PROPERTY = "_ChildItems";
public static final String REGEX_IMPORTTEXTPATTERN = "^R[1-8] .*$";
@Inject
WorkflowService workflowService;
@ -102,6 +103,8 @@ public class DatevCargosoftImportAdapter implements SignalAdapter {
int positions = 0;
int invoices = 0;
int dupplicates = 0;
int rueckstellungen=0;
int eingangsrechnungen=0;
String dataLine;
// Start Datum Wirtschaftsjahr berechnen (JJJJMMTT)
@ -168,10 +171,22 @@ public class DatevCargosoftImportAdapter implements SignalAdapter {
// Skip Eingangsrechnungen
if (!gegenKonto.startsWith("1")) {
eingangsrechnungen++;
// skip
continue;
}
// Skip Rückstellung
// text darf nicht mit R1 bis R8 beginnen
// ^R[1-8] .
if (text.matches(REGEX_IMPORTTEXTPATTERN)) {
rueckstellungen++;
// skip
continue;
}
positions++;
logger.info("...read dbtr: " + gegenKonto + " beleg-nr: " + belegNummer);
@ -236,6 +251,14 @@ public class DatevCargosoftImportAdapter implements SignalAdapter {
log(logBuffer, line + " Zeilen eingelesen ");
log(logBuffer, positions + " Rechnungspositionen eingelesen ");
log(logBuffer, invoices + " Rechnungen importiert ");
if (rueckstellungen>0) {
log(logBuffer, rueckstellungen + " Rückstellungen wurden übersprungen.");
}
if (eingangsrechnungen>0) {
log(logBuffer, eingangsrechnungen + " Eingangsrechnungen wurden übersprungen.");
}
if (dupplicates > 0) {
log(logBuffer, dupplicates + " Rechnungen wurden übersprungen da diese bereits importiert wurden!");
}

View file

@ -0,0 +1,61 @@
package com.alexanderlogistics.mahnlauf;
import java.util.List;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.inject.Inject;
import org.imixs.workflow.ItemCollection;
import org.imixs.workflow.SignalAdapter;
import org.imixs.workflow.engine.ModelService;
import org.imixs.workflow.engine.WorkflowService;
import org.imixs.workflow.exceptions.AdapterException;
import org.imixs.workflow.exceptions.PluginException;
/**
* The MahnlaufExecuteAdapter triggers the event 300 for all linked invoices
* <p>
*
* @version 1.0
* @author rsoika
*/
public class MahnlaufExecuteAdapter implements SignalAdapter {
@SuppressWarnings("unused")
private static Logger logger = Logger.getLogger(MahnlaufExecuteAdapter.class.getName());
@EJB
ModelService modelService;
@EJB
WorkflowService workflowService = null;
@Inject
MahnlaufService mahnlaufService;
/**
* This method finds all invices ($workitemref) and tirgges event 300
*
* @throws PluginException
*/
@SuppressWarnings("unchecked")
@Override
public ItemCollection execute(ItemCollection mahnLaufWorkitem, ItemCollection event)
throws AdapterException, PluginException {
// get all Invoices of this Mahnlauf
List<String> refList = mahnLaufWorkitem.getItemValue("$workitemref");
for (String uniqueId : refList) {
ItemCollection invoice = workflowService.getWorkItem(uniqueId);
if (invoice != null && (invoice.getTaskID()>=MahnlaufService.TASK_MAHNLAUF_START && invoice.getTaskID()<=MahnlaufService.TASK_MAHNLAUF_END)) {
mahnlaufService.processInvoice(invoice.event(MahnlaufService.EVENT_MAHNLAUF_EXECUTE));
}
}
return mahnLaufWorkitem;
}
}

View file

@ -0,0 +1,160 @@
package com.alexanderlogistics.mahnlauf;
import java.util.Date;
import java.util.List;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.inject.Inject;
import org.imixs.workflow.ItemCollection;
import org.imixs.workflow.Model;
import org.imixs.workflow.SignalAdapter;
import org.imixs.workflow.WorkflowKernel;
import org.imixs.workflow.engine.ModelService;
import org.imixs.workflow.engine.WorkflowService;
import org.imixs.workflow.exceptions.AdapterException;
import org.imixs.workflow.exceptions.ModelException;
import org.imixs.workflow.exceptions.PluginException;
import org.imixs.workflow.exceptions.QueryException;
import org.imixs.workflow.sepa.services.SepaWorkflowService;
/**
* The MahnlaufRefAddAdapter links an invoice with a Mahnlauf for the
* dbtr.number item . If there is currently no open Mahnlauf for this key, the
* adapter automatically creates a new process instance. If a manhlauf for this
* dbt.number is found, the invoice is just added.
* <p>
* If the invoice has already been linked to a Mahnlauf nothing happens.
* <p>
*
* @version 1.0
* @author rsoika
*/
public class MahnlaufRefAddAdapter implements SignalAdapter {
private static Logger logger = Logger.getLogger(MahnlaufRefAddAdapter.class.getName());
@EJB
ModelService modelService;
@EJB
WorkflowService workflowService = null;
@Inject
SepaWorkflowService sepaWorkflowService;
/**
* This method finds or create the Mahnlauf and adds a reference ($workitemref)
* to the current invoice.
*
* @throws PluginException
*/
@SuppressWarnings("unchecked")
@Override
public ItemCollection execute(ItemCollection invoice, ItemCollection event)
throws AdapterException, PluginException {
String dbtrNumber = invoice.getItemValueString(MahnlaufService.ITEM_DBTR_NUMBER);
ItemCollection mahnLaufWorkitem;
try {
mahnLaufWorkitem = findMahnlauf(dbtrNumber);
if (mahnLaufWorkitem == null) {
// create one...
mahnLaufWorkitem = createNewMahnlauf(dbtrNumber, invoice, event);
}
// add Invoice to Mahnlauf
List<String> refList = mahnLaufWorkitem.getItemValue("$workitemref");
if (!refList.contains(invoice.getUniqueID())) {
mahnLaufWorkitem.appendItemValueUnique("$workitemref", invoice.getUniqueID());
}
// set event 100 and process
ItemCollection mahnlaufConfig = workflowService.evalWorkflowResult(event, "mahnlauf", invoice, true);
int eventID = mahnlaufConfig.getItemValueInteger("event");
mahnLaufWorkitem.event(eventID);
workflowService.processWorkItem(mahnLaufWorkitem);
} catch (QueryException | ModelException e) {
throw new PluginException(MahnlaufRefAddAdapter.class.getName(),
MahnlaufService.ERROR_CONFIG, "Unable to create Mahnlauf", e);
}
// set mahnlauf ref
invoice.setItemValue("dunning.ref", mahnLaufWorkitem.getUniqueID());
return invoice;
}
/**
* Helper method finds an open mahnlauf for a debtr.numbre (name)
*
* @param key
* @return
* @throws QueryException
*/
public ItemCollection findMahnlauf(String key) throws QueryException {
String query = "(type:workitem) AND ($modelversion:mahnlauf*) AND (name:\"" + key + "\")";
List<ItemCollection> resultList = workflowService.getDocumentService().find(query, 1, 0, "$modified", true);
if (resultList.size() > 0) {
return resultList.get(0);
}
// no mahnaluffound
return null;
}
/**
* Helper method to create a new Mahnlauf workitem
*
* @param key
* @param invoice
* @return
* @throws ModelException
* @throws PluginException
*/
public ItemCollection createNewMahnlauf(String key, ItemCollection invoice, ItemCollection event)
throws ModelException, PluginException {
String modelVersion = null;
int taskID = -1;
int eventID=-1;
// test if the event provides a sepa export configuration
ItemCollection mahnlaufConfig = workflowService.evalWorkflowResult(event, "mahnlauf", invoice, true);
if (mahnlaufConfig != null && mahnlaufConfig.hasItem("modelversion") && mahnlaufConfig.hasItem("task")) {
logger.fine("read model information from event");
modelVersion = mahnlaufConfig.getItemValueString("modelVersion");
taskID = mahnlaufConfig.getItemValueInteger("task");
eventID = mahnlaufConfig.getItemValueInteger("event");
}
// build the sepa export workitem....
ItemCollection mahnlaufWorkitem = new ItemCollection().model(modelVersion).task(taskID);
mahnlaufWorkitem.replaceItemValue("name", key);
mahnlaufWorkitem.replaceItemValue(WorkflowKernel.CREATED, new Date());
mahnlaufWorkitem.replaceItemValue(WorkflowKernel.MODIFIED, new Date());
// set unqiueid
mahnlaufWorkitem.setItemValue(WorkflowKernel.UNIQUEID, WorkflowKernel.generateUniqueID());
// copy dbtr_iban
mahnlaufWorkitem.setItemValue(MahnlaufService.ITEM_DBTR_NAME, invoice.getItemValue(MahnlaufService.ITEM_DBTR_NAME));
mahnlaufWorkitem.setItemValue(MahnlaufService.ITEM_DBTR_EMAIL, invoice.getItemValue(MahnlaufService.ITEM_DBTR_EMAIL));
mahnlaufWorkitem.setItemValue(MahnlaufService.ITEM_DBTR_NUMBER, invoice.getItemValue(MahnlaufService.ITEM_DBTR_NUMBER));
mahnlaufWorkitem.setItemValue("invoice.language", invoice.getItemValue("invoice.language"));
// set workflow group name from the Task Element to identify document in xslt
Model model = modelService.getModel(modelVersion);
ItemCollection task = model.getTask(taskID);
String modelTaskGroupName = task.getItemValueString("txtworkflowgroup"); // DO NOT CHANGE!
mahnlaufWorkitem.setItemValue(WorkflowKernel.WORKFLOWGROUP, modelTaskGroupName);
logger.info("...created new mahnlauf " + key + "...");
return mahnlaufWorkitem;
}
}

View file

@ -0,0 +1,95 @@
/*******************************************************************************
* Imixs Workflow
* Copyright (C) 2001, 2011 Imixs Software Solutions GmbH,
* http://www.imixs.com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You can receive a copy of the GNU General Public
* License at http://www.gnu.org/licenses/gpl.html
*
* Project:
* http://www.imixs.org
* http://java.net/projects/imixs-workflow
*
* Contributors:
* Imixs Software Solutions GmbH - initial API and implementation
* Ralph Soika - Software Developer
*******************************************************************************/
package com.alexanderlogistics.mahnlauf;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.annotation.security.RunAs;
import javax.ejb.Singleton;
import javax.inject.Inject;
import org.imixs.workflow.ItemCollection;
import org.imixs.workflow.engine.WorkflowService;
import org.imixs.workflow.exceptions.AccessDeniedException;
import org.imixs.workflow.exceptions.ModelException;
import org.imixs.workflow.exceptions.PluginException;
import org.imixs.workflow.exceptions.ProcessingErrorException;
/**
* Der MahnlaufService wird vom MahnlaufExecuteAdapter um
* Ausgangsrechnungen zu akutalisieren.
*
* @author rsoika
*
*/
@DeclareRoles({ "org.imixs.ACCESSLEVEL.NOACCESS", "org.imixs.ACCESSLEVEL.READERACCESS",
"org.imixs.ACCESSLEVEL.AUTHORACCESS", "org.imixs.ACCESSLEVEL.EDITORACCESS",
"org.imixs.ACCESSLEVEL.MANAGERACCESS" })
@RolesAllowed({ "org.imixs.ACCESSLEVEL.NOACCESS", "org.imixs.ACCESSLEVEL.READERACCESS",
"org.imixs.ACCESSLEVEL.AUTHORACCESS", "org.imixs.ACCESSLEVEL.EDITORACCESS",
"org.imixs.ACCESSLEVEL.MANAGERACCESS" })
@Singleton
@RunAs("org.imixs.ACCESSLEVEL.MANAGERACCESS")
public class MahnlaufService {
public static final int TASK_MAHNLAUF_START = 5100;
public static final int TASK_MAHNLAUF_END = 5299;
public static final int EVENT_MAHNLAUF_EXECUTE = 300;
public static final String ITEM_DBTR_NUMBER = "dbtr.number";
public static final String ITEM_DBTR_NAME = "dbtr.name";
public static final String ITEM_DBTR_EMAIL = "dbtr.mail";
public static final String ERROR_CONFIG = "CONFIG_ERROR";
public static final String ERROR_WORKFLOW = "ERROR_WORKFLOW";
@Inject
WorkflowService workflowService;
/**
* * Diese Method processed eine Invoice mit Manager Rechnten
*
* @throws PluginException
* @throws ModelException
* @throws ProcessingErrorException
* @throws AccessDeniedException
*/
public ItemCollection processInvoice(ItemCollection invoice) throws PluginException {
try {
return workflowService.processWorkItem(invoice);
} catch (AccessDeniedException | ProcessingErrorException | PluginException | ModelException e) {
throw new PluginException(PluginException.class.getName(), ERROR_WORKFLOW,
"Die Rechnung konnte nicht verarbeitet werden - " + e.getMessage(), e);
}
}
}

View file

@ -2,6 +2,8 @@ package com.alexanderlogistics;
import org.junit.Test;
import com.alexanderlogistics.datev.DatevCargosoftImportAdapter;
import junit.framework.Assert;
/**
@ -12,18 +14,27 @@ import junit.framework.Assert;
*/
public class TestPostionsnummernRegex {
/**
* Test positionnummern 'XX-YYY-####-###'
*/
@Test
public void testPutFileToFTP() {
/**
* Test positionnummern 'XX-YYY-####-###'
*/
@Test
public void testPutFileToFTP() {
Assert.assertTrue("AA-BBC-1234-991".matches(InvoicePlugin.REGEX_POSNUMER));
Assert.assertFalse("aa-BBC-1234-991".matches(InvoicePlugin.REGEX_POSNUMER));
Assert.assertFalse("CC-BBC-1234-991 ".matches(InvoicePlugin.REGEX_POSNUMER));
Assert.assertTrue("IM-ZEL-2101-005".matches(InvoicePlugin.REGEX_POSNUMER));
}
Assert.assertTrue("AA-BBC-1234-991".matches(InvoicePlugin.REGEX_POSNUMER));
Assert.assertFalse("aa-BBC-1234-991".matches(InvoicePlugin.REGEX_POSNUMER));
Assert.assertFalse("CC-BBC-1234-991 ".matches(InvoicePlugin.REGEX_POSNUMER));
Assert.assertTrue("IM-ZEL-2101-005".matches(InvoicePlugin.REGEX_POSNUMER));
}
@Test
public void testCargoImportText() {
Assert.assertTrue("R3 EX-PRO-2208-054".matches(DatevCargosoftImportAdapter.REGEX_IMPORTTEXTPATTERN));
Assert.assertTrue("R3 VP".matches(DatevCargosoftImportAdapter.REGEX_IMPORTTEXTPATTERN));
Assert.assertFalse("R LA-HOL-2208-013".matches(DatevCargosoftImportAdapter.REGEX_IMPORTTEXTPATTERN));
}
}

View file

@ -32,7 +32,8 @@
</bpmn2:extensionElements>
<bpmn2:signal id="Signal_1" name="com.alexanderlogistics.ZahlungsavisExportAdapter"/>
<bpmn2:signal id="Signal_2" name="com.alexanderlogistics.ZahlungseingangSaldoAdapter"/>
<bpmn2:message id="Message_2" name="HTML-Header">
<bpmn2:signal id="Signal_3" name="com.alexanderlogistics.mahnlauf.MahnlaufExecuteAdapter"/>
<bpmn2:message id="Message_2" name="Html-Header">
<bpmn2:documentation id="Documentation_22"><![CDATA[<html>
<head>
<style type="text/css">
@ -67,7 +68,7 @@ th { font-weight: bold;}
</head>
<body>]]></bpmn2:documentation>
</bpmn2:message>
<bpmn2:message id="Message_4" name="HTML-Footer-EN">
<bpmn2:message id="Message_4" name="Html-Footer-EN">
<bpmn2:documentation id="Documentation_23"><![CDATA[<p>In case you have already made the payment, please disregard this notice. If you require any information regarding your account, please do not hesitate to contact us.</p>
<p>Thank you for your cooperation.</p>
<p>&nbsp;</p>
@ -87,14 +88,16 @@ th { font-weight: bold;}
<bpmn2:flowNodeRef>StartEvent_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>Task_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_3</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>Task_2</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>EndEvent_3</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_6</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>ExclusiveGateway_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_4</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_5</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_7</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>ExclusiveGateway_2</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_4</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>Task_2</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>ExclusiveGateway_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_2</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>IntermediateCatchEvent_6</bpmn2:flowNodeRef>
</bpmn2:lane>
</bpmn2:laneSet>
<bpmn2:startEvent id="StartEvent_1" name="Start">
@ -135,6 +138,7 @@ th { font-weight: bold;}
<bpmn2:sequenceFlow id="SequenceFlow_10" sourceRef="Task_2" targetRef="EndEvent_3"/>
<bpmn2:endEvent id="EndEvent_3" name="End">
<bpmn2:incoming>SequenceFlow_10</bpmn2:incoming>
<bpmn2:incoming>SequenceFlow_13</bpmn2:incoming>
</bpmn2:endEvent>
<bpmn2:task id="Task_1" imixs:processid="1000" name="Erfassung">
<bpmn2:extensionElements>
@ -171,7 +175,9 @@ th { font-weight: bold;}
<bpmn2:documentation id="Documentation_3"><![CDATA[<textblock><itemvalue>$workflowgroup</itemvalue> - <itemvalue>$workflowstatus</itemvalue></textblock>]]></bpmn2:documentation>
<bpmn2:incoming>SequenceFlow_14</bpmn2:incoming>
<bpmn2:incoming>SequenceFlow_4</bpmn2:incoming>
<bpmn2:incoming>SequenceFlow_1</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_2</bpmn2:outgoing>
<bpmn2:outgoing>SequenceFlow_3</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_6" imixs:activityid="10" name="Speichern">
<bpmn2:extensionElements>
@ -305,7 +311,13 @@ th { font-weight: bold;}
<imixs-form>
<imixs-form-section columns="2">
<item name="dbtr.number" type="text" required="true" label="Debitor:" />
<item name="name" type="textarea" label="Bemerkung:" />
<item name="dbtr.mail" type="text" required="true" label="E-Mail:" />
</imixs-form-section>
<imixs-form-section columns="1">
<item name="description" type="textarea" label="Bemerkung:" />
</imixs-form-section>
<imixs-form-section label="Offene Posten" path="alexander/section_opliste_mahnlauf" readonly="false" />
@ -313,7 +325,7 @@ th { font-weight: bold;}
</imixs-form>]]></bpmn2:documentation>
<bpmn2:dataState id="DataState_1"/>
</bpmn2:dataObject>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_1" imixs:activityid="20" name="Senden">
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_1" imixs:activityid="20" name="Mahnen">
<bpmn2:extensionElements>
<imixs:item name="keylogtimeformat" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
@ -357,7 +369,8 @@ th { font-weight: bold;}
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="txtactivityresult" type="xs:string">
<imixs:value><![CDATA[<item name="action">home</item>]]></imixs:value>
<imixs:value><![CDATA[<item name="action">home</item>
<item name="process">Mahnwesen</item>]]></imixs:value>
</imixs:item>
<imixs:item name="txtname" type="xs:string">
<imixs:value><![CDATA[Speichern]]></imixs:value>
@ -366,19 +379,26 @@ th { font-weight: bold;}
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="rtfresultlog" type="xs:string">
<imixs:value><![CDATA[Zahlungseingang abgeschlossen und Rechnungen abgeglichen.]]></imixs:value>
<imixs:value><![CDATA[Mahnung erstellt und versendet]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>false</imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_1"><![CDATA[Zahlungseingang abschließen und Rechnungen abgleichen]]></bpmn2:documentation>
<bpmn2:documentation id="Documentation_1"><![CDATA[Mahnstufe hochsetzen und E-Mail an Debitor versenden]]></bpmn2:documentation>
<bpmn2:incoming>SequenceFlow_2</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_7</bpmn2:outgoing>
<bpmn2:outputSet id="OutputSet_2" name="Output Set 2"/>
<bpmn2:dataOutput id="DataOutput_1" name="Signal_2_Output"/>
<bpmn2:dataOutputAssociation id="DataOutputAssociation_1">
<bpmn2:sourceRef>DataOutput_1</bpmn2:sourceRef>
</bpmn2:dataOutputAssociation>
<bpmn2:outputSet id="OutputSet_2" name="Output Set 2">
<bpmn2:dataOutputRefs>DataOutput_1</bpmn2:dataOutputRefs>
</bpmn2:outputSet>
<bpmn2:signalEventDefinition id="SignalEventDefinition_2" signalRef="Signal_3"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="SequenceFlow_2" sourceRef="Task_1" targetRef="IntermediateCatchEvent_1"/>
<bpmn2:exclusiveGateway id="ExclusiveGateway_1" gatewayDirection="Diverging">
<bpmn2:exclusiveGateway id="ExclusiveGateway_1" gatewayDirection="Diverging" default="SequenceFlow_9">
<bpmn2:incoming>SequenceFlow_7</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_8</bpmn2:outgoing>
<bpmn2:outgoing>SequenceFlow_9</bpmn2:outgoing>
@ -490,6 +510,178 @@ th { font-weight: bold;}
<bpmn2:sequenceFlow id="SequenceFlow_11" sourceRef="IntermediateCatchEvent_2" targetRef="ExclusiveGateway_2"/>
<bpmn2:sequenceFlow id="SequenceFlow_12" sourceRef="IntermediateCatchEvent_4" targetRef="ExclusiveGateway_2"/>
<bpmn2:sequenceFlow id="SequenceFlow_15" sourceRef="ExclusiveGateway_2" targetRef="Task_2"/>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_5" imixs:activityid="100" name="[add ref]">
<bpmn2:extensionElements>
<imixs:item name="keylogtimeformat" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keyarchive" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="txtmailsubject" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="keyaccessmode" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyscheduledactivity" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="rtfmailbody" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="keyversion" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyaddwritefields" type="xs:string"/>
<imixs:item name="numnextactivityid" type="xs:int">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyfollowup" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keypublicresult" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keylogdateformat" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string"/>
<imixs:item name="numnextid" type="xs:int">
<imixs:value><![CDATA[5000]]></imixs:value>
</imixs:item>
<imixs:item name="txtnextprocesstree" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="txtactivityresult" type="xs:string">
<imixs:value><![CDATA[<item name="process">Mahnwesen</item>]]></imixs:value>
</imixs:item>
<imixs:item name="txtname" type="xs:string">
<imixs:value><![CDATA[Speichern]]></imixs:value>
</imixs:item>
<imixs:item name="keyownershipmode" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="rtfresultlog" type="xs:string">
<imixs:value><![CDATA[Rechnung hinzugefügt]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>false</imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_5"><![CDATA[Zwischenspeichern]]></bpmn2:documentation>
<bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
<bpmn2:signalEventDefinition id="SignalEventDefinition_1"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="SequenceFlow_1" sourceRef="IntermediateCatchEvent_5" targetRef="Task_1"/>
<bpmn2:task id="Task_3" imixs:processid="1800" name="Storniert">
<bpmn2:extensionElements>
<imixs:item name="txtworkflowsummary" type="xs:string">
<imixs:value><![CDATA[<itemvalue format="dd. MM.yyyy">$lasteventdate</itemvalue> - <itemvalue>payment.total</itemvalue> <itemvalue>payment.currency</itemvalue> (<itemvalue>dbtr.number</itemvalue> - <itemvalue>dbtr.name</itemvalue>)]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>true</imixs:value>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string"/>
<imixs:item name="keyaddwritefields" type="xs:string"/>
<imixs:item name="keyaddreadfields" type="xs:string"/>
<imixs:item name="txtimageurl" type="xs:string">
<imixs:value><![CDATA[typcn-mail||||typcn-tick,imixs-success]]></imixs:value>
</imixs:item>
<imixs:item name="txteditorid" type="xs:string">
<imixs:value><![CDATA[form_basic_read]]></imixs:value>
</imixs:item>
<imixs:item name="txttype" type="xs:string">
<imixs:value><![CDATA[workitemarchive]]></imixs:value>
</imixs:item>
<imixs:item name="txtworkflowabstract" type="CDATA">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="namaddreadaccess" type="xs:string">
<imixs:value><![CDATA[{process:?:member}]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_9"><![CDATA[<textblock><itemvalue>$workflowgroup</itemvalue> - <itemvalue>$workflowstatus</itemvalue></textblock>]]></bpmn2:documentation>
<bpmn2:incoming>SequenceFlow_5</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_13</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_7" imixs:activityid="40" name="Stornieren">
<bpmn2:extensionElements>
<imixs:item name="keylogtimeformat" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keyarchive" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="txtmailsubject" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="keyaccessmode" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyscheduledactivity" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="rtfmailbody" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="keyversion" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyaddwritefields" type="xs:string"/>
<imixs:item name="numnextactivityid" type="xs:int">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="keyfollowup" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keypublicresult" type="xs:string">
<imixs:value><![CDATA[1]]></imixs:value>
</imixs:item>
<imixs:item name="keylogdateformat" type="xs:string">
<imixs:value><![CDATA[2]]></imixs:value>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string"/>
<imixs:item name="numnextid" type="xs:int">
<imixs:value><![CDATA[5000]]></imixs:value>
</imixs:item>
<imixs:item name="txtnextprocesstree" type="xs:string">
<imixs:value><![CDATA[]]></imixs:value>
</imixs:item>
<imixs:item name="txtactivityresult" type="xs:string">
<imixs:value><![CDATA[<item name="action">home</item>]]></imixs:value>
</imixs:item>
<imixs:item name="txtname" type="xs:string">
<imixs:value><![CDATA[Speichern]]></imixs:value>
</imixs:item>
<imixs:item name="keyownershipmode" type="xs:string">
<imixs:value><![CDATA[0]]></imixs:value>
</imixs:item>
<imixs:item name="rtfresultlog" type="xs:string">
<imixs:value><![CDATA[Zahlungseingang abgeschlossen und Rechnungen abgeglichen.]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:boolean">
<imixs:value>false</imixs:value>
</imixs:item>
<imixs:item name="txtbusinessrule" type="CDATA">
<imixs:value><![CDATA[var result={};
var refField="txtcomment";
result.isValid=true;
if ( ( workitem.get(refField) == null || ''==workitem.get(refField)[0]) ) {
result.isValid=false;
result.errorMessage='Bitte geben Sie einen Kommentar ein.';
}]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_13"><![CDATA[Zahlungseingang abschließen und Rechnungen abgleichen]]></bpmn2:documentation>
<bpmn2:incoming>SequenceFlow_3</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_5</bpmn2:outgoing>
<bpmn2:outputSet id="OutputSet_1" name="Output Set 2"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="SequenceFlow_3" sourceRef="Task_1" targetRef="IntermediateCatchEvent_7"/>
<bpmn2:sequenceFlow id="SequenceFlow_5" sourceRef="IntermediateCatchEvent_7" targetRef="Task_3"/>
<bpmn2:sequenceFlow id="SequenceFlow_13" sourceRef="Task_3" targetRef="EndEvent_3"/>
<bpmn2:association id="Association_2" sourceRef="DataObject_1" targetRef="Task_1"/>
</bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="Default Process Diagram">
@ -525,15 +717,15 @@ th { font-weight: bold;}
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_Task_2" bpmnElement="Task_2">
<dc:Bounds height="50.0" width="110.0" x="680.0" y="294.0"/>
<dc:Bounds height="50.0" width="110.0" x="762.0" y="294.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_5" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="55.0" x="707.0" y="312.0"/>
<dc:Bounds height="14.0" width="55.0" x="789.0" y="312.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_6" bpmnElement="IntermediateCatchEvent_6">
<dc:Bounds height="36.0" width="36.0" x="717.0" y="392.0"/>
<dc:Bounds height="36.0" width="36.0" x="808.0" y="216.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_10" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="56.0" x="707.0" y="428.0"/>
<dc:Bounds height="14.0" width="56.0" x="798.0" y="252.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_3" bpmnElement="IntermediateCatchEvent_3">
@ -551,39 +743,39 @@ th { font-weight: bold;}
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_1" bpmnElement="IntermediateCatchEvent_1">
<dc:Bounds height="36.0" width="36.0" x="430.0" y="301.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_2" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="43.0" x="427.0" y="337.0"/>
<dc:Bounds height="14.0" width="45.0" x="426.0" y="337.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_ExclusiveGateway_1" bpmnElement="ExclusiveGateway_1" isMarkerVisible="true">
<dc:Bounds height="50.0" width="50.0" x="480.0" y="294.0"/>
<dc:Bounds height="50.0" width="50.0" x="562.0" y="294.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_18" labelStyle="BPMNLabelStyle_1"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_2" bpmnElement="IntermediateCatchEvent_2">
<dc:Bounds height="36.0" width="36.0" x="550.0" y="237.0"/>
<dc:Bounds height="36.0" width="36.0" x="632.0" y="237.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_19" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="49.0" x="544.0" y="273.0"/>
<dc:Bounds height="14.0" width="49.0" x="626.0" y="273.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_4" bpmnElement="IntermediateCatchEvent_4">
<dc:Bounds height="36.0" width="36.0" x="550.0" y="350.0"/>
<dc:Bounds height="36.0" width="36.0" x="632.0" y="350.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_20" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="14.0" width="49.0" x="544.0" y="386.0"/>
<dc:Bounds height="14.0" width="49.0" x="626.0" y="386.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_ExclusiveGateway_2" bpmnElement="ExclusiveGateway_2" isMarkerVisible="true">
<dc:Bounds height="50.0" width="50.0" x="605.0" y="294.0"/>
<dc:Bounds height="50.0" width="50.0" x="687.0" y="294.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_30" labelStyle="BPMNLabelStyle_1"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_Message_1" bpmnElement="Message_2">
<dc:Bounds height="20.0" width="30.0" x="119.0" y="59.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_35">
<dc:Bounds height="14.0" width="78.0" x="95.0" y="79.0"/>
<dc:Bounds height="14.0" width="70.0" x="99.0" y="79.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_Message_2" bpmnElement="Message_4">
<dc:Bounds height="20.0" width="30.0" x="230.0" y="59.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_39">
<dc:Bounds height="28.0" width="80.0" x="205.0" y="79.0"/>
<dc:Bounds height="28.0" width="69.0" x="211.0" y="79.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_Message_4" bpmnElement="Message_7">
@ -592,16 +784,35 @@ th { font-weight: bold;}
<dc:Bounds height="28.0" width="69.0" x="325.0" y="79.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_5" bpmnElement="IntermediateCatchEvent_5">
<dc:Bounds height="36.0" width="36.0" x="240.0" y="392.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_3">
<dc:Bounds height="14.0" width="44.0" x="236.0" y="428.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_Task_3" bpmnElement="Task_3">
<dc:Bounds height="50.0" width="110.0" x="935.0" y="413.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_7">
<dc:Bounds height="14.0" width="46.0" x="967.0" y="431.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_IntermediateCatchEvent_7" bpmnElement="IntermediateCatchEvent_7">
<dc:Bounds height="36.0" width="36.0" x="619.0" y="440.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_8">
<dc:Bounds height="14.0" width="57.0" x="609.0" y="476.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_10" bpmnElement="SequenceFlow_10" sourceElement="BPMNShape_Task_2" targetElement="BPMNShape_EndEvent_2">
<di:waypoint xsi:type="dc:Point" x="790.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="855.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="872.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="896.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="920.0" y="319.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_26"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_6" bpmnElement="SequenceFlow_6" sourceElement="BPMNShape_IntermediateCatchEvent_6" targetElement="BPMNShape_Task_2">
<di:waypoint xsi:type="dc:Point" x="735.0" y="392.0"/>
<di:waypoint xsi:type="dc:Point" x="735.0" y="368.0"/>
<di:waypoint xsi:type="dc:Point" x="735.0" y="344.0"/>
<di:waypoint xsi:type="dc:Point" x="826.0" y="252.0"/>
<di:waypoint xsi:type="dc:Point" x="826.0" y="273.0"/>
<di:waypoint xsi:type="dc:Point" x="817.0" y="273.0"/>
<di:waypoint xsi:type="dc:Point" x="817.0" y="294.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_14"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_14" bpmnElement="SequenceFlow_14" sourceElement="BPMNShape_IntermediateCatchEvent_3" targetElement="BPMNShape_Task_1">
@ -630,40 +841,64 @@ th { font-weight: bold;}
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_7" bpmnElement="SequenceFlow_7" sourceElement="BPMNShape_IntermediateCatchEvent_1" targetElement="BPMNShape_ExclusiveGateway_1">
<di:waypoint xsi:type="dc:Point" x="466.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="473.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="480.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="514.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="562.0" y="319.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_23"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_8" bpmnElement="SequenceFlow_8" sourceElement="BPMNShape_ExclusiveGateway_1" targetElement="BPMNShape_IntermediateCatchEvent_2">
<di:waypoint xsi:type="dc:Point" x="505.0" y="294.0"/>
<di:waypoint xsi:type="dc:Point" x="505.0" y="255.0"/>
<di:waypoint xsi:type="dc:Point" x="550.0" y="255.0"/>
<di:waypoint xsi:type="dc:Point" x="587.0" y="294.0"/>
<di:waypoint xsi:type="dc:Point" x="587.0" y="255.0"/>
<di:waypoint xsi:type="dc:Point" x="632.0" y="255.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_25"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_9" bpmnElement="SequenceFlow_9" sourceElement="BPMNShape_ExclusiveGateway_1" targetElement="BPMNShape_IntermediateCatchEvent_4">
<di:waypoint xsi:type="dc:Point" x="505.0" y="344.0"/>
<di:waypoint xsi:type="dc:Point" x="505.0" y="368.0"/>
<di:waypoint xsi:type="dc:Point" x="550.0" y="368.0"/>
<di:waypoint xsi:type="dc:Point" x="587.0" y="344.0"/>
<di:waypoint xsi:type="dc:Point" x="587.0" y="368.0"/>
<di:waypoint xsi:type="dc:Point" x="632.0" y="368.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_28"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_11" bpmnElement="SequenceFlow_11" sourceElement="BPMNShape_IntermediateCatchEvent_2" targetElement="BPMNShape_ExclusiveGateway_2">
<di:waypoint xsi:type="dc:Point" x="586.0" y="255.0"/>
<di:waypoint xsi:type="dc:Point" x="630.0" y="255.0"/>
<di:waypoint xsi:type="dc:Point" x="630.0" y="294.0"/>
<di:waypoint xsi:type="dc:Point" x="668.0" y="255.0"/>
<di:waypoint xsi:type="dc:Point" x="712.0" y="255.0"/>
<di:waypoint xsi:type="dc:Point" x="712.0" y="294.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_32"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_12" bpmnElement="SequenceFlow_12" sourceElement="BPMNShape_IntermediateCatchEvent_4" targetElement="BPMNShape_ExclusiveGateway_2">
<di:waypoint xsi:type="dc:Point" x="586.0" y="368.0"/>
<di:waypoint xsi:type="dc:Point" x="630.0" y="368.0"/>
<di:waypoint xsi:type="dc:Point" x="630.0" y="344.0"/>
<di:waypoint xsi:type="dc:Point" x="668.0" y="368.0"/>
<di:waypoint xsi:type="dc:Point" x="712.0" y="368.0"/>
<di:waypoint xsi:type="dc:Point" x="712.0" y="344.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_33"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_15" bpmnElement="SequenceFlow_15" sourceElement="BPMNShape_ExclusiveGateway_2" targetElement="BPMNShape_Task_2">
<di:waypoint xsi:type="dc:Point" x="655.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="667.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="680.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="737.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="749.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="762.0" y="319.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_34"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_1" bpmnElement="SequenceFlow_1" sourceElement="BPMNShape_IntermediateCatchEvent_5" targetElement="BPMNShape_Task_1">
<di:waypoint xsi:type="dc:Point" x="258.0" y="392.0"/>
<di:waypoint xsi:type="dc:Point" x="258.0" y="327.0"/>
<di:waypoint xsi:type="dc:Point" x="290.0" y="327.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_6"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_3" bpmnElement="SequenceFlow_3" sourceElement="BPMNShape_Task_1" targetElement="BPMNShape_IntermediateCatchEvent_7">
<di:waypoint xsi:type="dc:Point" x="363.0" y="344.0"/>
<di:waypoint xsi:type="dc:Point" x="363.0" y="458.0"/>
<di:waypoint xsi:type="dc:Point" x="619.0" y="458.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_9"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_5" bpmnElement="SequenceFlow_5" sourceElement="BPMNShape_IntermediateCatchEvent_7" targetElement="BPMNShape_Task_3">
<di:waypoint xsi:type="dc:Point" x="637.0" y="440.0"/>
<di:waypoint xsi:type="dc:Point" x="637.0" y="438.0"/>
<di:waypoint xsi:type="dc:Point" x="935.0" y="438.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_12"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_13" bpmnElement="SequenceFlow_13" sourceElement="BPMNShape_Task_3" targetElement="BPMNShape_EndEvent_2">
<di:waypoint xsi:type="dc:Point" x="990.0" y="413.0"/>
<di:waypoint xsi:type="dc:Point" x="990.0" y="319.0"/>
<di:waypoint xsi:type="dc:Point" x="956.0" y="319.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_15"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
<bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1">
<dc:Font name="arial" size="9.0"/>

File diff suppressed because it is too large Load diff