From a14762f784ae70f484d674f4f18a25788f5e6f2a Mon Sep 17 00:00:00 2001 From: Ralph Soika Date: Mon, 23 Sep 2024 12:07:21 +0200 Subject: [PATCH] export Steuerbescheide Excel --- .../AGLAnalyticController.java | 18 +- .../AGLAnalyticExcelAdapter.java | 289 ++++ .../office/forms/AnalyticController.java | 2 +- templates/steuerbescheid-liste_template.xlsx | Bin 0 -> 50475 bytes workflow/analyse-steuerbescheid-de-1.0.1.bpmn | 443 ++++++ workflow/steuerbescheid-de-1.0.5.bpmn | 1384 +++++++++++++++++ 6 files changed, 2126 insertions(+), 10 deletions(-) create mode 100644 office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticExcelAdapter.java create mode 100644 templates/steuerbescheid-liste_template.xlsx create mode 100644 workflow/analyse-steuerbescheid-de-1.0.1.bpmn create mode 100644 workflow/steuerbescheid-de-1.0.5.bpmn diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticController.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticController.java index ebea579..b475642 100644 --- a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticController.java +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticController.java @@ -114,7 +114,7 @@ public class AGLAnalyticController implements Serializable { * @return */ private double computeSteuerbescheideEUST() { - logger.info("compute EUST..."); + logger.fine("compute EUST..."); List list = getSteuerbescheide(); double result = 0; @@ -131,7 +131,7 @@ public class AGLAnalyticController implements Serializable { * @return */ private double computeSteuerbescheideZoll() { - logger.info("compute Zoll..."); + logger.fine("compute Zoll..."); List list = getSteuerbescheide(); double result = 0; for (ItemCollection steuerItemCol : list) { @@ -146,7 +146,7 @@ public class AGLAnalyticController implements Serializable { * @return */ private double computeSteuerbescheideSaldo() { - logger.info("compute saldo..."); + logger.fine("compute saldo..."); List list = getSteuerbescheide(); double result = 0; for (ItemCollection steuerItemCol : list) { @@ -162,7 +162,7 @@ public class AGLAnalyticController implements Serializable { * @return */ private double computeSteuerbescheideTotal() { - logger.info("compute total..."); + logger.fine("compute total..."); List list = getSteuerbescheide(); double result = 0; for (ItemCollection steuerItemCol : list) { @@ -177,7 +177,7 @@ public class AGLAnalyticController implements Serializable { * @return */ private double computeSteuerbescheideSaldoDue() { - logger.info("compute EUST..."); + logger.fine("compute EUST..."); List list = getSteuerbescheide(); double result = 0; for (ItemCollection steuerItemCol : list) { @@ -243,7 +243,7 @@ public class AGLAnalyticController implements Serializable { * @return */ private String accumulateSteuerbescheideByWeek() { - logger.info("accumulate steuer by week..."); + logger.fine("accumulate steuer by week..."); List list = getSteuerbescheide(); Map saldoByWeek = new HashMap<>(); @@ -356,7 +356,7 @@ public class AGLAnalyticController implements Serializable { * @return */ private String accumulateSteuerbescheideAbteilungByWeek() { - logger.info("accumulate steuer by Abteilung week..."); + logger.fine("accumulate steuer by Abteilung week..."); String[] colors = { "#36a2eb", @@ -389,7 +389,7 @@ public class AGLAnalyticController implements Serializable { double total = steuerItemCol.getItemValueDouble("invoice.total.net"); Date date = steuerItemCol.getItemValueDate("invoice.date"); - logger.info(".... " + steuerItemCol.getItemValueString("$workflowSummary") + " = " + total); + logger.fine(".... " + steuerItemCol.getItemValueString("$workflowSummary") + " = " + total); // Get the week number and year from the date calendar.setTime(date); int weekNumber = calendar.get(Calendar.WEEK_OF_YEAR); @@ -456,7 +456,7 @@ public class AGLAnalyticController implements Serializable { String key = _abteilung + "~" + yearWeek;// Unique key Import Forest~202405 // Add the total for the week or 0.0 if no data SteuerData steuerData = totalByWeek.getOrDefault(key, new SteuerData()); - logger.info(" " + yearWeek + "=" + steuerData.total); + logger.fine(" " + yearWeek + "=" + steuerData.total); dataBuilderTotals.add(steuerData.total); // Move to the next week startCal.add(Calendar.WEEK_OF_YEAR, 1); diff --git a/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticExcelAdapter.java b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticExcelAdapter.java new file mode 100644 index 0000000..93df5f1 --- /dev/null +++ b/office-alexander-logistics-app/src/main/java/com/alexanderlogistics/AGLAnalyticExcelAdapter.java @@ -0,0 +1,289 @@ +package com.alexanderlogistics; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Logger; + +import org.apache.poi.ss.usermodel.CellCopyPolicy; +import org.apache.poi.ss.usermodel.Row.MissingCellPolicy; +import org.apache.poi.ss.util.CellReference; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.imixs.workflow.FileData; +import org.imixs.workflow.ItemCollection; +import org.imixs.workflow.engine.DocumentService; +import org.imixs.workflow.engine.WorkflowService; +import org.imixs.workflow.exceptions.AdapterException; +import org.imixs.workflow.exceptions.PluginException; +import org.imixs.workflow.exceptions.QueryException; +import org.imixs.workflow.office.config.ConfigService; +import org.imixs.workflow.poi.POIFindReplaceAdapter; +import org.imixs.workflow.util.XMLParser; + +import jakarta.inject.Inject; + +/** + * Der AGLAnalyticExcelAdapter exportiert importiert eine Excel Datei aus einem + * Textblock und fügt die offenen Steuerbescheid Daten ein + * + * Der Adapter wird im Modell wie folgt konfiguriert + * + *
+ * {@code
+        
+            textblock-ref
+            
+            filename
+         
+   }
+ * 
+ * + *

+ * Der Adapter erweitert den POIAdapter somit können Felder aktualisiert werden + * (siehe POIFineReplaceAdapter). + * + *

+ * Der Adapter kopiert die Steuerbescheiddaten in neue Zeilen, welche ab + * Zeilennummer + * 16 eingefügt werden. + *

+ * + * Abschliessend wird die Zelle 'TOTAL' noch aktualisiert. + * + * + * @version 1.0 + * @author rsoika + */ +public class AGLAnalyticExcelAdapter extends POIFindReplaceAdapter { + + private static Logger logger = Logger.getLogger(AGLAnalyticExcelAdapter.class.getName()); + + @Inject + WorkflowService workflowService; + + @Inject + OPListExportService opListExportService; + + @Inject + DocumentService documentService; + + @Inject + ConfigService configService; + + /** + * This method finds or create the Zahlungsavis and adds a reference + * ($workitemref) to the current invoice. + * + * @throws PluginException + */ + @SuppressWarnings("unchecked") + @Override + public ItemCollection execute(ItemCollection document, ItemCollection event) + throws AdapterException, PluginException { + + // ermittle die Hauptwährungen + ItemCollection configItemCollection = configService.loadConfiguration("AGL_CONFIGURATION"); + List currencyList = configItemCollection.getItemValue("currency.out"); + if (currencyList == null || currencyList.size() < 2) { + throw new PluginException(AGLAnalyticExcelAdapter.class.getSimpleName(), OPListExportService.ERROR_CONFIG, + "missing Currency configuration - please check parameters"); + } + + // read the Steuerbescheide options + ItemCollection steuerbescheideConfig = workflowService.evalWorkflowResult(event, "steuerbescheide", document, + false); + if (steuerbescheideConfig == null || !steuerbescheideConfig.hasItem("excel-export")) { + throw new PluginException(AGLAnalyticExcelAdapter.class.getSimpleName(), CONFIG_ERROR, + "missing Steuerbescheide configuration in model event - please check model configuration"); + } + List excelDefList = steuerbescheideConfig.getItemValue("excel-export"); + ItemCollection excelDefCollection = XMLParser.parseItemStructure(excelDefList.get(0)); + + String textblock = excelDefCollection.getItemValueString("textblock"); + String template = excelDefCollection.getItemValueString("template"); + String targetName = excelDefCollection.getItemValueString("target-name"); + + // adapt text.... + targetName = workflowService.adaptText(targetName, document); + + try { + appendExcelTemplate(document, textblock, template, targetName); + insertInvoiceRows(document, targetName); + + logger.info("... loading poi configuration.."); + // Process POI instructions + // read the config + ItemCollection poiConfig = workflowService.evalWorkflowResult(event, "poi-update", document, false); + if (poiConfig == null || !poiConfig.hasItem("findreplace")) { + throw new PluginException(POIFindReplaceAdapter.class.getSimpleName(), CONFIG_ERROR, + "missing poi configuration"); + } + List replaceDevList = poiConfig.getItemValue("findreplace"); + String eval = poiConfig.getItemValueString("eval"); + + logger.info("... update template with normal poi information.."); + this.updateFileData(document.getFileData(targetName), document, replaceDevList, eval); + + } catch (PluginException | IOException | QueryException e) { + throw new PluginException(AGLAnalyticExcelAdapter.class.getSimpleName(), OPListExportService.ERROR_CONFIG, + "failed to update steuerbescheide: " + e.getMessage()); + } + logger.info("... completed!"); + return document; + } + + /** + * This helper method inserts a row for each invoice at row 16 + * into the excel template file + *

+ * The method copies the Row A16 as a reference row + *

+ * The named cell 'TOTAL' should contain the summary formula. It will be + * evaluated at the end. + * + * @throws PluginException + * @throws QueryException + */ + private void insertInvoiceRows(ItemCollection document, String fileName) + throws PluginException, QueryException { + + // load dummy rechnungen + List invoices = loadSteuerbescheide(); + + FileData fileData = document.getFileData(fileName); + + // load XSSFWorkbook + XSSFWorkbook doc = null; + try (InputStream imputStream = new ByteArrayInputStream(fileData.getContent())) { + doc = new XSSFWorkbook(imputStream); + // NOTE: we only take the first sheet ! + XSSFSheet sheet = doc.getSheetAt(0); + CellReference invoiceRefCell = new CellReference("A11"); + XSSFRow referenceRowInvoice = sheet.getRow(invoiceRefCell.getRow()); + int referenceRowPos = 10; + int rowPos = referenceRowPos; + int lastRow = 2999; + logger.finest("Last rownum=" + lastRow); + + // jetzt füge alle Rechnungen an. + int totalRowCount = invoices.size(); + sheet.shiftRows(referenceRowPos, lastRow, totalRowCount, true, true); + for (ItemCollection invoice : invoices) { + logger.fine("......add invoice " + invoice.getUniqueID()); + // now create a new line.. + XSSFRow row = sheet.createRow(rowPos); + row.copyRowFrom(referenceRowInvoice, new CellCopyPolicy()); + // insert values + row.getCell(0) + .setCellValue(invoice.getItemValueDate("$created")); + row.getCell(1, MissingCellPolicy.CREATE_NULL_AS_BLANK) + .setCellValue(invoice.getItemValueString("invoice.number")); + row.getCell(2, MissingCellPolicy.CREATE_NULL_AS_BLANK) + .setCellValue(invoice.getItemValueDate("invoice.date")); + row.getCell(3, MissingCellPolicy.CREATE_NULL_AS_BLANK) + .setCellValue(invoice.getItemValueDate("invoice.booking_date")); + row.getCell(4, MissingCellPolicy.CREATE_NULL_AS_BLANK) + .setCellValue(invoice.getItemValueString("space.name")); + row.getCell(5, MissingCellPolicy.CREATE_NULL_AS_BLANK) + .setCellValue(invoice.getItemValueString("invoice.text")); + row.getCell(6, MissingCellPolicy.CREATE_NULL_AS_BLANK) + .setCellValue(invoice.getItemValueString("invoice.atc.number")); + row.getCell(7, MissingCellPolicy.CREATE_NULL_AS_BLANK) + .setCellValue(invoice.getItemValueDouble("invoice.total.net")); + row.getCell(8, MissingCellPolicy.CREATE_NULL_AS_BLANK) + .setCellValue(invoice.getItemValueDouble("invoice.saldo")); + row.getCell(9, MissingCellPolicy.CREATE_NULL_AS_BLANK) + .setCellValue(invoice.getItemValueDouble("steuer.eust")); + row.getCell(10, MissingCellPolicy.CREATE_NULL_AS_BLANK) + .setCellValue(invoice.getItemValueDate("steuer.eust.due")); + row.getCell(11, MissingCellPolicy.CREATE_NULL_AS_BLANK) + .setCellValue(invoice.getItemValueDouble("steuer.zoll")); + row.getCell(12, MissingCellPolicy.CREATE_NULL_AS_BLANK) + .setCellValue(invoice.getItemValueDate("steuer.zoll.due")); + + rowPos++; + } + + // Leerzeile + // categoryRow = sheet.createRow(rowPos); + rowPos++; + + // write back the file + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + doc.write(byteArrayOutputStream); + + byte[] newContent = byteArrayOutputStream.toByteArray(); + FileData fileDataNew = new FileData(fileData.getName(), newContent, fileData.getContentType(), null); + // update the fileData + document.addFileData(fileDataNew); + + logger.finest("......new document added"); + + } catch (IOException e) { + throw new PluginException(AGLAnalyticExcelAdapter.class.getSimpleName(), OPListExportService.ERROR_CONFIG, + "failed to update opliste: " + e.getMessage()); + } finally { + if (doc != null) { + try { + doc.close(); + } catch (IOException e) { + logger.severe("Failed to close workbook: " + e.getMessage()); + e.printStackTrace(); + } + } + } + } + + /** + * This method loads a text-block for a specified ref and appends the named + * fileData object of this document. + * + * @param document + * @throws PluginException + */ + private void appendExcelTemplate(ItemCollection document, String textblockRef, String template, String targetName) + throws PluginException { + + if ((template == null || template.isEmpty()) || (textblockRef == null || textblockRef.isEmpty())) { + throw new PluginException(AGLAnalyticExcelAdapter.class.getSimpleName(), OPListExportService.ERROR_CONFIG, + "invalid steuerbescheide configuration in model event - textblock/template reference not defined!"); + } + + // load the text block + FileData fileData = opListExportService.loadTextBlockFileData(textblockRef, template); + + // do we found the document? + if (fileData == null) { + throw new PluginException(AGLAnalyticExcelAdapter.class.getSimpleName(), OPListExportService.ERROR_CONFIG, + "invalid steuerbescheide configuration in model event - template=" + template + " not found!"); + } + fileData.setName(targetName); + // append document + logger.info("...append new steuerbescheide Template: " + targetName); + document.addFileData(fileData); + + } + + /** + * Diese Methode läd alle offenen Steuerbescheide + * + * @return + */ + private List loadSteuerbescheide() { + List result = new ArrayList<>(); + try { + result = documentService.find( + "$modelversion:steuerbescheid-* AND type:workitem", 9999, 0, + "invoice.number", false); + } catch (QueryException e) { + e.printStackTrace(); + } + return result; + } + +} \ No newline at end of file diff --git a/office-alexander-logistics-app/src/main/java/org/imixs/workflow/office/forms/AnalyticController.java b/office-alexander-logistics-app/src/main/java/org/imixs/workflow/office/forms/AnalyticController.java index 88b6697..e80e135 100644 --- a/office-alexander-logistics-app/src/main/java/org/imixs/workflow/office/forms/AnalyticController.java +++ b/office-alexander-logistics-app/src/main/java/org/imixs/workflow/office/forms/AnalyticController.java @@ -108,7 +108,7 @@ public class AnalyticController implements Serializable { if (workflowController.getWorkitem() != null) { // try to fetch value from cache if (!workflowController.getWorkitem().hasItem("analytic." + key)) { - logger.info("fire analytic event for key '" + key + "'"); + logger.fine("fire analytic event for key '" + key + "'"); // Fire the Analytics Event for this key AnalyticEvent event = new AnalyticEvent(key, workflowController.getWorkitem()); if (analyticEvents != null) { diff --git a/templates/steuerbescheid-liste_template.xlsx b/templates/steuerbescheid-liste_template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8a39026e405d1e569c980a0d6270464385ce16e5 GIT binary patch literal 50475 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 literal 0 HcmV?d00001 diff --git a/workflow/analyse-steuerbescheid-de-1.0.1.bpmn b/workflow/analyse-steuerbescheid-de-1.0.1.bpmn new file mode 100644 index 0000000..128cfb6 --- /dev/null +++ b/workflow/analyse-steuerbescheid-de-1.0.1.bpmn @@ -0,0 +1,443 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + +<itemvalue>$workflowstatus</itemvalue> + +]]> + + + +]]> + + + + + + + + + + + + + + StartEvent_1 + Task_1 + EndEvent_3 + Task_2 + IntermediateCatchEvent_8 + + DataObject_1 + event_HrHS9A + + + + SequenceFlow_4 + + + + + + $lasteventdate]]> + + + true + + + + + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_10 + sequenceFlow_OL83kQ + sequenceFlow_P5vJKg + + + + + + SequenceFlow_10 + + + + + + $lasteventdate]]> + + + + + + + + + + + + true + + + + + + + + + + + + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_4 + sequenceFlow_17AQjg + sequenceFlow_nZPhew + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + sequenceFlow_17AQjg + sequenceFlow_OL83kQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + Mahnwesen + + Steuerbescheide Template + + steuerbescheide_$lasteventdate.xlsx + + + + K6 + $lasteventdate + date + + +TOTAL1;TOTAL2;TOTAL3;TOTAL4 +]]> + + + + + sequenceFlow_nZPhew + sequenceFlow_P5vJKg + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/workflow/steuerbescheid-de-1.0.5.bpmn b/workflow/steuerbescheid-de-1.0.5.bpmn new file mode 100644 index 0000000..16426b0 --- /dev/null +++ b/workflow/steuerbescheid-de-1.0.5.bpmn @@ -0,0 +1,1384 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + +<itemvalue>$workflowstatus</itemvalue> + +]]> + + + +]]> + + + + + + + + + + + + + + + + + + + + StartEvent_1 + Task_1 + IntermediateCatchEvent_3 + Task_4 + EndEvent_3 + + DataObject_2 + event_XJbC5A + textAnnotation_HwSKqQ + event_9fS4uw + event_mPDOzA + gateway_u86UTw + gateway_5riVig + event_0j5Tyg + gateway_4Jce4w + task_Xtwzqw + textAnnotation_SkyWAQ + task_O06T6Q + event_uYUtGg + event_SXqpPw + gateway_yONKfQ + gateway_XuJUAw + event_CGDJnQ + event_q0jrHA + event_bQtvJQ + event_gskJ4Q + task_OLIdnQ + event_x7R5Sw + event_ZEDh4Q + task_Em0QgQ + dataObject_P0BaVA + + + + + sequenceFlow_ikwt6g + + + SequenceFlow_19 + + + + + + invoice.number invoice.booking_text invoice.atc.number vom invoice.date ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AbteilungBelegdatumSumme Zoll/EUStSaldo + + + space.name + invoice.date + invoice.total.net + invoice.saldo + +]]> + + + $workflowgroup - $workflowstatus]]> + sequenceFlow_EzmiPA + sequenceFlow_rbVgQA + sequenceFlow_KOaBSw + sequenceFlow_tpBldQ + + + + + true + + + + + + + + + + + + + + + + + + invoice.number invoice.booking_text invoice.atc.number vom invoice.date ]]> + + + + + AbteilungBelegdatumSumme Zoll/EUStSaldo + + + space.name + invoice.date + invoice.total.net + invoice.saldo + +]]> + + + $workflowgroup - $workflowstatus]]> + SequenceFlow_19 + sequenceFlow_d60CVg + + + + + + + + + + + + + + + + + + + + + Mahnwesen]]> + + + + sequenceFlow_ikwt6g + sequenceFlow_60LKZw + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + sequenceFlow_hLkSLA + sequenceFlow_oRy3qw + sequenceFlow_UW18Jw + + + + + + + + + + + + + + + + sequenceFlow_rbVgQA + + + + + + + + + + + + + + + + + + + + + + + + + sequenceFlow_tpBldQ + sequenceFlow_lrR0DQ + sequenceFlow_GmmBvA + + + + sequenceFlow_lrR0DQ + sequenceFlow_KOaBSw + sequenceFlow_hLkSLA + + + + sequenceFlow_EzmiPA + sequenceFlow_omVTTA + sequenceFlow_r7sdOg + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + home]]> + + + + sequenceFlow_hLkSLA + sequenceFlow_aaLOTA + sequenceFlow_r7sdOg + sequenceFlow_HWrJ6A + + + + sequenceFlow_oRy3qw + sequenceFlow_d60CVg + sequenceFlow_aaLOTA + + + + + + + + + + + invoice.number invoice.booking_text invoice.atc.number vom invoice.date ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AbteilungBelegdatumSumme Zoll/EUStSaldo + + + space.name + invoice.date + invoice.total.net + invoice.saldo + +]]> + + + $workflowgroup - $workflowstatus]]> + sequenceFlow_J0GjVg + sequenceFlow_60LKZw + sequenceFlow_n9vw7A + Association_3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + invoice.number invoice.booking_text invoice.atc.number vom invoice.date ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AbteilungBelegdatumSumme Zoll/EUStSaldo + + + space.name + invoice.date + invoice.total.net + invoice.saldo + +]]> + + + $workflowgroup - $workflowstatus]]> + sequenceFlow_KOaBSw + sequenceFlow_HvXbYg + sequenceFlow_HWrJ6A + sequenceFlow_FTi0cA + sequenceFlow_QxNNCQ + sequenceFlow_QxaZJA + + + + + + + + + + + + + + + + + + + + + + + Html-Header +Mahnung +Html-Footer]]> + + + + + + + + + + + + invoice.atc.number wurde noch nicht abgerechnet!]]> + + + $lasteventdate + + reminder + @weekly +]]> + + + + + + + + + + + sequenceFlow_n9vw7A + sequenceFlow_omVTTA + sequenceFlow_o6glqQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sequenceFlow_n9vw7A + sequenceFlow_HvXbYg + sequenceFlow_0AEnAQ + + + + + + + sequenceFlow_hLkSLA + sequenceFlow_0AEnAQ + sequenceFlow_sNhh5g + sequenceFlow_UW18Jw + + + + + + + + + + + + + + + + + sequenceFlow_o6glqQ + sequenceFlow_FTi0cA + sequenceFlow_sNhh5g + + + + + + + + + + + + + + + + + + + + + sequenceFlow_QxNNCQ + + + + + + + + + + + Html-Header +Mahnung +Html-Footer]]> + + + + + + + + + + + + invoice.atc.number wurde wiederholt noch nicht abgerechnet!]]> + + + + reminder + @weekly +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + sequenceFlow_QxaZJA + + + + + + + + + + + + + + + + + + + + + +X-Tika-OCRLanguage=deu +X-Tika-PDFocrStrategy=OCR_ONLY +(PDF|pdf)$ +10 +]]> + + + + sequenceFlow_n9vw7A + sequenceFlow_Kw58EQ + sequenceFlow_lwTFxw + + + + + + 1000 + + sequenceFlow_Kw58EQ + + + + + + + + invoice.number invoice.booking_text invoice.atc.number vom invoice.date ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AbteilungBelegdatumSumme Zoll/EUStSaldo + + + space.name + invoice.date + invoice.total.net + invoice.saldo + +]]> + + + $workflowgroup - $workflowstatus]]> + sequenceFlow_J0GjVg + Association_3 + sequenceFlow_lwTFxw + sequenceFlow_PMoo7w + + + + + + + + + + + + + + + + + + + + + false + + https://llama.cpp.imixs.com/ + XML + false +]]> + + + + sequenceFlow_Kw58EQ + sequenceFlow_PMoo7w + sequenceFlow_2NTSsQ + sequenceFlow_8NjTWw + + + + + + + + + sequenceFlow_2NTSsQ + + + + + + + + invoice.number invoice.booking_text invoice.atc.number vom invoice.date ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AbteilungBelegdatumSumme Zoll/EUStSaldo + + + space.name + invoice.date + invoice.total.net + invoice.saldo + +]]> + + + $workflowgroup - $workflowstatus]]> + sequenceFlow_J0GjVg + Association_3 + sequenceFlow_8NjTWw + sequenceFlow_GmmBvA + + + + + + + + + + + {"n_predict": 4096, "temperature": 0 } + ^.+\.([pP][dD][fF])$ + +[INST] Übertrage die Informationen aus dem Steuerbescheid in eine XML Struktur: + + + .... + + ... + + + + ... + + + + +Den Anmelder findest du im Absatz 'Anmelder'. Hier ist nur der Firmenname interessant und nicht die Steuernummer und Adresse. +Die Tabelle mit den Positionsnummern enthält einen oder mehrere Buchungsschlüssel (key) mit Detailinformationen. +Eine einzelne Positionszeile beginnt entweder mit dem Buchungsschlüssel 'A....' oder 'B....' und enthält optional ein Fälligkeitsdatum (duedate). + +Beachte: Füge keine Erklärungen oder Kommentare hinzu. Formatiere Datumswerte im ISO 8601-Format (YYYY-MM-DD). + +[/INST] + +]]]]> + + ]]> + + + + + + + + + + Hallo,

+

+folgender Steuerbescheid wurde bisher noch nicht abgerechnet. Bitte prüfen Sie diesen Vorgang: +

+

+application.urlpages/workitems/workitem.jsf?id=$uniqueid +

+

+Nachdem Sie die Rechnung erstellt haben, wird dieser Vorgang automatisch abgeschlossen. +

+

+Einen Überblick über alle überflälligen noch offenen Steuerbescheide finden Sie +hier + +([^\s]+(\.(?i)(pdf))$)]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +