diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 49a0f0a..9afcdf9 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,6 +1,14 @@ # Versionen -### 1.2.14 (Development) + +### 1.2.15 (Development) + + - Fix Cargosoft DATEV Import - Korektur des Rechnungsdatums / Jahr + - Neuer Rest Service für Korrektur von Cargsoft Ausgangsrechnungen + + http://localhost:8080/api/cargosoft/fix/5 + +### 1.2.14 - Internationalisierung diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/api/CargosoftMigrationRestService.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/api/CargosoftMigrationRestService.java new file mode 100644 index 0000000..61af7a5 --- /dev/null +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/api/CargosoftMigrationRestService.java @@ -0,0 +1,152 @@ +/******************************************************************************* + * 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.api; + +import java.io.Serializable; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.logging.Logger; + +import javax.ejb.Stateless; +import javax.inject.Inject; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +import org.imixs.workflow.ItemCollection; +import org.imixs.workflow.engine.DocumentService; +import org.imixs.workflow.exceptions.QueryException; + +/** + ** Dieser Service korrigiert falsch importierte Cargosoft daten. + * Ausgangsrechnungen die ein falsches Jahr haben. + * + * @author rsoika + * @version 1.1 + */ +@Stateless +@Produces({ MediaType.TEXT_HTML, MediaType.APPLICATION_XHTML_XML, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, + MediaType.TEXT_XML }) +@Path("/cargosoft") +public class CargosoftMigrationRestService implements Serializable { + + private static final long serialVersionUID = 1L; + + @Inject + DocumentService documentService; + + private static Logger logger = Logger.getLogger(CargosoftMigrationRestService.class.getName()); + + public CargosoftMigrationRestService() { + super(); + } + + /** + * This method loads taxonomy data for a workflow group within a given process + * and builds a ChartJS data structure in JSON format + * + * @param workflowgroup + * @param task + * @return + * @throws QueryException + */ + @GET + @Path("/test") + @Produces({ MediaType.TEXT_PLAIN }) + public String testeFehlerhafteCargosoftDaten() throws QueryException { + + String log; + + String query = "($modelversion:rechnungsausgang-de-1.0)\n" + // + "AND $created:[20240101 TO 20240501]\n" + // + "AND invoice.date:[20230101 TO 20230501]"; + + logger.info("query=" + query); + log = "Query\n" + query; + List result = documentService.find(query, 100, 0); + + log = log + "\n\nCount=" + result.size(); + + return log; + } + + /** + * This method loads taxonomy data for a workflow group within a given process + * and builds a ChartJS data structure in JSON format + * + * @param workflowgroup + * @param task + * @return + * @throws QueryException + */ + @GET + @Path("/fix/{count}") + @Produces({ MediaType.TEXT_PLAIN }) + public String fixFehlerhafteCargosoftDaten(@PathParam("count") int count) throws QueryException { + + String log; + + String query = "($modelversion:rechnungsausgang-de-1.0)\n" + // + "AND $created:[20240101 TO 20240501]\n" + // + "AND invoice.date:[20230101 TO 20230501]"; + + logger.info("query=" + query); + log = "Query\n\n" + query; + + log = log + "\n\nMax Count=" + count; + List result = documentService.find(query, count, 0); + + log = log + "\n\nSelection Count=" + result.size(); + + log = log + "\n\nFixes\n\n"; + + for (ItemCollection doc : result) { + + Date invoiceDate = doc.getItemValueDate("invoice.date"); + // Convert to Calendar + Calendar calendar = Calendar.getInstance(); + calendar.setTime(invoiceDate); + // Add one year + calendar.add(Calendar.YEAR, 1); + // Convert back to Date + doc.setItemValue("invoice.date", calendar.getTime()); + + documentService.save(doc); + log = log + doc.getUniqueID() + "\n"; + + // break! + } + + log = log + "\n\n=== Completed! ===\n\n"; + return log; + } + +} diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/DatevCargosoftImportAdapter.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/DatevCargosoftImportAdapter.java index 95baee0..f48a487 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/DatevCargosoftImportAdapter.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/datev/DatevCargosoftImportAdapter.java @@ -50,6 +50,43 @@ import com.alexanderlogistics.KreditorDebitorService; * ausgelesen, welche Regular Expressions enthalten können. Gibt es einen match, * wird der Space der Rechnung zugeordnet. * + * Changes 2.Feb. 2024 + * ===================== + * + * Es wurde festgestellt (und von Cargosoft bestätigt), dass eine DATEV Datei + * aus Cargosoft (Ausgangsrechnungen) falsche Belegdaten bezüglch des + * Belegdatums bereitstellt. + * + * Es können in einer Datei Rechnungen aus unterschiedlichen Buchungsperioden + * enthalten sein. So können in der Periode Dezember auch Belege aus Januar + * enthalten sein. In diesem Fall wird bisher davon ausgegangen dass diese zum + * angegebenen Wirtschafsjahr gehören. Das ist aber bei Cargosoft nicht der + * Fall. Vielmehr müssen die Belegdaten für das Folgejahr angelegt weden. + * + * Beispiel: + * + * Wirtschafts Jahr = 20230101 + * + * Buchunsbeginn = 20231201 + * + * Buchungsende = 20231231 + * + * Als Belegdatum wird nun der 1601 angegeben. Da der Beleg-Monat vor dem + * angegebenen Buchungszeitraum liegt (Monat-Beleg < Monat-Stapel) muss künftig + * das Beleg Jahr um 1 erhöht werden. Diese Regel gilt nicht wenn in der Datei + * Belege liegen deren Beleg-Monat größer als der Stapel-Monat sind. Also in + * einer Datei für August liegen Beleg-Monate aus September. Dann bleibt das + * Beleg-Jahr wie bisher. + * + * Der Fall tritt scheinbar also nur im Januar mit Belegstapeln aus Dezember des + * Vorjahres auf . + * + * Als Lösung wird daher hier die Kopfzeile nochnmal ausgelesen und der Monat + * aus dem Buchungstapel beginn genommen (z.b. 12). Liegt nun der Monat aus dem + * Belegdatum vor diesem Datum (z.b. 01) wir das Jahr um 1 erhöht. Das + * Wirtschaftsjahr wird ignoriert. + * + * * @version 1.0 * @author rsoika */ @@ -128,8 +165,7 @@ public class DatevCargosoftImportAdapter implements SignalAdapter { SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyyMMdd"); // load spaces Pos Expressions - Map> spacePosMappings = loadSpacePosMappings(); - + Map> spacePosMappings = loadSpacePosMappings(); ItemCollection invoiceWorkitem = null; List splitBuchungen = new ArrayList(); @@ -141,8 +177,20 @@ public class DatevCargosoftImportAdapter implements SignalAdapter { try { BufferedReader in = new BufferedReader(new InputStreamReader(imputStream, ENCODING)); - // skip header - in.readLine(); + // Wir lesen hier nochmal das Datum des Buchunsstpels aus und berechnen den + // Monat des Buchungsstapels. + // dieser Monat wird benötigt um ggf. das Buchungsjahr zu ändern (Das ist eine + // Besonderheit von cargosoft) + String header1; + header1 = in.readLine(); + String[] header1List = header1.split(";(?=([^\"]*\"[^\"]*\")*[^\"]*$)", 99); + workitem.setItemValue("datev.Datum-von", DatevImportAdapter.csvVal(header1List[14])); + workitem.setItemValue("datev.Datum-bis", DatevImportAdapter.csvVal(header1List[15])); + // Monat des Buchungsstapels berechnen + String stapelDatumBeginn = workitem.getItemValueString("datev.Datum-von"); + String stapelMonat = stapelDatumBeginn.substring(4, 6); + + // skip second header line in.readLine(); // read content.... @@ -156,16 +204,16 @@ public class DatevCargosoftImportAdapter implements SignalAdapter { } // alle werte parsen - String[] header1List = dataLine.split(";(?=([^\"]*\"[^\"]*\")*[^\"]*$)", 99); - if (header1List.length < 6) { + String[] dataList = dataLine.split(";(?=([^\"]*\"[^\"]*\")*[^\"]*$)", 99); + if (dataList.length < 6) { throw new PluginException(DatevCargosoftImportAdapter.class.getName(), DatevImportAdapter.DATEV_IMPORT_ERROR, "Invalid data in line " + line); } - String belegNummer = DatevImportAdapter.csvVal(header1List[10]); - String gegenKonto = DatevImportAdapter.csvVal(header1List[7]); - String text = DatevImportAdapter.csvVal(header1List[13]); - String buchungsTag = DatevImportAdapter.csvVal(header1List[9]); + String belegNummer = DatevImportAdapter.csvVal(dataList[10]); + String gegenKonto = DatevImportAdapter.csvVal(dataList[7]); + String text = DatevImportAdapter.csvVal(dataList[13]); + String buchungsTag = DatevImportAdapter.csvVal(dataList[9]); // cargosoft laesst gerne die führende 0 weg.... if (buchungsTag.length() == 3) { buchungsTag = "0" + buchungsTag; @@ -173,26 +221,31 @@ public class DatevCargosoftImportAdapter implements SignalAdapter { // berechne Buchungsdatum DDMM String tag = buchungsTag.substring(0, 2); String monat = buchungsTag.substring(2, 4); - String jahr = wjBeginn.substring(0, 4); - // compute next year if start of WJ is not January - if (Integer.parseInt(wjBeginnMonat) > Integer.parseInt(monat)) { - jahr = Integer.parseInt(jahr + 1) + ""; + String jahr = stapelDatumBeginn.substring(0, 4); + + // Cargosoft Spezial Lösung. + // Liegt der Beleg-Monat vor dem stapelMonat (z.b. Rechnung aus Januar in einer + // Dezember Datei), dann erhöhen wir das Beleg-datum-Jahr. Hier wird also nicht + // wie normalerweise das Wirtschafsjahr betrchtet. + if (Integer.parseInt(stapelMonat) > Integer.parseInt(monat)) { + int _year = Integer.parseInt(jahr) + 1; + jahr = _year + ""; } Date dateBuchung = dateFormatter.parse(jahr + monat + tag); // Fälligkeit Date dueDate = new Date(); try { - dueDate=dateFormatter.parse(DatevImportAdapter.csvVal(header1List[23])); + dueDate = dateFormatter.parse(DatevImportAdapter.csvVal(dataList[23])); } catch (Exception e) { dueDate = new Date(); } - String paymentTerm = DatevImportAdapter.csvVal(header1List[31]); - String waehrung = DatevImportAdapter.csvVal(header1List[2]); + String paymentTerm = DatevImportAdapter.csvVal(dataList[31]); + String waehrung = DatevImportAdapter.csvVal(dataList[2]); // kurse - double kurs = parseBetrag(DatevImportAdapter.csvVal(header1List[3])); - double basisumsatz = parseBetrag(DatevImportAdapter.csvVal(header1List[4])); + double kurs = parseBetrag(DatevImportAdapter.csvVal(dataList[3])); + double basisumsatz = parseBetrag(DatevImportAdapter.csvVal(dataList[4])); // Skip Eingangsrechnungen if (!gegenKonto.startsWith("1")) { @@ -216,12 +269,12 @@ public class DatevCargosoftImportAdapter implements SignalAdapter { // Erzeuge einen Buchungssatz ItemCollection dataItemCol = new ItemCollection(); dataItemCol.setItemValue("datev.text", text); - dataItemCol.setItemValue("datev.umsatz", parseBetrag(DatevImportAdapter.csvVal(header1List[0]))); - dataItemCol.setItemValue("datev.shzeichen", DatevImportAdapter.csvVal(header1List[1])); + dataItemCol.setItemValue("datev.umsatz", parseBetrag(DatevImportAdapter.csvVal(dataList[0]))); + dataItemCol.setItemValue("datev.shzeichen", DatevImportAdapter.csvVal(dataList[1])); dataItemCol.setItemValue("datev.wkz", waehrung); - dataItemCol.setItemValue("datev.kurs", parseBetrag(DatevImportAdapter.csvVal(header1List[3]))); - dataItemCol.setItemValue("datev.basisumsatz", parseBetrag(DatevImportAdapter.csvVal(header1List[4]))); - dataItemCol.setItemValue("datev.konto", DatevImportAdapter.csvVal(header1List[6])); + dataItemCol.setItemValue("datev.kurs", parseBetrag(DatevImportAdapter.csvVal(dataList[3]))); + dataItemCol.setItemValue("datev.basisumsatz", parseBetrag(DatevImportAdapter.csvVal(dataList[4]))); + dataItemCol.setItemValue("datev.konto", DatevImportAdapter.csvVal(dataList[6])); // Haben wir schon eine Invoice Workitem angelegt? if (invoiceWorkitem == null) { @@ -246,7 +299,7 @@ public class DatevCargosoftImportAdapter implements SignalAdapter { logger.info("...close workitem...."); // nein - also invoice schließen - closeInvoiceWorkitem(invoiceWorkitem, splitBuchungen,spacePosMappings); + closeInvoiceWorkitem(invoiceWorkitem, splitBuchungen, spacePosMappings); invoiceWorkitem = null; // neue Splitbuchungstabelle anlegen splitBuchungen = new ArrayList(); @@ -264,7 +317,7 @@ public class DatevCargosoftImportAdapter implements SignalAdapter { } } // wile end - closeInvoiceWorkitem(invoiceWorkitem, splitBuchungen,spacePosMappings); + closeInvoiceWorkitem(invoiceWorkitem, splitBuchungen, spacePosMappings); } catch (IOException | ParseException e) { throw new PluginException(DatevCargosoftImportAdapter.class.getName(), @@ -296,19 +349,19 @@ public class DatevCargosoftImportAdapter implements SignalAdapter { * * @return List of list of expressions */ - private Map> loadSpacePosMappings() { - Map> result =new HashMap<>(); + private Map> loadSpacePosMappings() { + Map> result = new HashMap<>(); // als erstes lesen wir die pos.mappings aus den Spaces ein, auf die dann eine // Rechnung emapped werden kann. List spaces_subs = teamService.getSpaces(); - for (ItemCollection stub: spaces_subs) { + for (ItemCollection stub : spaces_subs) { // load full workitem ItemCollection space = documentService.load(stub.getUniqueID()); - if (space!=null) { - result.put(space.getUniqueID(),space.getItemValueList("pos.mapping", String.class)); + if (space != null) { + result.put(space.getUniqueID(), space.getItemValueList("pos.mapping", String.class)); } } - + return result; } @@ -407,7 +460,7 @@ public class DatevCargosoftImportAdapter implements SignalAdapter { } } - total=InvoiceUtil.round(total); + total = InvoiceUtil.round(total); invoiceWorkitem.setItemValue("invoice.total", total); invoiceWorkitem.setItemValue("invoice.saldo", total); // implode die Splitbuchungen @@ -433,17 +486,17 @@ public class DatevCargosoftImportAdapter implements SignalAdapter { // dazu kucken wir in alle spaces den config wert 'pos.mapping' String text = invoiceWorkitem.getItemValueString("invoice.text"); if (!text.isEmpty()) { - boolean found=false; - for (Map.Entry > entry : spacePosMappings.entrySet()) { - List expressionsList=entry.getValue(); + boolean found = false; + for (Map.Entry> entry : spacePosMappings.entrySet()) { + List expressionsList = entry.getValue(); for (String expr : expressionsList) { - + Pattern p = Pattern.compile(expr); Matcher m = p.matcher(text); if (m.find()) { // we have a match invoiceWorkitem.setItemValue("space.ref", entry.getKey()); - found=true; + found = true; break; } } @@ -457,7 +510,6 @@ public class DatevCargosoftImportAdapter implements SignalAdapter { workflowService.processWorkItem(invoiceWorkitem); } - /** * Convert the List of ItemCollections back into a List of Map elements diff --git a/workflow/rechnungseingang-pl-1.0.1.bpmn b/workflow/rechnungseingang-pl-1.0.1.bpmn new file mode 100644 index 0000000..95a50cc --- /dev/null +++ b/workflow/rechnungseingang-pl-1.0.1.bpmn @@ -0,0 +1,6220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Task_2 + ExclusiveGateway_1 + StartEvent_1 + IntermediateCatchEvent_6 + IntermediateCatchEvent_27 + EventBasedGateway_1 + Task_10 + EndEvent_5 + IntermediateCatchEvent_40 + IntermediateThrowEvent_4 + IntermediateCatchEvent_49 + IntermediateCatchEvent_19 + IntermediateThrowEvent_3 + IntermediateCatchEvent_31 + IntermediateCatchEvent_13 + Task_14 + EventBasedGateway_3 + IntermediateCatchEvent_30 + Task_13 + EndEvent_4 + IntermediateCatchEvent_56 + IntermediateThrowEvent_9 + IntermediateCatchEvent_60 + IntermediateCatchEvent_3 + IntermediateCatchEvent_5000-20 + + DataObject_2 + DataObject_5 + TextAnnotation_4 + + + EndEvent_1 + IntermediateCatchEvent_12 + Task_4 + IntermediateCatchEvent_25 + Task_5005 + IntermediateCatchEvent_5005-10 + IntermediateCatchEvent_55 + IntermediateCatchEvent_36 + IntermediateCatchEvent_32 + IntermediateCatchEvent_21 + EventBasedGateway_2 + IntermediateCatchEvent_5005-20 + ExclusiveGateway_6 + IntermediateCatchEvent_2 + IntermediateCatchEvent_26 + IntermediateThrowEvent_2 + Task_12 + IntermediateCatchEvent_28 + ExclusiveGateway_10 + + ExclusiveGateway_3 + DataObject_1 + TextAnnotation_1 + TextAnnotation_3 + event_pAR6FQ + event_FPc1AA + + + EndEvent_3 + Task_5000 + IntermediateCatchEvent_5000-10 + IntermediateCatchEvent_33 + IntermediateCatchEvent_38 + IntermediateCatchEvent_15 + EndEvent_6 + EventBasedGateway_4 + Task_16 + IntermediateCatchEvent_37 + IntermediateCatchEvent_24 + Task_8 + IntermediateCatchEvent_16 + Task_9 + IntermediateCatchEvent_7 + ExclusiveGateway_2 + IntermediateCatchEvent_29 + IntermediateCatchEvent_39 + IntermediateCatchEvent_20 + Task_3 + IntermediateCatchEvent_17 + ExclusiveGateway_5 + IntermediateCatchEvent_35 + IntermediateThrowEvent_1 + IntermediateCatchEvent_58 + IntermediateCatchEvent_22 + Task_5 + Task_15 + IntermediateCatchEvent_48 + Task_11 + IntermediateCatchEvent_8 + IntermediateCatchEvent_4 + IntermediateCatchEvent_14 + IntermediateCatchEvent_57 + Task_7 + IntermediateCatchEvent_18 + EndEvent_2 + IntermediateCatchEvent_5 + Task_6 + IntermediateCatchEvent_23 + IntermediateCatchEvent_46 + Task_19 + IntermediateCatchEvent_63 + IntermediateCatchEvent_34 + IntermediateCatchEvent_59 + IntermediateCatchEvent_41 + IntermediateCatchEvent_65 + IntermediateCatchEvent_66 + + TextAnnotation_5 + DataObject_3 + TextAnnotation_2 + IntermediateCatchEvent_62 + + + + + + + + + txtlastcomment +numsequencenumber_sub]]> + + + + + + + + + _imgnumsequencenumber: cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> + + + true + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_31 + SequenceFlow_1 + SequenceFlow_123 + SequenceFlow_32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + false + + + + SequenceFlow_31 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home + + stop + false + + + start + false + +]]> + + + + + + + + + space.name]]> + + + false + + + + + + + SequenceFlow_46 + sequenceFlow_acNhxg + + + SequenceFlow_0 + SequenceFlow_21 + SequenceFlow_125 + SequenceFlow_33 + + + + + + + SequenceFlow_0 + + + + + + + + + + + + txtlastcomment]]> + + + + + + + + + _imgnumsequencenumber: cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> + + + true + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus +Zollkurse +]]> + SequenceFlow_38 + SequenceFlow_83 + SequenceFlow_104 + SequenceFlow_134 + SequenceFlow_37 + sequenceFlow_ZFDfeA + + + + + + + + + + + + + + _subject]]> + + + + + + + + + _amount (Brutto € _amount_brutto) +_description]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home +space.name + +cargosoft-export-1.0 +1000 +100 +(?!txtworkflowhistory)(^[a-zA-Z]|^_) + + + stop + false +]]> + + + + + + + + + + + + false + + + 0 && (parseFloat(a)!=parseFloat(b)) ) { + result.isValid=false; + result.errorMessage="Der Rechnungsbetrag " + a+ " stimmt nicht mit dem Positionsbetrag " + b + " überein."; + }]]> + + + + SequenceFlow_8 + SequenceFlow_51 + + + DataOutput_1 + + + DataOutput_1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false]]> + + + + + + + + + + + + false + + + + SequenceFlow_38 + + + + + + SequenceFlow_37 + SequenceFlow_8 + SequenceFlow_54 + + + + + + + + + + + + txtlastcomment]]> + + + + + + + + + cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> + + + true + + + + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_33 + SequenceFlow_95 + SequenceFlow_49 + SequenceFlow_20 + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Controlling +suggest +false + + start + false +]]> + + + + + + + + + + + + false + + + + + SequenceFlow_22 + SequenceFlow_77 + + + + + + + + txtlastcomment +numsequencenumber_sub]]> + + + + + + + + + _imgnumsequencenumber: cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> + + + true + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_56 + SequenceFlow_15 + SequenceFlow_24 + SequenceFlow_55 + SequenceFlow_50 + SequenceFlow_81 + SequenceFlow_88 + sequenceFlow_W0RBHg + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home +false]]> + + + + + + + + + + + + false + + + + + + + SequenceFlow_29 + SequenceFlow_2 + + + SequenceFlow_32 + SequenceFlow_29 + SequenceFlow_30 + + + + + + + + + + + + _subject]]> + + + + + + + + + _amount (Brutto € _amount_brutto) +_description]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home]]> + + + + + + + + + + + + false + + + + + + + SequenceFlow_30 + SequenceFlow_72 + SequenceFlow_67 + + + + + + + + + + + + + + + + + txtlastcomment +numsequencenumber_sub]]> + + + + + + + + + _imgnumsequencenumber: cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> + + + true + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_25 + SequenceFlow_44 + SequenceFlow_52 + SequenceFlow_58 + SequenceFlow_90 + SequenceFlow_47 + + + SequenceFlow_47 + + + + + + + + + + + + + + + + + + _subject]]> + + + + + + + + + _amount (Brutto € _amount_brutto) +_description]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home]]> + + + + + + + + + + + + false + + + + + + + SequenceFlow_55 + SequenceFlow_12 + + + + + + SequenceFlow_18 + SequenceFlow_1 + SequenceFlow_68 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + + + SequenceFlow_6 + SequenceFlow_18 + + + + SequenceFlow_51 + SequenceFlow_6 + + + + + + + SequenceFlow_126 + + + + + + + + + + + SequenceFlow_12 + SequenceFlow_53 + SequenceFlow_19 + SequenceFlow_25 + + + + + + sepa-export-manual-pl-3.0 +1000 +payment.type ]]> + + + + + + + + + SequenceFlow_19 + SequenceFlow_23 + + + + + + + + + + + + + workitem['payment.type'][0]=="direct_debit" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Invoice Controlling]]> + + + + + + + + + + + + false + + + + SequenceFlow_21 + + + + + + + + SequenceFlow_39 + + + + + + + + + + txtlastcomment]]> + + + + + + + + + numsequencenumber: cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> + + + true + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_39 + SequenceFlow_59 + SequenceFlow_40 + + + SequenceFlow_40 + + + + + + + + + + + + + + + txtlastcomment +numsequencenumber_sub]]> + + + + + + + + + _imgnumsequencenumber: cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> + + + true + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_23 + SequenceFlow_41 + SequenceFlow_14 + sequenceFlow_y2ISGw + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + SequenceFlow_14 + SequenceFlow_42 + + + + + + + + + + + + + + + + txtlastcomment +numsequencenumber_sub]]> + + + + + + + + + _imgnumsequencenumber: cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> + + + true + + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_42 + SequenceFlow_3 + SequenceFlow_43 + + + + + + + + + + + _subject]]> + + + + + + + + + _amount (Brutto € _amount_brutto) +_description]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home]]> + + + + + + + + + + + + false + + + + SequenceFlow_43 + SequenceFlow_5 + SequenceFlow_44 + + + + + + + + + + + + + + + + + payment.type ]]> + + + + sequenceFlow_y2ISGw + sequenceFlow_W0RBHg + + + + + + + + + + + + _subject]]> + + + + + + + + + _amount (Brutto € _amount_brutto) +_description]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home]]> + + + + + + + + + + + + false + + + + + + + + + + + + + + + SequenceFlow_50 + SequenceFlow_53 + + + + + + + + + + + + + + + + cdtr.name invoice.number]]> + + + + + + + + + cdtr.name +Rechnungsnummer: invoice.number +Betrag: invoice.total invoice.currency + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + home +false]]> + + + + + + + + + + + + false + + + + + + + + + + SequenceFlow_54 + SequenceFlow_7 + + + + + + + SequenceFlow_63 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + txtlastcomment +numsequencenumber_sub]]> + + + + + + + + + numsequencenumber: cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> + + + true + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_17 + SequenceFlow_60 + SequenceFlow_9 + + + SequenceFlow_9 + + + + + + + SequenceFlow_17 + + + + + + + + SequenceFlow_20 + SequenceFlow_65 + SequenceFlow_71 + SequenceFlow_22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home +false +Are you sure you want to delete the task? + + stop + false + +cancel]]> + + + + + + + + + + + + false + + + + + + + SequenceFlow_49 + SequenceFlow_76 + SequenceFlow_48 + + + SequenceFlow_48 + + + + + + + + + + + + + + + + txtlastcomment +numsequencenumber_sub]]> + + + + + + + + + _imgnumsequencenumber: cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> + + + true + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_2 + SequenceFlow_78 + SequenceFlow_89 + SequenceFlow_72 + SequenceFlow_86 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + false + + + + SequenceFlow_3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home +false]]> + + + + + + + + + + + + false + + + + SequenceFlow_52 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home +false]]> + + + + + + + + + + + + false + + + + SequenceFlow_60 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home +false]]> + + + + + + + + + + + + false + + + + SequenceFlow_59 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + suggest +false + + gutschriftabgleich-de-1.0 + 5001 + 980 + ]]> + + + + + + + + + + + + false + + + + + + + SequenceFlow_65 + SequenceFlow_69 + + + + + + + + + + + workitem['payment.type'][0]=="credit" + + + + + + + + + txtlastcomment]]> + + + + + + + + + cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> + + + true + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_69 + SequenceFlow_70 + + + + + + SequenceFlow_70 + + + + + + + + + + + + txtlastcomment +numsequencenumber_sub]]> + + + + + + + + + numsequencenumber: cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> + + + true + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_4 + SequenceFlow_34 + SequenceFlow_119 + SequenceFlow_5 + + + + workitem['payment.type'][0]=="no_sepa" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + txtlastcomment]]> + + + + + + + + + _imgnumsequencenumber: cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> + + + true + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_7 + SequenceFlow_62 + SequenceFlow_61 + SequenceFlow_73 + + + + + + + + + + + cdtr.name invoice.number]]> + + + + + + + + + cdtr.name +Rechnungsnummer: invoice.number +Betrag: invoice.total invoice.currency + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + home +false +Wollen Sie den Vorgang wirklich archivieren? +cancel]]> + + + + + + + + + + + + false + + + + + + + + SequenceFlow_61 + SequenceFlow_63 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + false + + + + SequenceFlow_62 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + false + + + + SequenceFlow_56 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + suggest +false + + rechnungseingang-sachrechnung-de-1.0 + 5001 + 980 + ]]> + + + + + + + + + + + + false + + + + + + + SequenceFlow_71 + SequenceFlow_64 + + + + + + + + + txtlastcomment]]> + + + + + + + + + cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> + + + true + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_64 + SequenceFlow_66 + + + SequenceFlow_66 + + + + + + + + + + + + + + + + + + txtlastcomment]]> + + + + + + + + + _imgcdtr.name invoice.number (invoice.currency invoice.total) space.name]]> + + + true + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_74 + SequenceFlow_77 + SequenceFlow_126 + SequenceFlow_46 + SequenceFlow_85 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + false + + + + + SequenceFlow_74 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home +space.name +false]]> + + + + + + + + + + + + false + + + + + + + SequenceFlow_73 + SequenceFlow_75 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + false + + + + SequenceFlow_78 + + + + + + + + + + + txtlastcomment]]> + + + + + + + + + _imgnumsequencenumber: cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> + + + true + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_79 + SequenceFlow_124 + SequenceFlow_57 + sequenceFlow_MV1o2Q + + + + + + + + + + + _subject]]> + + + + + + + + + _amount (Brutto € _amount_brutto) +_description]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home]]> + + + + + + + + + + + + false + + + + SequenceFlow_57 + SequenceFlow_58 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + false + + + + SequenceFlow_79 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home +false +Wollen Sie den Vorgang wirklich löschen?]]> + + + + + + + + + + + + false + + + + + + + SequenceFlow_81 + SequenceFlow_80 + + + SequenceFlow_80 + + + + + + + + + + + SequenceFlow_82 + + + + + + + + + txtlastcomment +numsequencenumber_sub]]> + + + + + + + + + numsequencenumber: cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> + + + true + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_84 + SequenceFlow_87 + SequenceFlow_82 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home +false]]> + + + + + + + + + + + + false + + + + SequenceFlow_84 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home +false]]> + + + + + + + + + + + + false + + + + + + + SequenceFlow_86 + SequenceFlow_87 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home +false]]> + + + + + + + + + + + + false + + + + + + + SequenceFlow_88 + SequenceFlow_89 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home +false +]]> + + + + + + + + + + + + false + + + + + + + SequenceFlow_83 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home +false +Are you sure you want to archive the task? + + stop + false + +cancel]]> + + + + + + + + + + + + false + + + + + + + SequenceFlow_16 + SequenceFlow_13 + + + SequenceFlow_13 + + + + + + + + + + + SequenceFlow_85 + SequenceFlow_76 + SequenceFlow_16 + SequenceFlow_116 + + + + + + + SequenceFlow_90 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + false + + + + SequenceFlow_34 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + false + + + + SequenceFlow_41 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + posteingang-de-1.0 + 100 + 20 + ]]> + + + + + + + + + + + + false + + + SequenceFlow_95 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false +]]> + + + + + + + + + + + + false + + + + + + + SequenceFlow_104 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + stop + false +]]> + + + + + + + + + + + + false + + + + + + + SequenceFlow_116 + SequenceFlow_115 + + + SequenceFlow_115 + + + + + + + + + + + + + + + + + + + SequenceFlow_119 + + + DataOutput_2 + + + DataOutput_2 + + + + + + + + + + + + SequenceFlow_67 + SequenceFlow_4 + SequenceFlow_15 + + + + + + + + + + + + + + + + + + SequenceFlow_123 + + + DataOutput_3 + + + DataOutput_3 + + + + + + + + + + + + + + + + + SequenceFlow_124 + + + DataOutput_4 + + + DataOutput_4 + + + + + + + + + SequenceFlow_125 + + + + + + + + + + + + + txtlastcomment]]> + + + + + + + + + _imgnumsequencenumber: cdtr.name invoice.number (invoice.currency invoice.total) space.name]]> + + + true + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_68 + SequenceFlow_129 + SequenceFlow_133 + sequenceFlow_MxzvVQ + + + + + + + + + + + _subject]]> + + + + + + + + + _amount (Brutto € _amount_brutto) +_description]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home]]> + + + + + + + + + + + + false + + + + + + + sequenceFlow_MxzvVQ + sequenceFlow_MV1o2Q + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + false + + + + SequenceFlow_129 + + + + + + SequenceFlow_75 + SequenceFlow_134 + + sequenceFlow_acNhxg + + + + + + + + + + + + + + + + + SequenceFlow_24 + + + DataOutput_5 + + + DataOutput_5 + + + + + + + + + + + + + + + + + SequenceFlow_133 + + + DataOutput_6 + + + DataOutput_6 + + + + + + + + + + + + Es handelt sich um einen SEPA Lauf. Die Rechnung muss explizit freigegeben werden. + Ändern von IBAN und Fälligkeit ist hier möglich + + + + + + + Datenübergabe an Cargosoft. + + Export erfolgt über eine asynchrone Verarbeitung im Modell 'cargosoft-export' + + + + + + + + + + Liegt eine Logistik Leistung vor, wird ein Fachbereich ausgewählt + + + + + + + Buchhaltung setzt Flag, wenn Mahnung eingetroffen ist + + + + + + + Auslandszahlungen werden gleich ausgeführt + + + + + + + + + + + + + + + sequenceFlow_l7lJjQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false]]> + + + + + + + + + + + + false + + + + sequenceFlow_ZFDfeA + sequenceFlow_l7lJjQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +