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 0000000..8a39026 Binary files /dev/null and b/templates/steuerbescheid-liste_template.xlsx differ 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))$)]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +