update demo data

This commit is contained in:
Ralph Soika 2026-01-16 21:57:24 +01:00
parent 920ead69f9
commit 34f8d54b08
21 changed files with 5703 additions and 1030 deletions

48
demo/spaces_processes.xml Normal file

File diff suppressed because one or more lines are too long

View file

@ -30,8 +30,9 @@ public class GenerateModel {
@Test
public void buildModel() {
try {
String out = "src/test/resources/supplier-compliance-process.bpmn";
String descriptionFile = "src/test/resources/process-description.txt";
String out = "src/test/resources/risk-de-1.0.0.bpmn";
// String descriptionFile = "src/test/resources/process-description.txt";
String descriptionFile = "src/test/resources/riskmanagement.txt";
logger.info("...read template");
BPMNModel model = BPMNModelFactory.read("/template-en-0.0.0.bpmn");
@ -45,7 +46,7 @@ public class GenerateModel {
Event referenceEvent = (Event) process.findElementById("event_vIjHLQ");
// Parse description and generate BPMN elements
ProcessDescriptionParser parser = new ProcessDescriptionParser();
ProcessDescriptionParserGemini parser = new ProcessDescriptionParserGemini();
parser.getLayoutCalculator().setStartPosition(300, 300);
parser.parseAndGenerate(descriptionFile, process, referenceTask, referenceEvent);

View file

@ -18,18 +18,22 @@ import org.openbpmn.bpmn.elements.core.BPMNPoint;
import org.openbpmn.bpmn.exceptions.BPMNModelException;
/**
* Parses a process description file and generates BPMN elements. Uses
* LayoutCalculator for positioning of elements.
* Parses a process description file and generates BPMN elements.
* Uses LayoutCalculator for positioning of elements.
*
* Supports both plain text and Markdown-formatted descriptions.
*/
public class ProcessDescriptionParser {
private static final Logger logger = Logger.getLogger(ProcessDescriptionParser.class.getName());
// Regex patterns
// Regex patterns (flexible for plain text and Markdown)
private static final Pattern TASK_PATTERN = Pattern.compile(
"\\|-\\s*\\[Task:\\s*(\\d+)\\]\\s*(.+)$");
private static final Pattern EVENT_PATTERN = Pattern.compile(
"\\|--\\s*\\[Event:\\s*(\\d+)\\]\\s*([^(]+)\\s*\\([^)]*\\)\\s*-->\\s*\\[Task:\\s*(\\d+)\\]");
"\\|--\\s*\\[Event:\\s*(\\d+)\\]\\s*(.+?)\\s*-->\\s*\\[Task:\\s*(\\d+)\\]");
private static final Pattern TEAM_PATTERN = Pattern.compile(
"Team:\\s*(.+)$");
// Layout calculator
private LayoutCalculator layoutCalculator = new LayoutCalculator();
@ -76,6 +80,19 @@ public class ProcessDescriptionParser {
}
}
/**
* Removes Markdown formatting (**, *, etc.) from a string.
*/
private String cleanMarkdown(String text) {
if (text == null)
return null;
// Remove ** and * markers
String cleaned = text.replaceAll("\\*\\*", "").replaceAll("\\*", "");
// Remove trailing comments like (Iteration für Korrekturen)
cleaned = cleaned.replaceAll("\\s*\\([^)]*\\)\\s*$", "");
return cleaned.trim();
}
/**
* Parses the description file and creates all BPMN elements in the process.
*/
@ -153,7 +170,7 @@ public class ProcessDescriptionParser {
}
currentTask = new TaskData(
Integer.parseInt(taskMatcher.group(1)),
taskMatcher.group(2).trim());
cleanMarkdown(taskMatcher.group(2)));
taskDataList.add(currentTask);
descBuilder = new StringBuilder();
readingDesc = false;
@ -161,9 +178,9 @@ public class ProcessDescriptionParser {
}
// Match team
if (trimmed.contains("Team:") && currentTask != null) {
int teamIndex = trimmed.indexOf("Team:");
currentTask.team = trimmed.substring(teamIndex + 5).trim();
Matcher teamMatcher = TEAM_PATTERN.matcher(trimmed);
if (teamMatcher.find() && currentTask != null) {
currentTask.team = cleanMarkdown(teamMatcher.group(1));
continue;
}
@ -173,7 +190,7 @@ public class ProcessDescriptionParser {
readingDesc = false;
events.add(new EventData(
Integer.parseInt(eventMatcher.group(1)),
eventMatcher.group(2).trim(),
cleanMarkdown(eventMatcher.group(2)),
currentTask.id,
Integer.parseInt(eventMatcher.group(3))));
continue;
@ -242,6 +259,7 @@ public class ProcessDescriptionParser {
Event event = (Event) process.cloneBPMNElementNode(referenceEvent);
event.setName(eventData.name);
event.setPosition(new BPMNPoint(pos[0], pos[1]));
// Calculate activity ID: first event = 10, second = 20, etc. (per task)
int eventIndex = getEventIndex(eventData.sourceTaskId, eventData.eventId);
int activityId = (eventIndex + 1) * 10;

View file

@ -0,0 +1,303 @@
package ai.dynamixs.model.builder;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.openbpmn.bpmn.elements.Activity;
import org.openbpmn.bpmn.elements.BPMNProcess;
import org.openbpmn.bpmn.elements.Event;
import org.openbpmn.bpmn.elements.core.BPMNPoint;
import org.openbpmn.bpmn.exceptions.BPMNModelException;
/**
* Parses a process description file and generates BPMN elements. Uses
* LayoutCalculator for positioning of elements.
*/
public class ProcessDescriptionParserClaude {
private static final Logger logger = Logger.getLogger(ProcessDescriptionParser.class.getName());
// Regex patterns
private static final Pattern TASK_PATTERN = Pattern.compile(
"\\|-\\s*\\[Task:\\s*(\\d+)\\]\\s*(.+)$");
private static final Pattern EVENT_PATTERN = Pattern.compile(
"\\|--\\s*\\[Event:\\s*(\\d+)\\]\\s*([^(]+)\\s*\\([^)]*\\)\\s*-->\\s*\\[Task:\\s*(\\d+)\\]");
// Layout calculator
private LayoutCalculator layoutCalculator = new LayoutCalculator();
// Storage for created elements
private Map<Integer, Activity> tasks = new HashMap<>();
private List<EventData> events = new ArrayList<>();
private Map<Integer, String> taskLanes = new HashMap<>();
private int sequenceFlowCounter = 1;
/**
* Internal class to hold event data before creating BPMN elements.
*/
private static class EventData {
int eventId;
String name;
int sourceTaskId;
int targetTaskId;
EventData(int eventId, String name, int sourceTaskId, int targetTaskId) {
this.eventId = eventId;
this.name = name;
this.sourceTaskId = sourceTaskId;
this.targetTaskId = targetTaskId;
}
String getKey() {
return sourceTaskId + "_" + eventId;
}
}
/**
* Simple data holder for tasks during parsing.
*/
private static class TaskData {
int id;
String name;
String description;
String team;
TaskData(int id, String name) {
this.id = id;
this.name = name;
}
}
/**
* Parses the description file and creates all BPMN elements in the process.
*/
public void parseAndGenerate(String filePath, BPMNProcess process,
Activity referenceTask, Event referenceEvent) throws IOException, BPMNModelException {
tasks.clear();
events.clear();
taskLanes.clear();
// Parse file and collect task/event data
List<TaskData> taskDataList = parseFile(filePath);
// Collect unique lanes (in order of first appearance)
List<String> laneNames = new ArrayList<>();
for (TaskData taskData : taskDataList) {
if (taskData.team != null && !laneNames.contains(taskData.team)) {
laneNames.add(taskData.team);
}
taskLanes.put(taskData.id, taskData.team);
}
// Create BPMN lanes
for (String laneName : laneNames) {
process.addLane(laneName);
logger.info("Created lane: " + laneName);
}
// Calculate layout
layoutCalculator.calculateLanePositions(laneNames);
List<Integer> taskIds = taskDataList.stream().map(t -> t.id).toList();
layoutCalculator.calculateTaskPositions(taskIds, taskLanes);
// Calculate layout for all events
for (EventData eventData : events) {
int eventIndex = getEventIndex(eventData.sourceTaskId, eventData.eventId);
String laneName = taskLanes.get(eventData.sourceTaskId);
layoutCalculator.calculateEventPosition(eventData.sourceTaskId, eventData.eventId, eventIndex, laneName);
}
// Create BPMN tasks
createTasks(taskDataList, process, referenceTask);
// Create BPMN events
Map<String, Event> createdEvents = createEvents(process, referenceEvent);
// Create sequence flows
createSequenceFlows(process, createdEvents);
logger.info("Generated " + tasks.size() + " tasks, " + createdEvents.size() + " events, " + laneNames.size()
+ " lanes");
}
/**
* Parses the file and returns task data list. Also populates events list.
*/
private List<TaskData> parseFile(String filePath) throws IOException {
List<TaskData> taskDataList = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
TaskData currentTask = null;
StringBuilder descBuilder = new StringBuilder();
boolean readingDesc = false;
while ((line = reader.readLine()) != null) {
String trimmed = line.trim();
// Match task
Matcher taskMatcher = TASK_PATTERN.matcher(trimmed);
if (taskMatcher.find()) {
if (currentTask != null) {
currentTask.description = descBuilder.toString().trim();
}
currentTask = new TaskData(
Integer.parseInt(taskMatcher.group(1)),
taskMatcher.group(2).trim());
taskDataList.add(currentTask);
descBuilder = new StringBuilder();
readingDesc = false;
continue;
}
// Match team
if (trimmed.contains("Team:") && currentTask != null) {
int teamIndex = trimmed.indexOf("Team:");
currentTask.team = trimmed.substring(teamIndex + 5).trim();
continue;
}
// Match event
Matcher eventMatcher = EVENT_PATTERN.matcher(trimmed);
if (eventMatcher.find() && currentTask != null) {
readingDesc = false;
events.add(new EventData(
Integer.parseInt(eventMatcher.group(1)),
eventMatcher.group(2).trim(),
currentTask.id,
Integer.parseInt(eventMatcher.group(3))));
continue;
}
// Description handling
if (trimmed.contains("Description:")) {
readingDesc = true;
continue;
}
if (readingDesc && currentTask != null && !trimmed.startsWith("|--")) {
String descLine = trimmed.replaceAll("^\\|\\s*", "").trim();
if (!descLine.isEmpty()) {
if (descBuilder.length() > 0)
descBuilder.append(" ");
descBuilder.append(descLine);
}
}
}
if (currentTask != null) {
currentTask.description = descBuilder.toString().trim();
}
}
return taskDataList;
}
/**
* Creates BPMN task elements.
*/
private void createTasks(List<TaskData> taskDataList, BPMNProcess process,
Activity referenceTask) throws BPMNModelException {
for (TaskData taskData : taskDataList) {
double[] pos = layoutCalculator.getTaskPosition(taskData.id);
Activity task = (Activity) process.cloneBPMNElementNode(referenceTask);
task.setName(taskData.name);
task.setPosition(new BPMNPoint(pos[0], pos[1]));
task.setAttribute("imixs:processid", String.valueOf(taskData.id));
if (taskData.description != null && !taskData.description.isEmpty()) {
task.setDocumentation(taskData.description);
}
tasks.put(taskData.id, task);
logger.info("Created task: " + taskData.id + " - " + taskData.name);
}
}
/**
* Creates BPMN event elements.
*/
private Map<String, Event> createEvents(BPMNProcess process,
Event referenceEvent) throws BPMNModelException {
Map<String, Event> createdEvents = new HashMap<>();
for (EventData eventData : events) {
double[] pos = layoutCalculator.getEventPosition(eventData.sourceTaskId, eventData.eventId);
if (pos == null)
continue;
Event event = (Event) process.cloneBPMNElementNode(referenceEvent);
event.setName(eventData.name);
event.setPosition(new BPMNPoint(pos[0], pos[1]));
// Calculate activity ID: first event = 10, second = 20, etc. (per task)
int eventIndex = getEventIndex(eventData.sourceTaskId, eventData.eventId);
int activityId = (eventIndex + 1) * 10;
event.setAttribute("imixs:activityid", String.valueOf(activityId));
createdEvents.put(eventData.getKey(), event);
logger.info("Created event: " + eventData.getKey() + " - " + eventData.name);
}
return createdEvents;
}
/**
* Creates sequence flows between tasks and events.
*/
private void createSequenceFlows(BPMNProcess process,
Map<String, Event> createdEvents) throws BPMNModelException {
for (EventData eventData : events) {
Activity sourceTask = tasks.get(eventData.sourceTaskId);
Event event = createdEvents.get(eventData.getKey());
Activity targetTask = tasks.get(eventData.targetTaskId);
if (sourceTask == null || event == null || targetTask == null)
continue;
if (eventData.sourceTaskId == eventData.targetTaskId) {
// Self-loop (CatchEvent): only sequence flow from event to task
process.addSequenceFlow("sf-" + sequenceFlowCounter++, event.getId(), targetTask.getId());
} else {
// Normal flow: task -> event -> target task
process.addSequenceFlow("sf-" + sequenceFlowCounter++, sourceTask.getId(), event.getId());
process.addSequenceFlow("sf-" + sequenceFlowCounter++, event.getId(), targetTask.getId());
}
}
}
/**
* Returns the index of an event among all events of a source task.
*/
private int getEventIndex(int taskId, int eventId) {
int index = 0;
for (EventData e : events) {
if (e.sourceTaskId == taskId) {
if (e.eventId == eventId)
return index;
index++;
}
}
return 0;
}
/**
* Returns the layout calculator for configuration.
*/
public LayoutCalculator getLayoutCalculator() {
return layoutCalculator;
}
}

View file

@ -0,0 +1,303 @@
package ai.dynamixs.model.builder;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.openbpmn.bpmn.elements.Activity;
import org.openbpmn.bpmn.elements.BPMNProcess;
import org.openbpmn.bpmn.elements.Event;
import org.openbpmn.bpmn.elements.core.BPMNPoint;
import org.openbpmn.bpmn.exceptions.BPMNModelException;
/**
* Parses a process description file and generates BPMN elements. Uses
* LayoutCalculator for positioning of elements.
*/
public class ProcessDescriptionParserGemini {
private static final Logger logger = Logger.getLogger(ProcessDescriptionParser.class.getName());
// Regex patterns
private static final Pattern TASK_PATTERN = Pattern.compile(
"\\|-\\s*\\[Task:\\s*(\\d+)\\]\\s*(.+)$");
private static final Pattern EVENT_PATTERN = Pattern.compile(
"\\|--\\s*\\[Event:\\s*(\\d+)\\]\\s*([^(]+)\\s*\\([^)]*\\)\\s*-->\\s*\\[Task:\\s*(\\d+)\\]");
// Layout calculator
private LayoutCalculator layoutCalculator = new LayoutCalculator();
// Storage for created elements
private Map<Integer, Activity> tasks = new HashMap<>();
private List<EventData> events = new ArrayList<>();
private Map<Integer, String> taskLanes = new HashMap<>();
private int sequenceFlowCounter = 1;
/**
* Internal class to hold event data before creating BPMN elements.
*/
private static class EventData {
int eventId;
String name;
int sourceTaskId;
int targetTaskId;
EventData(int eventId, String name, int sourceTaskId, int targetTaskId) {
this.eventId = eventId;
this.name = name;
this.sourceTaskId = sourceTaskId;
this.targetTaskId = targetTaskId;
}
String getKey() {
return sourceTaskId + "_" + eventId;
}
}
/**
* Simple data holder for tasks during parsing.
*/
private static class TaskData {
int id;
String name;
String description;
String team;
TaskData(int id, String name) {
this.id = id;
this.name = name;
}
}
/**
* Parses the description file and creates all BPMN elements in the process.
*/
public void parseAndGenerate(String filePath, BPMNProcess process,
Activity referenceTask, Event referenceEvent) throws IOException, BPMNModelException {
tasks.clear();
events.clear();
taskLanes.clear();
// Parse file and collect task/event data
List<TaskData> taskDataList = parseFile(filePath);
// Collect unique lanes (in order of first appearance)
List<String> laneNames = new ArrayList<>();
for (TaskData taskData : taskDataList) {
if (taskData.team != null && !laneNames.contains(taskData.team)) {
laneNames.add(taskData.team);
}
taskLanes.put(taskData.id, taskData.team);
}
// Create BPMN lanes
for (String laneName : laneNames) {
process.addLane(laneName);
logger.info("Created lane: " + laneName);
}
// Calculate layout
layoutCalculator.calculateLanePositions(laneNames);
List<Integer> taskIds = taskDataList.stream().map(t -> t.id).toList();
layoutCalculator.calculateTaskPositions(taskIds, taskLanes);
// Calculate layout for all events
for (EventData eventData : events) {
int eventIndex = getEventIndex(eventData.sourceTaskId, eventData.eventId);
String laneName = taskLanes.get(eventData.sourceTaskId);
layoutCalculator.calculateEventPosition(eventData.sourceTaskId, eventData.eventId, eventIndex, laneName);
}
// Create BPMN tasks
createTasks(taskDataList, process, referenceTask);
// Create BPMN events
Map<String, Event> createdEvents = createEvents(process, referenceEvent);
// Create sequence flows
createSequenceFlows(process, createdEvents);
logger.info("Generated " + tasks.size() + " tasks, " + createdEvents.size() + " events, " + laneNames.size()
+ " lanes");
}
/**
* Parses the file and returns task data list. Also populates events list.
*/
private List<TaskData> parseFile(String filePath) throws IOException {
List<TaskData> taskDataList = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
TaskData currentTask = null;
StringBuilder descBuilder = new StringBuilder();
boolean readingDesc = false;
while ((line = reader.readLine()) != null) {
String trimmed = line.trim();
// Match task
Matcher taskMatcher = TASK_PATTERN.matcher(trimmed);
if (taskMatcher.find()) {
if (currentTask != null) {
currentTask.description = descBuilder.toString().trim();
}
currentTask = new TaskData(
Integer.parseInt(taskMatcher.group(1)),
taskMatcher.group(2).trim());
taskDataList.add(currentTask);
descBuilder = new StringBuilder();
readingDesc = false;
continue;
}
// Match team
if (trimmed.contains("Team:") && currentTask != null) {
int teamIndex = trimmed.indexOf("Team:");
currentTask.team = trimmed.substring(teamIndex + 5).trim();
continue;
}
// Match event
Matcher eventMatcher = EVENT_PATTERN.matcher(trimmed);
if (eventMatcher.find() && currentTask != null) {
readingDesc = false;
events.add(new EventData(
Integer.parseInt(eventMatcher.group(1)),
eventMatcher.group(2).trim(),
currentTask.id,
Integer.parseInt(eventMatcher.group(3))));
continue;
}
// Description handling
if (trimmed.contains("Description:")) {
readingDesc = true;
continue;
}
if (readingDesc && currentTask != null && !trimmed.startsWith("|--")) {
String descLine = trimmed.replaceAll("^\\|\\s*", "").trim();
if (!descLine.isEmpty()) {
if (descBuilder.length() > 0)
descBuilder.append(" ");
descBuilder.append(descLine);
}
}
}
if (currentTask != null) {
currentTask.description = descBuilder.toString().trim();
}
}
return taskDataList;
}
/**
* Creates BPMN task elements.
*/
private void createTasks(List<TaskData> taskDataList, BPMNProcess process,
Activity referenceTask) throws BPMNModelException {
for (TaskData taskData : taskDataList) {
double[] pos = layoutCalculator.getTaskPosition(taskData.id);
Activity task = (Activity) process.cloneBPMNElementNode(referenceTask);
task.setName(taskData.name);
task.setPosition(new BPMNPoint(pos[0], pos[1]));
task.setAttribute("imixs:processid", String.valueOf(taskData.id));
if (taskData.description != null && !taskData.description.isEmpty()) {
task.setDocumentation(taskData.description);
}
tasks.put(taskData.id, task);
logger.info("Created task: " + taskData.id + " - " + taskData.name);
}
}
/**
* Creates BPMN event elements.
*/
private Map<String, Event> createEvents(BPMNProcess process,
Event referenceEvent) throws BPMNModelException {
Map<String, Event> createdEvents = new HashMap<>();
for (EventData eventData : events) {
double[] pos = layoutCalculator.getEventPosition(eventData.sourceTaskId, eventData.eventId);
if (pos == null)
continue;
Event event = (Event) process.cloneBPMNElementNode(referenceEvent);
event.setName(eventData.name);
event.setPosition(new BPMNPoint(pos[0], pos[1]));
// Calculate activity ID: first event = 10, second = 20, etc. (per task)
int eventIndex = getEventIndex(eventData.sourceTaskId, eventData.eventId);
int activityId = (eventIndex + 1) * 10;
event.setAttribute("imixs:activityid", String.valueOf(activityId));
createdEvents.put(eventData.getKey(), event);
logger.info("Created event: " + eventData.getKey() + " - " + eventData.name);
}
return createdEvents;
}
/**
* Creates sequence flows between tasks and events.
*/
private void createSequenceFlows(BPMNProcess process,
Map<String, Event> createdEvents) throws BPMNModelException {
for (EventData eventData : events) {
Activity sourceTask = tasks.get(eventData.sourceTaskId);
Event event = createdEvents.get(eventData.getKey());
Activity targetTask = tasks.get(eventData.targetTaskId);
if (sourceTask == null || event == null || targetTask == null)
continue;
if (eventData.sourceTaskId == eventData.targetTaskId) {
// Self-loop (CatchEvent): only sequence flow from event to task
process.addSequenceFlow("sf-" + sequenceFlowCounter++, event.getId(), targetTask.getId());
} else {
// Normal flow: task -> event -> target task
process.addSequenceFlow("sf-" + sequenceFlowCounter++, sourceTask.getId(), event.getId());
process.addSequenceFlow("sf-" + sequenceFlowCounter++, event.getId(), targetTask.getId());
}
}
}
/**
* Returns the index of an event among all events of a source task.
*/
private int getEventIndex(int taskId, int eventId) {
int index = 0;
for (EventData e : events) {
if (e.sourceTaskId == taskId) {
if (e.eventId == eventId)
return index;
index++;
}
}
return 0;
}
/**
* Returns the layout calculator for configuration.
*/
public LayoutCalculator getLayoutCalculator() {
return layoutCalculator;
}
}

View file

@ -0,0 +1,597 @@
package ai.dynamixs.website;
import static org.junit.jupiter.api.Assertions.fail;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.junit.jupiter.api.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
/**
* This class loads an SVG file and performs various cleanup and color
* replacement operations to create background textures in different color
* variants.
*/
public class SVGConverter {
private static Logger logger = Logger.getLogger(SVGConverter.class.getName());
// Color variants for different themes
private static final String COLOR_DEFAULT = "#ffffff24";
private static final String COLOR_DARK = "#00000024";
private static final String COLOR_LIGHT = "#ffffff0a";
// Scale factor for the SVG output
private static final double SCALE_FACTOR = 1.5;
// Current target color (set during conversion)
private String targetColor;
/**
* Loads an SVG file and generates three color variants.
*/
@Test
public void convertSVG() {
String input = "src/test/resources/website/background-001.svg";
String outputBase = "src/test/resources/website/background-001";
// Generate all three variants
convertWithColor(input, outputBase + "_default.svg", COLOR_DEFAULT);
convertWithColor(input, outputBase + "_dark.svg", COLOR_DARK);
convertWithColor(input, outputBase + "_light.svg", COLOR_LIGHT);
}
/**
* Converts an SVG file with a specific target color.
*
* @param input the input SVG file path
* @param output the output SVG file path
* @param color the target color to use
*/
private void convertWithColor(String input, String output, String color) {
try {
this.targetColor = color;
logger.info("Converting SVG with color: " + color);
// Load the SVG file
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File(input));
// Get the root SVG element
Element svgRoot = document.getDocumentElement();
// Remove the style attribute from root element
if (svgRoot.hasAttribute("style")) {
svgRoot.removeAttribute("style");
logger.info("Removed 'style' attribute from SVG root element");
}
// Scale the SVG to 150%
scaleSVG(svgRoot, SCALE_FACTOR);
// Remove grid pattern and its usage
removeGridPattern(document);
// Replace colors in all element types
replaceTaskNodeColors(document);
replaceBPMNLabelColors(document);
replaceEdgeColors(document);
replaceDataElementColors(document);
replaceEventColors(document);
// Save the modified SVG to output file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new File(output));
transformer.transform(source, result);
logger.info("...svg converted successful: " + output);
} catch (Exception e) {
e.printStackTrace();
fail();
}
}
/**
* Removes the background grid pattern definition and all rect elements that
* reference it.
*/
private void removeGridPattern(Document document) {
List<Element> elementsToRemove = new ArrayList<>();
NodeList patterns = document.getElementsByTagName("pattern");
for (int i = 0; i < patterns.getLength(); i++) {
Element pattern = (Element) patterns.item(i);
String id = pattern.getAttribute("id");
if (id != null && id.startsWith("bpmn-grid-root")) {
elementsToRemove.add(pattern);
logger.info("Found grid pattern to remove: " + id);
NodeList rects = document.getElementsByTagName("rect");
for (int j = 0; j < rects.getLength(); j++) {
Element rect = (Element) rects.item(j);
String fill = rect.getAttribute("fill");
if (fill != null && fill.equals("url(#" + id + ")")) {
elementsToRemove.add(rect);
logger.info("Found rect using grid pattern to remove");
}
}
}
}
for (Element element : elementsToRemove) {
element.getParentNode().removeChild(element);
}
logger.info("Removed " + elementsToRemove.size() + " grid-related elements");
}
/**
* Replaces colors in task node elements.
*/
private void replaceTaskNodeColors(Document document) {
int pathCount = 0;
int textCount = 0;
NodeList groups = document.getElementsByTagName("g");
for (int i = 0; i < groups.getLength(); i++) {
Element group = (Element) groups.item(i);
String className = group.getAttribute("class");
if (className != null && className.contains("node") && className.contains("task")) {
NodeList paths = group.getElementsByTagName("path");
for (int j = 0; j < paths.getLength(); j++) {
Element path = (Element) paths.item(j);
String pathClass = path.getAttribute("class");
if (pathClass != null && pathClass.contains("sprotty-node")) {
String style = path.getAttribute("style");
if (style != null && !style.isEmpty()) {
String newStyle = replaceStyleColors(style);
path.setAttribute("style", newStyle);
pathCount++;
}
}
}
NodeList texts = group.getElementsByTagName("text");
for (int j = 0; j < texts.getLength(); j++) {
Element text = (Element) texts.item(j);
String style = text.getAttribute("style");
if (style != null && !style.isEmpty()) {
String newStyle = replaceTextFillColor(style);
text.setAttribute("style", newStyle);
textCount++;
}
}
}
}
logger.info("Replaced colors in " + pathCount + " task node path elements");
logger.info("Replaced colors in " + textCount + " task node text elements");
}
/**
* Parses a CSS style string and replaces fill and stroke colors.
*/
private String replaceStyleColors(String style) {
StringBuilder newStyle = new StringBuilder();
String[] properties = style.split(";");
for (String property : properties) {
property = property.trim();
if (property.isEmpty()) {
continue;
}
int colonIndex = property.indexOf(':');
if (colonIndex == -1) {
continue;
}
String name = property.substring(0, colonIndex).trim();
String value = property.substring(colonIndex + 1).trim();
if (name.equals("fill")) {
value = "transparent";
} else if (name.equals("stroke")) {
value = targetColor;
}
if (newStyle.length() > 0) {
newStyle.append(" ");
}
newStyle.append(name).append(": ").append(value).append(";");
}
return newStyle.toString();
}
/**
* Replaces colors in BPMNLabel elements.
*/
private void replaceBPMNLabelColors(Document document) {
int count = 0;
NodeList groups = document.getElementsByTagName("g");
for (int i = 0; i < groups.getLength(); i++) {
Element group = (Element) groups.item(i);
String className = group.getAttribute("class");
if (className != null && className.contains("BPMNLabel")) {
NodeList texts = group.getElementsByTagName("text");
for (int j = 0; j < texts.getLength(); j++) {
Element text = (Element) texts.item(j);
String textClass = text.getAttribute("class");
if (textClass != null && textClass.contains("sprotty-label")) {
String style = text.getAttribute("style");
if (style != null && !style.isEmpty()) {
String newStyle = replaceTextFillColor(style);
text.setAttribute("style", newStyle);
count++;
}
}
}
}
}
logger.info("Replaced colors in " + count + " BPMNLabel text elements");
}
/**
* Parses a CSS style string and replaces only the fill color (for text
* elements).
*/
private String replaceTextFillColor(String style) {
StringBuilder newStyle = new StringBuilder();
String[] properties = style.split(";");
for (String property : properties) {
property = property.trim();
if (property.isEmpty()) {
continue;
}
int colonIndex = property.indexOf(':');
if (colonIndex == -1) {
continue;
}
String name = property.substring(0, colonIndex).trim();
String value = property.substring(colonIndex + 1).trim();
if (name.equals("fill")) {
value = targetColor;
}
if (newStyle.length() > 0) {
newStyle.append(" ");
}
newStyle.append(name).append(": ").append(value).append(";");
}
return newStyle.toString();
}
/**
* Replaces colors in edge elements (sequenceFlow, association, etc.).
*/
private void replaceEdgeColors(Document document) {
int groupCount = 0;
int arrowCount = 0;
int textCount = 0;
NodeList groups = document.getElementsByTagName("g");
for (int i = 0; i < groups.getLength(); i++) {
Element group = (Element) groups.item(i);
String className = group.getAttribute("class");
if (className != null && className.contains("sprotty-edge") && className.contains("bpmnedge")) {
String groupStyle = group.getAttribute("style");
if (groupStyle != null && !groupStyle.isEmpty()) {
String newStyle = replaceStrokeColor(groupStyle);
group.setAttribute("style", newStyle);
groupCount++;
}
NodeList paths = group.getElementsByTagName("path");
for (int j = 0; j < paths.getLength(); j++) {
Element path = (Element) paths.item(j);
String pathClass = path.getAttribute("class");
if (pathClass != null && pathClass.contains("arrow")) {
String style = path.getAttribute("style");
if (style != null && !style.isEmpty()) {
String newStyle = replaceTextFillColor(style);
path.setAttribute("style", newStyle);
arrowCount++;
}
}
}
NodeList texts = group.getElementsByTagName("text");
for (int j = 0; j < texts.getLength(); j++) {
Element text = (Element) texts.item(j);
String style = text.getAttribute("style");
if (style != null && !style.isEmpty()) {
String newStyle = replaceTextFillColor(style);
text.setAttribute("style", newStyle);
textCount++;
}
}
}
}
logger.info("Replaced colors in " + groupCount + " edge groups");
logger.info("Replaced colors in " + arrowCount + " edge arrows");
logger.info("Replaced colors in " + textCount + " edge text elements");
}
/**
* Parses a CSS style string and replaces only the stroke color.
*/
private String replaceStrokeColor(String style) {
StringBuilder newStyle = new StringBuilder();
String[] properties = style.split(";");
for (String property : properties) {
property = property.trim();
if (property.isEmpty()) {
continue;
}
int colonIndex = property.indexOf(':');
if (colonIndex == -1) {
continue;
}
String name = property.substring(0, colonIndex).trim();
String value = property.substring(colonIndex + 1).trim();
if (name.equals("stroke")) {
value = targetColor;
}
if (newStyle.length() > 0) {
newStyle.append(" ");
}
newStyle.append(name).append(": ").append(value).append(";");
}
return newStyle.toString();
}
/**
* Replaces colors in dataStoreReference and dataObject elements.
*/
private void replaceDataElementColors(Document document) {
int count = 0;
NodeList groups = document.getElementsByTagName("g");
for (int i = 0; i < groups.getLength(); i++) {
Element group = (Element) groups.item(i);
String className = group.getAttribute("class");
if (className != null && (className.contains("dataStoreReference") || className.contains("dataObject"))) {
NodeList paths = group.getElementsByTagName("path");
for (int j = 0; j < paths.getLength(); j++) {
Element path = (Element) paths.item(j);
String stroke = path.getAttribute("stroke");
if (stroke != null && stroke.equals("currentColor")) {
path.setAttribute("stroke", targetColor);
count++;
}
String style = path.getAttribute("style");
if (style != null && !style.isEmpty()) {
String newStyle = replaceAllColors(style);
path.setAttribute("style", newStyle);
}
}
NodeList ellipses = group.getElementsByTagName("ellipse");
for (int j = 0; j < ellipses.getLength(); j++) {
Element ellipse = (Element) ellipses.item(j);
String stroke = ellipse.getAttribute("stroke");
if (stroke != null && stroke.equals("currentColor")) {
ellipse.setAttribute("stroke", targetColor);
count++;
}
}
}
}
logger.info("Replaced colors in " + count + " data element shapes");
}
/**
* Parses a CSS style string and replaces both fill and stroke colors.
*/
private String replaceAllColors(String style) {
StringBuilder newStyle = new StringBuilder();
String[] properties = style.split(";");
for (String property : properties) {
property = property.trim();
if (property.isEmpty()) {
continue;
}
int colonIndex = property.indexOf(':');
if (colonIndex == -1) {
continue;
}
String name = property.substring(0, colonIndex).trim();
String value = property.substring(colonIndex + 1).trim();
if (name.equals("fill") && !value.equals("none")) {
value = targetColor;
} else if (name.equals("stroke") && !value.equals("none")) {
value = targetColor;
}
if (newStyle.length() > 0) {
newStyle.append(" ");
}
newStyle.append(name).append(": ").append(value).append(";");
}
return newStyle.toString();
}
/**
* Replaces colors in event elements (startEvent, endEvent, etc.).
*/
private void replaceEventColors(Document document) {
int circleCount = 0;
int symbolCount = 0;
NodeList groups = document.getElementsByTagName("g");
for (int i = 0; i < groups.getLength(); i++) {
Element group = (Element) groups.item(i);
String className = group.getAttribute("class");
if (className != null && className.contains("event") && !className.contains("BPMNLabel")) {
NodeList circles = group.getElementsByTagName("circle");
for (int j = 0; j < circles.getLength(); j++) {
Element circle = (Element) circles.item(j);
String circleClass = circle.getAttribute("class");
if (circleClass != null && circleClass.contains("sprotty-node")) {
String style = circle.getAttribute("style");
if (style != null && !style.isEmpty()) {
String newStyle = replaceEventCircleStyle(style);
circle.setAttribute("style", newStyle);
circleCount++;
}
}
}
NodeList symbolGroups = group.getElementsByTagName("g");
for (int j = 0; j < symbolGroups.getLength(); j++) {
Element symbolGroup = (Element) symbolGroups.item(j);
String symbolClass = symbolGroup.getAttribute("class");
if (symbolClass != null && symbolClass.contains("symbol")) {
NodeList paths = symbolGroup.getElementsByTagName("path");
for (int k = 0; k < paths.getLength(); k++) {
Element path = (Element) paths.item(k);
String style = path.getAttribute("style");
if (style != null && !style.isEmpty()) {
String newStyle = replaceTextFillColor(style);
path.setAttribute("style", newStyle);
symbolCount++;
}
}
}
}
}
}
logger.info("Replaced colors in " + circleCount + " event circles");
logger.info("Replaced colors in " + symbolCount + " event symbols");
}
/**
* Parses a CSS style string for event circles. Sets fill to transparent and
* stroke to targetColor. Ensures stroke-width is visible (at least 2px).
*/
private String replaceEventCircleStyle(String style) {
StringBuilder newStyle = new StringBuilder();
boolean hasStrokeWidth = false;
String[] properties = style.split(";");
for (String property : properties) {
property = property.trim();
if (property.isEmpty()) {
continue;
}
int colonIndex = property.indexOf(':');
if (colonIndex == -1) {
continue;
}
String name = property.substring(0, colonIndex).trim();
String value = property.substring(colonIndex + 1).trim();
if (name.equals("fill")) {
value = "transparent";
} else if (name.equals("stroke")) {
value = targetColor;
} else if (name.equals("stroke-width")) {
hasStrokeWidth = true;
if (value.equals("0px") || value.equals("0")) {
value = "2px";
}
}
if (newStyle.length() > 0) {
newStyle.append(" ");
}
newStyle.append(name).append(": ").append(value).append(";");
}
if (!hasStrokeWidth) {
newStyle.append(" stroke-width: 2px;");
}
return newStyle.toString();
}
/**
* Scales the SVG content by adjusting the viewBox. A smaller viewBox means the
* content appears larger.
*
* @param svgRoot the root SVG element
* @param scaleFactor the scale factor (e.g., 1.5 for 150%)
*/
private void scaleSVG(Element svgRoot, double scaleFactor) {
// Adjust viewBox to scale content (divide by scale factor to make content
// larger)
String viewBox = svgRoot.getAttribute("viewBox");
if (viewBox != null && !viewBox.isEmpty()) {
String[] parts = viewBox.split("\\s+");
if (parts.length == 4) {
double minX = Double.parseDouble(parts[0]);
double minY = Double.parseDouble(parts[1]);
double width = Double.parseDouble(parts[2]);
double height = Double.parseDouble(parts[3]);
// Divide by scale factor - smaller viewBox = larger content
double newWidth = width / scaleFactor;
double newHeight = height / scaleFactor;
String newViewBox = String.format("%.0f %.0f %.0f %.0f", minX, minY, newWidth, newHeight);
svgRoot.setAttribute("viewBox", newViewBox);
logger.info("Scaled viewBox: " + viewBox + " -> " + newViewBox);
}
}
// Keep width and height as original (or remove them for responsive sizing)
// The viewBox change alone will scale the content
}
}

View file

@ -0,0 +1,583 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- origin at X=0.0 Y=0.0 --><bpmn2:definitions xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:BPMN2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:ext="http://org.eclipse.bpmn2/ext" xmlns:imixs="http://www.imixs.org/bpmn2" xmlns:open-bpmn="http://open-bpmn.org/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exporter="org.eclipse.bpmn2.modeler.core" exporterVersion="1.5.4.RC1-v20220528-0836-B1" id="Definitions_1" targetNamespace="http://www.imixs.org/bpmn2">
<bpmn2:extensionElements>
<imixs:item name="txtworkflowmodelversion" type="xs:string">
<imixs:value><![CDATA[offer-en-1.0]]></imixs:value>
</imixs:item>
<imixs:item name="txtfieldmapping" type="xs:string">
<imixs:value><![CDATA[Creator|$Creator]]></imixs:value>
<imixs:value><![CDATA[Current Editor|$Editor]]></imixs:value>
<imixs:value><![CDATA[Owner|$owner]]></imixs:value>
<imixs:value><![CDATA[Process Manager|process.manager]]></imixs:value>
<imixs:value><![CDATA[Process Team|process.team]]></imixs:value>
<imixs:value><![CDATA[Process Assist|process.assist]]></imixs:value>
<imixs:value><![CDATA[Department Manager|space.manager]]></imixs:value>
<imixs:value><![CDATA[Department Team|space.team]]></imixs:value>
<imixs:value><![CDATA[Department Assist|space.assist]]></imixs:value>
</imixs:item>
<imixs:item name="txttimefieldmapping" type="xs:string">
<imixs:value><![CDATA[Liefertermin|order.delivery]]></imixs:value>
</imixs:item>
<imixs:item name="txtplugins" type="xs:string">
<imixs:value><![CDATA[org.imixs.workflow.office.plugins.WorkitemLinkPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.ai.rag.RAGIndexPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ResultPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.RulePlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.marty.profile.ProfilePlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.marty.plugins.CommentPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.marty.plugins.SequenceNumberPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.marty.team.TeamPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.marty.profile.DeputyPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.OwnerPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.HistoryPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.LogPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ApplicationPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.marty.profile.MailPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.IntervalPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.SplitAndJoinPlugin]]></imixs:value>
<imixs:value><![CDATA[ai.dynamixs.cognition.CognitoPlugin]]></imixs:value>
</imixs:item>
<open-bpmn:auto-align>true</open-bpmn:auto-align>
</bpmn2:extensionElements>
<bpmn2:collaboration id="Collaboration_1" name="Collaboration 1">
<bpmn2:participant id="Participant_1" name="Example" processRef="Process_1">
<bpmn2:documentation id="documentation_3xKpCQ"/>
</bpmn2:participant>
<bpmn2:participant id="participant_hnZfjA" name="Default Process" processRef="process_2"/>
</bpmn2:collaboration>
<bpmn2:process definitionalCollaborationRef="Collaboration_1" id="Process_1" isExecutable="false" name="Example" processType="Private">
<bpmn2:laneSet id="LaneSet_1" name="Lane Set 1">
<bpmn2:lane id="Lane_1" name="Team">
<bpmn2:documentation id="documentation_gvQWYQ"/>
<bpmn2:flowNodeRef>StartEvent_1</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>EndEvent_2</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>task_yrC2dw</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>event_J0JjAg</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>event_1FAZgA</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>event_cjoSqg</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>gateway_SVo89A</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>event_5P6uhg</bpmn2:flowNodeRef>
</bpmn2:lane>
<bpmn2:lane id="lane_5RftUw" name="Contract Management">
<bpmn2:documentation id="documentation_AW2roA"/>
<bpmn2:flowNodeRef>task_0W5Llw</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>event_0k30Ug</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>task_vJ0eNA</bpmn2:flowNodeRef>
</bpmn2:lane>
<bpmn2:lane id="lane_a0dlhQ" name="Contract Owner">
<bpmn2:documentation id="documentation_fATy7A"/>
<bpmn2:flowNodeRef>task_GgAr6w</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>event_zpkT5A</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>event_v7oUjw</bpmn2:flowNodeRef>
</bpmn2:lane>
<bpmn2:lane id="lane_A6bDCA" name="Sales">
<bpmn2:documentation id="documentation_l0BSxA"/>
</bpmn2:lane>
</bpmn2:laneSet>
<bpmn2:startEvent id="StartEvent_1" name="Start">
<bpmn2:documentation id="documentation_IUTaAQ"/>
<bpmn2:outgoing>sequenceFlow_mCJiSA</bpmn2:outgoing>
</bpmn2:startEvent>
<bpmn2:endEvent id="EndEvent_2" name="End">
<bpmn2:documentation id="documentation_mHDfBQ"/>
</bpmn2:endEvent>
<bpmn2:task id="task_yrC2dw" imixs:processid="2100" name="Contract Creation">
<bpmn2:extensionElements>
<imixs:item name="txteditorid" type="xs:string">
<imixs:value><![CDATA[form_basic]]></imixs:value>
</imixs:item>
<imixs:item name="txtname" type="xs:string">
<imixs:value><![CDATA[Rechnung erhalten]]></imixs:value>
</imixs:item>
<imixs:item name="txtimageurl" type="xs:string">
<imixs:value><![CDATA[typcn-business-card]]></imixs:value>
</imixs:item>
<imixs:item name="txtworkflowsummary" type="xs:string">
<imixs:value><![CDATA[<itemvalue>request.subject</itemvalue>]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:string">
<imixs:value><![CDATA[true]]></imixs:value>
</imixs:item>
<imixs:item name="txttype" type="xs:string">
<imixs:value><![CDATA[workitem]]></imixs:value>
</imixs:item>
<imixs:item name="namownershipnames" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="namaddreadaccess" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="namaddwriteaccess" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string">
<imixs:value><![CDATA[$Editor]]></imixs:value>
<imixs:value><![CDATA[process.assist]]></imixs:value>
</imixs:item>
<imixs:item name="keyaddwritefields" type="xs:string">
<imixs:value><![CDATA[process.assist]]></imixs:value>
<imixs:value><![CDATA[process.team]]></imixs:value>
<imixs:value><![CDATA[process.manager]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="documentation_BN3NHA"><![CDATA[Erstellung eines neuen Vertrags mit folgenden Pflichtfeldern: - **Vertragspartner** (Name, Adresse, Kontaktdaten, Vertragsnummer) - **Waren/Lieferungen** (Beschreibung, Menge, Einheit, Preis pro Einheit, Gesamtpreis, ggf. SKU/Artikelnummer) - **Lagerort** (falls relevant: Lagerstandort, Lagerverantwortlicher) - **Termine** (Liefertermin(e), Vertragslaufzeit, Fristen für Zahlungen/Meldungen) Optional: **Sonderbedingungen** (z. B. Rabatte, Penalties, Zahlungsmodalitäten).]]></bpmn2:documentation>
<bpmn2:incoming>sf-5</bpmn2:incoming>
<bpmn2:incoming>sequenceFlow_mCJiSA</bpmn2:incoming>
<bpmn2:outgoing>sf-8</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:task id="task_vJ0eNA" imixs:processid="2300" name="Approval by Management">
<bpmn2:extensionElements>
<imixs:item name="txteditorid" type="xs:string">
<imixs:value><![CDATA[form_basic]]></imixs:value>
</imixs:item>
<imixs:item name="txtname" type="xs:string">
<imixs:value><![CDATA[Rechnung erhalten]]></imixs:value>
</imixs:item>
<imixs:item name="txtimageurl" type="xs:string">
<imixs:value><![CDATA[typcn-business-card]]></imixs:value>
</imixs:item>
<imixs:item name="txtworkflowsummary" type="xs:string">
<imixs:value><![CDATA[<itemvalue>request.subject</itemvalue>]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:string">
<imixs:value><![CDATA[true]]></imixs:value>
</imixs:item>
<imixs:item name="txttype" type="xs:string">
<imixs:value><![CDATA[workitem]]></imixs:value>
</imixs:item>
<imixs:item name="namownershipnames" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="namaddreadaccess" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="namaddwriteaccess" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string">
<imixs:value><![CDATA[$Editor]]></imixs:value>
<imixs:value><![CDATA[process.assist]]></imixs:value>
</imixs:item>
<imixs:item name="keyaddwritefields" type="xs:string">
<imixs:value><![CDATA[process.assist]]></imixs:value>
<imixs:value><![CDATA[process.team]]></imixs:value>
<imixs:value><![CDATA[process.manager]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="documentation_6PFUVg"><![CDATA[Freigabe des Vertrags unter Berücksichtigung: - **Finanzielle Auswirkungen** (Budget, Liquidität, Forecast) - **Strategische Bedeutung** (Neukunde, Langfristpartner) - **Risikoanalyse** (Bonität des Partners, Marktrisiken)]]></bpmn2:documentation>
<bpmn2:incoming>sequenceFlow_4076SQ</bpmn2:incoming>
</bpmn2:task>
<bpmn2:task id="task_XQfsfg" imixs:processid="2400" name="Contract Execution">
<bpmn2:extensionElements>
<imixs:item name="txteditorid" type="xs:string">
<imixs:value><![CDATA[form_basic]]></imixs:value>
</imixs:item>
<imixs:item name="txtname" type="xs:string">
<imixs:value><![CDATA[Rechnung erhalten]]></imixs:value>
</imixs:item>
<imixs:item name="txtimageurl" type="xs:string">
<imixs:value><![CDATA[typcn-business-card]]></imixs:value>
</imixs:item>
<imixs:item name="txtworkflowsummary" type="xs:string">
<imixs:value><![CDATA[<itemvalue>request.subject</itemvalue>]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:string">
<imixs:value><![CDATA[true]]></imixs:value>
</imixs:item>
<imixs:item name="txttype" type="xs:string">
<imixs:value><![CDATA[workitem]]></imixs:value>
</imixs:item>
<imixs:item name="namownershipnames" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="namaddreadaccess" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="namaddwriteaccess" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string">
<imixs:value><![CDATA[$Editor]]></imixs:value>
<imixs:value><![CDATA[process.assist]]></imixs:value>
</imixs:item>
<imixs:item name="keyaddwritefields" type="xs:string">
<imixs:value><![CDATA[process.assist]]></imixs:value>
<imixs:value><![CDATA[process.team]]></imixs:value>
<imixs:value><![CDATA[process.manager]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="documentation_ds3A0w"><![CDATA[**Finaler Schritt zur Vertragsaktivierung:** - **Vertragsunterzeichnung** (digital/physisch) durch beide Parteien. - **Datenaktualisierung im System**: - **Vertragspartner** → CRM/ERP (z. B. SAP, Salesforce). - **Waren/Lieferungen** → Lagerverwaltung/Logistik (z. B. Warehouse-Management-System). - **Termine** → Kalender/Projektmanagement (z. B. Microsoft Project, Jira). - **Finanzen** → Buchhaltung (Rechnungslauf, Zahlungspläne). - **Lagerort** → Bei physischen Gütern: Einlagerung und Zuordnung (z. B. per Barcode).]]></bpmn2:documentation>
</bpmn2:task>
<bpmn2:task id="task_GgAr6w" imixs:processid="2900" name="Contract Completed">
<bpmn2:extensionElements>
<imixs:item name="txteditorid" type="xs:string">
<imixs:value><![CDATA[form_basic]]></imixs:value>
</imixs:item>
<imixs:item name="txtname" type="xs:string">
<imixs:value><![CDATA[Rechnung erhalten]]></imixs:value>
</imixs:item>
<imixs:item name="txtimageurl" type="xs:string">
<imixs:value><![CDATA[typcn-business-card]]></imixs:value>
</imixs:item>
<imixs:item name="txtworkflowsummary" type="xs:string">
<imixs:value><![CDATA[<itemvalue>request.subject</itemvalue>]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:string">
<imixs:value><![CDATA[true]]></imixs:value>
</imixs:item>
<imixs:item name="txttype" type="xs:string">
<imixs:value><![CDATA[workitem]]></imixs:value>
</imixs:item>
<imixs:item name="namownershipnames" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="namaddreadaccess" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="namaddwriteaccess" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string">
<imixs:value><![CDATA[$Editor]]></imixs:value>
<imixs:value><![CDATA[process.assist]]></imixs:value>
</imixs:item>
<imixs:item name="keyaddwritefields" type="xs:string">
<imixs:value><![CDATA[process.assist]]></imixs:value>
<imixs:value><![CDATA[process.team]]></imixs:value>
<imixs:value><![CDATA[process.manager]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="documentation_uK2mxw"><![CDATA[**Vertragsbeendigung:** - Kündigungsfristen einhalten. - **Liquidation**: - Offene Rechnungen prüfen (Zahlungseingang/Stornierung). - Lagerbestände bereinigen (Rücklieferung/Rücknahme). - **Dokumentation**: - Grund der Kündigung festhalten (für zukünftige Entscheidungen). - Vertrag aus dem System löschen.]]></bpmn2:documentation>
<bpmn2:outgoing>sf-44</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:task id="task_0W5Llw" imixs:processid="2990" name="Request/Contract Rejected">
<bpmn2:extensionElements>
<imixs:item name="txteditorid" type="xs:string">
<imixs:value><![CDATA[form_basic]]></imixs:value>
</imixs:item>
<imixs:item name="txtname" type="xs:string">
<imixs:value><![CDATA[Rechnung erhalten]]></imixs:value>
</imixs:item>
<imixs:item name="txtimageurl" type="xs:string">
<imixs:value><![CDATA[typcn-business-card]]></imixs:value>
</imixs:item>
<imixs:item name="txtworkflowsummary" type="xs:string">
<imixs:value><![CDATA[<itemvalue>request.subject</itemvalue>]]></imixs:value>
</imixs:item>
<imixs:item name="keyupdateacl" type="xs:string">
<imixs:value><![CDATA[true]]></imixs:value>
</imixs:item>
<imixs:item name="txttype" type="xs:string">
<imixs:value><![CDATA[workitem]]></imixs:value>
</imixs:item>
<imixs:item name="namownershipnames" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="namaddreadaccess" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="namaddwriteaccess" type="xs:string">
<imixs:value/>
</imixs:item>
<imixs:item name="keyownershipfields" type="xs:string">
<imixs:value><![CDATA[$Editor]]></imixs:value>
<imixs:value><![CDATA[process.assist]]></imixs:value>
</imixs:item>
<imixs:item name="keyaddwritefields" type="xs:string">
<imixs:value><![CDATA[process.assist]]></imixs:value>
<imixs:value><![CDATA[process.team]]></imixs:value>
<imixs:value><![CDATA[process.manager]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:documentation id="documentation_XDZRNw"><![CDATA[**Abgelehter Vertrag oder Anfrage:** - Grund für die Ablehnung dokumentieren (z. B. "Partner nicht solvent"). - Feedback an Initiator geben. - END]]></bpmn2:documentation>
<bpmn2:incoming>sf-4</bpmn2:incoming>
<bpmn2:incoming>sf-9</bpmn2:incoming>
<bpmn2:incoming>sf-45</bpmn2:incoming>
</bpmn2:task>
<bpmn2:intermediateCatchEvent id="event_5P6uhg" imixs:activityid="20" name="Reject Request">
<bpmn2:documentation id="documentation_FFCYJw"/>
<bpmn2:outgoing>sf-4</bpmn2:outgoing>
</bpmn2:intermediateCatchEvent>
<bpmn2:intermediateCatchEvent id="event_J0JjAg" imixs:activityid="10" name="Save Draft">
<bpmn2:documentation id="documentation_2D4qfg"/>
<bpmn2:outgoing>sf-5</bpmn2:outgoing>
</bpmn2:intermediateCatchEvent>
<bpmn2:intermediateCatchEvent id="event_cjoSqg" imixs:activityid="20" name="Submit for Review">
<bpmn2:documentation id="documentation_44KEYA"/>
<bpmn2:incoming>sf-6</bpmn2:incoming>
<bpmn2:outgoing>sequenceFlow_4076SQ</bpmn2:outgoing>
</bpmn2:intermediateCatchEvent>
<bpmn2:intermediateCatchEvent id="event_1FAZgA" imixs:activityid="30" name="Cancel Request">
<bpmn2:documentation id="documentation_ysbsYg"/>
<bpmn2:incoming>sequenceFlow_Jp2oQQ</bpmn2:incoming>
<bpmn2:outgoing>sf-9</bpmn2:outgoing>
</bpmn2:intermediateCatchEvent>
<bpmn2:intermediateCatchEvent id="event_0k30Ug" imixs:activityid="10" name="Request Adjustments">
<bpmn2:documentation id="documentation_gmDYqA"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:intermediateCatchEvent id="event_Xdll0Q" imixs:activityid="20" name="Final Approval">
<bpmn2:documentation id="documentation_md4VQA"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:intermediateCatchEvent id="event_W0tDdA" imixs:activityid="30" name="Decline Approval">
<bpmn2:documentation id="documentation_mRacqQ"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:intermediateCatchEvent id="event_yurw7A" imixs:activityid="10" name="Completed">
<bpmn2:documentation id="documentation_sqwDNg"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:intermediateCatchEvent id="event_c4BtJg" imixs:activityid="20" name="Execution Failed">
<bpmn2:documentation id="documentation_thihzw"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:intermediateCatchEvent id="event_zpkT5A" imixs:activityid="20" name="Correction Needed">
<bpmn2:documentation id="documentation_iUtChg"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:intermediateCatchEvent id="event_v7oUjw" imixs:activityid="10" name="Termination Completed">
<bpmn2:documentation id="documentation_bwy4xQ"/>
<bpmn2:incoming>sf-44</bpmn2:incoming>
<bpmn2:outgoing>sf-45</bpmn2:outgoing>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="sf-4" sourceRef="event_5P6uhg" targetRef="task_0W5Llw">
<bpmn2:documentation id="documentation_rBwcmQ"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="sf-5" sourceRef="event_J0JjAg" targetRef="task_yrC2dw">
<bpmn2:documentation id="documentation_QaeCdA"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="sf-6" sourceRef="gateway_SVo89A" targetRef="event_cjoSqg">
<bpmn2:documentation id="documentation_BUeEdQ"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="sf-8" sourceRef="task_yrC2dw" targetRef="gateway_SVo89A">
<bpmn2:documentation id="documentation_Sd5bvw"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="sf-9" sourceRef="event_1FAZgA" targetRef="task_0W5Llw">
<bpmn2:documentation id="documentation_bJindA"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="sf-44" sourceRef="task_GgAr6w" targetRef="event_v7oUjw">
<bpmn2:documentation id="documentation_to0tvg"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="sf-45" sourceRef="event_v7oUjw" targetRef="task_0W5Llw">
<bpmn2:documentation id="documentation_CjUGog"/>
</bpmn2:sequenceFlow>
<bpmn2:intermediateCatchEvent id="event_H7qtPg" imixs:activityid="20" name="Create Kundenauftrag">
<bpmn2:documentation id="documentation_w9TwIQ"/>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="sequenceFlow_mCJiSA" sourceRef="StartEvent_1" targetRef="task_yrC2dw">
<bpmn2:documentation id="documentation_rnZlMw"/>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="sequenceFlow_4076SQ" sourceRef="event_cjoSqg" targetRef="task_vJ0eNA">
<bpmn2:documentation id="documentation_2UZmwA"/>
</bpmn2:sequenceFlow>
<bpmn2:eventBasedGateway gatewayDirection="Diverging" id="gateway_SVo89A" name="">
<bpmn2:documentation id="documentation_C4eyaQ"/>
<bpmn2:incoming>sf-8</bpmn2:incoming>
<bpmn2:outgoing>sequenceFlow_Jp2oQQ</bpmn2:outgoing>
<bpmn2:outgoing>sf-6</bpmn2:outgoing>
</bpmn2:eventBasedGateway>
<bpmn2:sequenceFlow id="sequenceFlow_Jp2oQQ" sourceRef="gateway_SVo89A" targetRef="event_1FAZgA">
<bpmn2:documentation id="documentation_Wzw9Yg"/>
</bpmn2:sequenceFlow>
</bpmn2:process>
<bpmn2:process id="process_2" name="Default Process" processType="Public">
<bpmn2:documentation id="documentation_imRbaw"/>
<bpmn2:extensionElements>
<open-bpmn:auto-align>true</open-bpmn:auto-align>
</bpmn2:extensionElements>
</bpmn2:process>
<bpmn2:signal id="signal_3" name="org.imixs.ai.workflow.OpenAIAPIAdapter"/>
<bpmn2:signal id="signal_4" name="org.imixs.ai.rag.RAGRetrievalAdapter"/>
<bpmn2:message id="message_1" name="Message 1">
<bpmn2:documentation id="documentation_lq3hSg"/>
</bpmn2:message>
<bpmn2:signal id="signal_5" name="org.imixs.ai.workflow.ImixsAIAssistantAdapter"/>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane bpmnElement="Collaboration_1" id="BPMNPlane_Process_1">
<bpmndi:BPMNShape bpmnElement="Participant_1" id="BPMNShape_Participant_1" isHorizontal="true">
<dc:Bounds height="2300.0" width="4430.0" x="130.0" y="90.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="Lane_1" id="BPMNShape_Lane_1" isHorizontal="true">
<dc:Bounds height="420.25001525878906" width="4400.0" x="160.0" y="90.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="StartEvent_1" id="BPMNShape_StartEvent_1">
<dc:Bounds height="36.0" width="36.0" x="217.0" y="177.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_1" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="20.0" width="100.0" x="189.5" y="214.10797119140625"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_TextAnnotation_1">
<dc:Bounds height="73.0" width="131.0" x="130.0" y="581.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_30">
<dc:Bounds height="67.0" width="119.0" x="136.0" y="581.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="EndEvent_2" id="BPMNShape_EndEvent_2">
<dc:Bounds height="36.0" width="36.0" x="1027.0" y="197.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_110" labelStyle="BPMNLabelStyle_1">
<dc:Bounds height="20.0" width="100.0" x="1001.138671875" y="235.10791015625"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="participant_hnZfjA" id="BPMNShape_iHhp5Q">
<dc:Bounds height="210.0" width="800.0" x="0.0" y="0.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="message_1" id="BPMNShape_5X9D7w">
<dc:Bounds height="20.0" width="30.0" x="80.0" y="10.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_20MvBw">
<dc:Bounds height="20.0" width="100.0" x="45.86090087890625" y="37.66443634033203"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="lane_5RftUw" id="BPMNShape_Lane_EXH7Fg">
<dc:Bounds height="651.2500152587891" width="4400.0" x="160.0" y="510.25001525878906"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="lane_a0dlhQ" id="BPMNShape_Lane_lMjKqQ">
<dc:Bounds height="614.2500152587891" width="4400.0" x="160.0" y="1161.5000305175781"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="lane_A6bDCA" id="BPMNShape_Lane_ErklDA">
<dc:Bounds height="614.2500152587891" width="4400.0" x="160.0" y="1775.7500457763672"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="task_yrC2dw" id="BPMNShape_mtNu0w">
<dc:Bounds height="50.0" width="110.0" x="340.0" y="170.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="task_vJ0eNA" id="BPMNShape_VSjVPA">
<dc:Bounds height="50.0" width="110.0" x="980.0" y="670.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="task_XQfsfg" id="BPMNShape_Vk1kAw">
<dc:Bounds height="50.0" width="110.0" x="1540.0" y="1080.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="task_GgAr6w" id="BPMNShape_PSzHWw">
<dc:Bounds height="50.0" width="110.0" x="2260.0" y="1300.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="task_0W5Llw" id="BPMNShape_WjH04g">
<dc:Bounds height="50.0" width="110.0" x="2420.0" y="400.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="event_5P6uhg" id="BPMNShape_1ACHNw">
<dc:Bounds height="36.0" width="36.0" x="1227.0" y="397.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_IsYLwA">
<dc:Bounds height="20.0" width="100.0" x="1195.0" y="436.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="event_J0JjAg" id="BPMNShape_zrh0rg">
<dc:Bounds height="36.0" width="36.0" x="377.0" y="97.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_fwqgDg">
<dc:Bounds height="20.0" width="100.0" x="345.0" y="136.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="event_cjoSqg" id="BPMNShape_POp4IQ">
<dc:Bounds height="36.0" width="36.0" x="827.0" y="367.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_zhSm0g">
<dc:Bounds height="20.0" width="100.0" x="795.0" y="406.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="event_1FAZgA" id="BPMNShape_bSO6tQ">
<dc:Bounds height="36.0" width="36.0" x="897.0" y="177.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_gAvpBQ">
<dc:Bounds height="20.0" width="100.0" x="865.0" y="216.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="event_0k30Ug" id="BPMNShape_Zn0P3A">
<dc:Bounds height="36.0" width="36.0" x="757.0" y="667.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_umknQA">
<dc:Bounds height="20.0" width="100.0" x="725.0" y="706.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="event_Xdll0Q" id="BPMNShape_Eq39Kg">
<dc:Bounds height="36.0" width="36.0" x="1317.0" y="920.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_G1WeRA">
<dc:Bounds height="20.0" width="100.0" x="1285.0" y="959.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="event_W0tDdA" id="BPMNShape_5yHEow">
<dc:Bounds height="36.0" width="36.0" x="1407.0" y="857.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_HkKcBw">
<dc:Bounds height="20.0" width="100.0" x="1375.0" y="896.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="event_yurw7A" id="BPMNShape_rWONBg">
<dc:Bounds height="36.0" width="36.0" x="1887.0" y="1147.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_s0S0ng">
<dc:Bounds height="20.0" width="100.0" x="1855.0" y="1186.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="event_c4BtJg" id="BPMNShape_iclF5g">
<dc:Bounds height="36.0" width="36.0" x="1857.0" y="1047.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_Gi1kIA">
<dc:Bounds height="20.0" width="100.0" x="1825.0" y="1086.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="event_zpkT5A" id="BPMNShape_TbcBcA">
<dc:Bounds height="36.0" width="36.0" x="1487.0" y="1317.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_9UFuzg">
<dc:Bounds height="20.0" width="100.0" x="1455.0" y="1356.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="event_v7oUjw" id="BPMNShape_p2C5FA">
<dc:Bounds height="36.0" width="36.0" x="2727.0" y="1357.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_DFJutA">
<dc:Bounds height="20.0" width="100.0" x="2695.0" y="1396.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="event_H7qtPg" id="BPMNShape_zXH5Wg">
<dc:Bounds height="36.0" width="36.0" x="1317.0" y="1087.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_BcZSCQ">
<dc:Bounds height="20.0" width="100.0" x="1285.0" y="1126.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="gateway_SVo89A" id="BPMNShape_rffh8A">
<dc:Bounds height="50.0" width="50.0" x="600.0" y="170.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_eaxusQ">
<dc:Bounds height="20.0" width="100.0" x="575.0" y="223.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sf-4" id="BPMNEdge_oO9ZTA" sourceElement="BPMNShape_1ACHNw" targetElement="BPMNShape_WjH04g">
<di:waypoint x="1263.0" y="415.0"/>
<di:waypoint x="1267.0" y="415.0"/>
<di:waypoint x="1267.0" y="425.0"/>
<di:waypoint x="2420.0" y="425.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sf-5" id="BPMNEdge_GZrbVw" sourceElement="BPMNShape_zrh0rg" targetElement="BPMNShape_mtNu0w">
<di:waypoint x="395.0" y="133.0"/>
<di:waypoint x="395.0" y="170.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sf-6" id="BPMNEdge_SKcIKQ" sourceElement="BPMNShape_rffh8A" targetElement="BPMNShape_POp4IQ">
<di:waypoint x="625.0" y="220.0"/>
<di:waypoint x="625.0" y="385.0"/>
<di:waypoint x="827.0" y="385.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sf-8" id="BPMNEdge_J17Pgg" sourceElement="BPMNShape_mtNu0w" targetElement="BPMNShape_rffh8A">
<di:waypoint x="450.0" y="195.0"/>
<di:waypoint x="600.0" y="195.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sf-9" id="BPMNEdge_oJE2uQ" sourceElement="BPMNShape_bSO6tQ" targetElement="BPMNShape_WjH04g">
<di:waypoint x="933.0" y="195.0"/>
<di:waypoint x="1677.0" y="195.0"/>
<di:waypoint x="1677.0" y="425.0"/>
<di:waypoint x="2420.0" y="425.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sf-44" id="BPMNEdge_IzbEkA" sourceElement="BPMNShape_PSzHWw" targetElement="BPMNShape_p2C5FA">
<di:waypoint x="2370.0" y="1329.0"/>
<di:waypoint x="3230.0" y="1329.0"/>
<di:waypoint x="3230.0" y="1375.0"/>
<di:waypoint x="2763.0" y="1375.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sf-45" id="BPMNEdge_TxZz3A" sourceElement="BPMNShape_p2C5FA" targetElement="BPMNShape_WjH04g">
<di:waypoint x="2763.0" y="1375.0"/>
<di:waypoint x="3282.0" y="1375.0"/>
<di:waypoint x="2474.0" y="1375.0"/>
<di:waypoint x="2474.0" y="450.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_mCJiSA" id="BPMNEdge_m1mtfw" sourceElement="BPMNShape_StartEvent_1" targetElement="BPMNShape_mtNu0w">
<di:waypoint x="253.0" y="195.0"/>
<di:waypoint x="340.0" y="195.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_4076SQ" id="BPMNEdge_8zpyew" sourceElement="BPMNShape_POp4IQ" targetElement="BPMNShape_VSjVPA">
<di:waypoint x="863.0" y="385.0"/>
<di:waypoint x="917.0" y="385.0"/>
<di:waypoint x="917.0" y="695.0"/>
<di:waypoint x="980.0" y="695.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_Jp2oQQ" id="BPMNEdge_HivQDQ" sourceElement="BPMNShape_rffh8A" targetElement="BPMNShape_bSO6tQ">
<di:waypoint x="650.0" y="195.0"/>
<di:waypoint x="897.0" y="195.0"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
<bpmndi:BPMNLabelStyle id="BPMNLabelStyle_1">
<dc:Font name="arial" size="9.0"/>
</bpmndi:BPMNLabelStyle>
</bpmndi:BPMNDiagram>
</bpmn2:definitions>

View file

@ -0,0 +1,144 @@
START
|
|- [Task: 2000] **New Contract Request**
Team: **Contract Management**
Description:
Ein neuer Vertragsanfrag wird eingereicht (z. B. durch Vertrieb oder Einkauf). Grundlegende Daten wie Vertragstyp (Kauf/Verkauf/Leasing) und Verantwortlicher müssen erfasst werden.
|-- [Event: 10] **Forward to Contract Creation** --> [Task: 2100] **Contract Creation**
|-- [Event: 20] **Reject Request** --> [Task: 2990] **Request Rejected**
|
|- [Task: 2100] **Contract Creation**
Team: **Contract Management**
Description:
Erstellung eines neuen Vertrags mit folgenden Pflichtfeldern:
- **Vertragspartner** (Name, Adresse, Kontaktdaten, Vertragsnummer)
- **Waren/Lieferungen** (Beschreibung, Menge, Einheit, Preis pro Einheit, Gesamtpreis, ggf. SKU/Artikelnummer)
- **Lagerort** (falls relevant: Lagerstandort, Lagerverantwortlicher)
- **Termine** (Liefertermin(e), Vertragslaufzeit, Fristen für Zahlungen/Meldungen)
Optional: **Sonderbedingungen** (z. B. Rabatte, Penalties, Zahlungsmodalitäten).
|-- [Event: 10] **Save Draft** --> [Task: 2100] **Contract Creation** *(Iteration für Korrekturen)*
|-- [Event: 20] **Submit for Review** --> [Task: 2200] **Legal Review**
|-- [Event: 30] **Cancel Request** --> [Task: 2990] **Request Rejected**
|
|- [Task: 2200] **Legal Review**
Team: **Legal/Compliance**
Description:
Prüfung auf rechtliche Korrektheit und Vollständigkeit:
- Vertragsklauseln (AGB, Gewährleistungen, Haftung)
- Compliance mit internen Richtlinien (z. B. Risikobewertung bei neuen Partnern)
- Terminpläne (z. B. Prüfung von Fristen)
|-- [Event: 10] **Request Changes** --> [Task: 2100] **Contract Creation** *(Rückgabe zur Korrektur)*
|-- [Event: 20] **Approve Contract** --> [Task: 2300] **Approval by Management**
|-- [Event: 30] **Reject Contract** --> [Task: 2990] **Contract Rejected**
|
|- [Task: 2300] **Approval by Management**
Team: **Senior Management/Finance**
Description:
Freigabe des Vertrags unter Berücksichtigung:
- **Finanzielle Auswirkungen** (Budget, Liquidität, Forecast)
- **Strategische Bedeutung** (Neukunde, Langfristpartner)
- **Risikoanalyse** (Bonität des Partners, Marktrisiken)
|-- [Event: 10] **Request Adjustments** --> [Task: 2100] **Contract Creation** *(z. B. Preisanpassung)*
|-- [Event: 20] **Final Approval** --> [Task: 2400] **Contract Execution**
|-- [Event: 30] **Decline Approval** --> [Task: 2990] **Contract Rejected**
|
|- [Task: 2400] **Contract Execution**
Team: **Contract Management / Operations**
Description:
**Finaler Schritt zur Vertragsaktivierung:**
- **Vertragsunterzeichnung** (digital/physisch) durch beide Parteien.
- **Datenaktualisierung im System**:
- **Vertragspartner** → CRM/ERP (z. B. SAP, Salesforce).
- **Waren/Lieferungen** → Lagerverwaltung/Logistik (z. B. Warehouse-Management-System).
- **Termine** → Kalender/Projektmanagement (z. B. Microsoft Project, Jira).
- **Finanzen** → Buchhaltung (Rechnungslauf, Zahlungspläne).
- **Lagerort** → Bei physischen Gütern: Einlagerung und Zuordnung (z. B. per Barcode).
|-- [Event: 10] **Contract Signed** --> [Task: 2500] **Post-Contract Setup**
|-- [Event: 20] **Execution Failed** --> [Task: 2990] **Contract Rejected** *(z. B. Unterzeichnung gescheitert)*
|
|- [Task: 2500] **Post-Contract Setup**
Team: **Cross-Functional (Logistik, Sales, Finance)**
Description:
**Nachbereitung nach Vertragsunterzeichnung:**
- **Logistik**:
- Lagerbestände anpassen (bei Lieferverträgen).
- Lieferpläne erstellen (Termine, Routen, Verantwortliche).
- **Vertrieb**:
- Kundenkommunikation (Bestätigungsmail, nächste Schritte).
- **Finanzen**:
- Zahlungsbedingungen konfigurieren (z. B. Skonto, Raten).
- Budgetreservierungen freigeben.
- **Monitoring**:
- **KPIs** festlegen (z. B. Liefertreue, Zahlungseingänge).
- **Audit-Trail** für Nachverfolgung.
|-- [Event: 10] **Setup Completed** --> [Task: 2600] **Contract Active**
|-- [Event: 20] **Correction Needed** --> [Task: 2400] **Contract Execution** *(z. B. Lagerfehler korrigieren)*
|
|- [Task: 2600] **Contract Active**
Team: **Contract Owner (z. B. Account Manager)**
Description:
**Laufender Vertrag:**
- **Regelmäßige Überprüfungen**:
- Terminpläne (Lieferungen, Zahlungen, Kündigungsfristen).
- Performance des Partners (z. B. Lieferzuverlässigkeit).
- **Änderungsmanagement**:
- Anpassungen (z. B. Mengenänderungen, Preisanpassungen) müssen neu freigegeben werden (→ Rückkehr zu [Task: 2100]).
|-- [Event: 10] **Renewal Due** --> [Task: 2700] **Contract Renewal**
|-- [Event: 20] **Termination Requested** --> [Task: 2900] **Contract Termination**
|-- [Event: 30] **Escalation** --> [Task: 2800] **Contract Dispute**
|
|- [Task: 2700] **Contract Renewal**
Team: **Contract Management / Sales**
Description:
**Vertragsverlängerung/Anpassung:**
- Analyse der Vertragsperformance (z. B. Umsatz, Partnerzufriedenheit).
- Angebot für Verlängerung oder neue Bedingungen erstellen.
- Prozess wie [Task: 2100] **Contract Creation** wiederholen.
|-- [Event: 10] **Renewal Approved** --> [Task: 2600] **Contract Active**
|-- [Event: 20] **Renewal Rejected** --> [Task: 2900] **Contract Termination**
|
|- [Task: 2800] **Contract Dispute**
Team: **Legal / Dispute Resolution**
Description:
**Konfliktmanagement:**
- Ursache analysieren (z. B. nicht erfüllte Liefertermine, Preisstreitigkeiten).
- Mediation oder rechtliche Schritte einleiten.
- Bei Einigung: Anpassung des Vertrags ([Task: 2100]).
- Bei Scheitern: [Task: 2900] **Contract Termination**.
|-- [Event: 10] **Dispute Resolved** --> [Task: 2600] **Contract Active**
|-- [Event: 20] **Termination Due to Dispute** --> [Task: 2900] **Contract Termination**
|
|- [Task: 2900] **Contract Termination**
Team: **Contract Management / Legal**
Description:
**Vertragsbeendigung:**
- Kündigungsfristen einhalten.
- **Liquidation**:
- Offene Rechnungen prüfen (Zahlungseingang/Stornierung).
- Lagerbestände bereinigen (Rücklieferung/Rücknahme).
- **Dokumentation**:
- Grund der Kündigung festhalten (für zukünftige Entscheidungen).
- Vertrag aus dem System löschen.
|-- [Event: 10] **Termination Completed** --> [Task: 2990] **Process Ended**
|
|- [Task: 2990] **Request/Contract Rejected**
Team: **Contract Management**
Description:
**Abgelehter Vertrag oder Anfrage:**
- Grund für die Ablehnung dokumentieren (z. B. "Partner nicht solvent").
- Feedback an Initiator geben.
|-- [Event: 10] **Close Case** --> END
|
|- END
Description: **Workflow abgeschlossen** (Vertrag aktiv, beendet oder abgelehnt).

View file

@ -1,73 +1,78 @@
Business Process: Supplier Compliance Check
Business Process: Risk Management
START
|
|- [Task: 2000] Supplier Data Input
| Team: Purchasing
|- [Task: 1000] Risk Identification
| Team: Risk Owner (Operational Unit)
| Description:
| A new potential supplier needs to be checked for compliance. All relevant data (e.g., company details, location, product category) is initially entered or imported into the system.
| |-- [Event: 10] Submit for Initial Check (Data complete) --> [Task: 2100] Initial Compliance Screening
| |-- [Event: 20] Hold (Data incomplete/waiting for further information) --> [Task: 2000] Supplier Data Input
| A potential risk has been identified within an operational unit. The Risk Owner captures basic data (Category, Description, Early Warning Indicators) to initiate the process in accordance with KonTraG.
| |-- [Event: 10] Submit Proposal (Forward to Central Risk Management) --> [Task: 1100] Validation
| |-- [Event: 20] Discard (Draft deleted) --> [Task: 1990] Deleted
|
|- [Task: 2100] Initial Compliance Screening
| Team: Compliance Department
|- [Task: 1100] Validation
| Team: Central Risk Management
| Description:
| The Compliance Department performs an automated and manual screening based on external and internal blacklists, sanctions lists, and basic regulatory requirements.
| |-- [Event: 10] Cleared for DDQ (Initial screening passed) --> [Task: 2200] Send Due Diligence Questionnaire (DDQ)
| |-- [Event: 20] Needs Manual Review (Potential red flags found, requires in-depth investigation) --> [Task: 2150] Detailed Compliance Review
| |-- [Event: 30] Immediate Reject (Severe red flag or sanction match) --> [Task: 2900] Rejected
| Central function checks if the identified issued qualifies as a relevant risk or if it is a duplicate.
| |-- [Event: 10] Confirm Risk (Risk is valid, proceed to assessment) --> [Task: 1200] Gross Assessment
| |-- [Event: 20] Reject (Not a risk or duplicate) --> [Task: 1900] Archived
| |-- [Event: 30] Request Info (Send back to Owner for details) --> [Task: 1000] Risk Identification
|
|- [Task: 2150] Detailed Compliance Review
| Team: Compliance Department
|- [Task: 1200] Gross Assessment
| Team: Risk Owner (Operational Unit)
| Description:
| Manual and in-depth investigation of potential risks identified during the initial screening. This involves checking public records and specific compliance databases.
| |-- [Event: 10] Cleared for DDQ (Review successful) --> [Task: 2200] Send Due Diligence Questionnaire (DDQ)
| |-- [Event: 20] Request More Info (Information is missing from supplier) --> [Task: 2250] Wait for Supplier Response
| |-- [Event: 30] Final Reject (Risk confirmed after review) --> [Task: 2900] Rejected
| Quantitative assessment of the risk WITHOUT considering planned or existing measures. Impact and Probability are estimated to determine the Gross Risk Score.
| |-- [Event: 10] Save Gross Data (Proceed to Measure Definition) --> [Task: 1300] Measure Definition
|
|- [Task: 2200] Send Due Diligence Questionnaire (DDQ)
| Team: Compliance Department
|- [Task: 1300] Measure Definition
| Team: Risk Owner (Operational Unit)
| Description:
| The system automatically sends the Due Diligence Questionnaire (DDQ) to the supplier's contact person.
| |-- [Event: 10] DDQ Sent (Waiting for supplier response) --> [Task: 2250] Wait for Supplier Response
| Definition of risk mitigating measures (Avoid, Reduce, Transfer, Accept). Documentation of costs and responsibilities for these measures.
| |-- [Event: 10] Measures Defined (Proceed to Net Assessment) --> [Task: 1400] Net Assessment
| |-- [Event: 20] Update Assessment (Go back to Gross Assessment) --> [Task: 1200] Gross Assessment
|
|- [Task: 2250] Wait for Supplier Response
| Team: System / Purchasing
|- [Task: 1400] Net Assessment
| Team: Risk Owner (Operational Unit)
| Description:
| The process waits for the supplier to submit the completed DDQ. Automated reminders are sent if the deadline approaches.
| |-- [Event: 10] DDQ Received (Supplier submitted the questionnaire) --> [Task: 2300] Review DDQ
| |-- [Event: 20] Send Reminder (Automated or manual reminder sent) --> [Task: 2250] Wait for Supplier Response
| |-- [Event: 30] Timeout (DDQ not received within the deadline) --> [Task: 2900] Rejected
| Re-evaluation of Impact and Probability taking the defined measures into account (Residual Risk). Crucial for IDW PS 340 compliance.
| |-- [Event: 10] Submit for Aggregation (Forward to Central RM) --> [Task: 1500] Aggregation & Analysis
|
|- [Task: 2300] Review DDQ
| Team: Compliance Department
|- [Task: 1500] Aggregation & Analysis
| Team: Central Risk Management
| Description:
| Compliance checks the submitted DDQ for completeness and verifies the provided answers.
| |-- [Event: 10] Accept DDQ (All questions answered and satisfactory) --> [Task: 2400] Final Approval
| |-- [Event: 20] Request Clarification (Follow-up questions needed for specific answers) --> [Task: 2250] Wait for Supplier Response
| |-- [Event: 30] Reject DDQ (High compliance risk identified in answers) --> [Task: 2900] Rejected
| The risk is analyzed in the context of the total risk portfolio (Risk Aggregation/Monte Carlo Simulation) to check against the company's Risk Bearing Capacity.
| |-- [Event: 10] Approve (Risk within appetite, standard monitoring) --> [Task: 1600] Monitoring
| |-- [Event: 20] Insufficient Mitigation (Measures not enough, send back) --> [Task: 1300] Measure Definition
| |-- [Event: 30] Critical Escalation (Threat to existence, forward to Board) --> [Task: 1550] Board Review
|
|- [Task: 2400] Final Approval
| Team: Compliance Management
|- [Task: 1550] Board Review
| Team: Management Board / Risk Committee
| Description:
| Final sign-off by Compliance Management based on the DDQ and all previous screenings.
| |-- [Event: 10] Approved (Supplier cleared for onboarding) --> [Task: 2800] Approved
| |-- [Event: 20] Rejected (Compliance risk too high) --> [Task: 2900] Rejected
| High-level decision required. Risk exceeds risk bearing capacity or is a "bestandsgefährdendes Risiko" (§91 Abs. 2 AktG).
| |-- [Event: 10] Accept Risk (Special approval granted) --> [Task: 1600] Monitoring
| |-- [Event: 20] Demand Action (Force new measures) --> [Task: 1300] Measure Definition
|
|- [Task: 2800] Approved
| Team: Purchasing
|- [Task: 1600] Monitoring
| Team: Risk Owner (Operational Unit)
| Description:
| Supplier compliance check completed and approved. Supplier status is updated, and the process moves to supplier onboarding (e.g., contract negotiation).
| |-- [Event: 10] Close Process (Compliance status recorded) --> [Task: 2990] Completed
| Continuous surveillance of the risk and the effectiveness of measures. Periodic review (e.g., quarterly).
| |-- [Event: 10] Report: No Change (Keep monitoring) --> [Task: 1600] Monitoring
| |-- [Event: 20] Risk Changed (Values or measures changed) --> [Task: 1200] Gross Assessment
| |-- [Event: 30] Risk Obsolete (Risk no longer exists) --> [Task: 1800] Closure Review
|
|- [Task: 2900] Rejected
| Team: Compliance Department
|- [Task: 1800] Closure Review
| Team: Central Risk Management
| Description:
| The supplier was rejected at a specific stage due to non-compliance issues. Purchasing is notified.
| |-- [Event: 10] Add Comment --> [Task: 2900] Rejected
| |-- [Event: 20] Close Process (Rejection reason recorded) --> [Task: 2990] Completed
| Final check if the risk can really be closed.
| |-- [Event: 10] Close Risk (Archive) --> [Task: 1900] Archived
| |-- [Event: 20] Deny Closure (Keep active) --> [Task: 1600] Monitoring
|
END
|- [Task: 1900] Archived
| Team: System
| Description:
| Risk is closed but kept for audit trails and historical data analysis.
| |-- [Event: 10] Reactivate --> [Task: 1100] Validation
|
|- [Task: 2990] Completed
END
|
|- [Task: 1990] Deleted
|

View file

@ -0,0 +1,77 @@
Business Process: Risk Management Cycle (IDW PS 340)
START
|
|- [Task: 1000] Risk Identification
| Team: Risk Owner (Operational Unit)
| Description:
| A potential risk has been identified within an operational unit. The Risk Owner captures basic data (Category, Description, Early Warning Indicators) to initiate the process in accordance with KonTraG.
| |-- [Event: 10] Submit Proposal (Forward to Central Risk Management) --> [Task: 1100] Validation
| |-- [Event: 20] Discard (Draft deleted) --> [Task: 1990] Deleted
|
|- [Task: 1100] Validation
| Team: Central Risk Management
| Description:
| Central function checks if the identified issue qualifies as a relevant risk or if it is a duplicate.
| |-- [Event: 10] Confirm Risk (Risk is valid, proceed to assessment) --> [Task: 1200] Gross Assessment
| |-- [Event: 20] Reject (Not a risk or duplicate) --> [Task: 1900] Archived
| |-- [Event: 30] Request Info (Send back to Owner for details) --> [Task: 1000] Risk Identification
|
|- [Task: 1200] Gross Assessment
| Team: Risk Owner (Operational Unit)
| Description:
| Quantitative assessment of the risk WITHOUT considering planned or existing measures. Impact and Probability are estimated to determine the Gross Risk Score.
| |-- [Event: 10] Save Gross Data (Proceed to Measure Definition) --> [Task: 1300] Measure Definition
|
|- [Task: 1300] Measure Definition
| Team: Risk Owner (Operational Unit)
| Description:
| Definition of risk mitigating measures (Avoid, Reduce, Transfer, Accept). Documentation of costs and responsibilities for these measures.
| |-- [Event: 10] Measures Defined (Proceed to Net Assessment) --> [Task: 1400] Net Assessment
| |-- [Event: 20] Update Assessment (Go back to Gross Assessment) --> [Task: 1200] Gross Assessment
|
|- [Task: 1400] Net Assessment
| Team: Risk Owner (Operational Unit)
| Description:
| Re-evaluation of Impact and Probability taking the defined measures into account (Residual Risk). Crucial for IDW PS 340 compliance.
| |-- [Event: 10] Submit for Aggregation (Forward to Central RM) --> [Task: 1500] Aggregation & Analysis
|
|- [Task: 1500] Aggregation & Analysis
| Team: Central Risk Management
| Description:
| The risk is analyzed in the context of the total risk portfolio (Risk Aggregation/Monte Carlo Simulation) to check against the company's Risk Bearing Capacity.
| |-- [Event: 10] Approve (Risk within appetite, standard monitoring) --> [Task: 1600] Monitoring
| |-- [Event: 20] Insufficient Mitigation (Measures not enough, send back) --> [Task: 1300] Measure Definition
| |-- [Event: 30] Critical Escalation (Threat to existence, forward to Board) --> [Task: 1550] Board Review
|
|- [Task: 1550] Board Review
| Team: Management Board / Risk Committee
| Description:
| High-level decision required. Risk exceeds risk bearing capacity or is a "bestandsgefährdendes Risiko" (§91 Abs. 2 AktG).
| |-- [Event: 10] Accept Risk (Special approval granted) --> [Task: 1600] Monitoring
| |-- [Event: 20] Demand Action (Force new measures) --> [Task: 1300] Measure Definition
|
|- [Task: 1600] Monitoring
| Team: Risk Owner (Operational Unit)
| Description:
| Continuous surveillance of the risk and the effectiveness of measures. Periodic review (e.g., quarterly).
| |-- [Event: 10] Report: No Change (Keep monitoring) --> [Task: 1600] Monitoring
| |-- [Event: 20] Risk Changed (Values or measures changed) --> [Task: 1200] Gross Assessment
| |-- [Event: 30] Risk Obsolete (Risk no longer exists) --> [Task: 1800] Closure Review
|
|- [Task: 1800] Closure Review
| Team: Central Risk Management
| Description:
| Final check if the risk can really be closed.
| |-- [Event: 10] Close Risk (Archive) --> [Task: 1900] Archived
| |-- [Event: 20] Deny Closure (Keep active) --> [Task: 1600] Monitoring
|
|- [Task: 1900] Archived
| Team: System
| Description:
| Risk is closed but kept for audit trails and historical data analysis.
| |-- [Event: 10] Reactivate --> [Task: 1100] Validation
|
END
|
|- [Task: 1990] Deleted

View file

@ -0,0 +1,146 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<bpmn2:definitions xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:BPMN2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:imixs="http://www.imixs.org/bpmn2" xmlns:open-bpmn="http://open-bpmn.org/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exporter="org.openbpmn" exporterVersion="1.0.0" targetNamespace="http://open-bpmn.org">
<bpmn2:extensionElements>
<imixs:item name="txtworkflowmodelversion" type="xs:string">
<imixs:value><![CDATA[default-en-1.0]]></imixs:value>
</imixs:item>
<imixs:item name="txtplugins" type="xs:string">
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.RulePlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.SplitAndJoinPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.OwnerPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ApproverPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.HistoryPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ApplicationPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.IntervalPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.MailPlugin]]></imixs:value>
<imixs:value><![CDATA[org.imixs.workflow.engine.plugins.ResultPlugin]]></imixs:value>
</imixs:item>
<imixs:item name="txtfieldmapping" type="xs:string">
<imixs:value><![CDATA[Creator|$creator]]></imixs:value>
<imixs:value><![CDATA[Owner|$owner]]></imixs:value>
<imixs:value><![CDATA[Editor|$editor]]></imixs:value>
</imixs:item>
</bpmn2:extensionElements>
<bpmn2:process id="process_1" name="Default Process" processType="Public">
<bpmn2:documentation id="documentation_dIsJlQ"/>
<bpmn2:extensionElements>
<open-bpmn:auto-align>true</open-bpmn:auto-align>
</bpmn2:extensionElements>
<bpmn2:task id="task_DzBmHg" imixs:processid="100" name="Approve">
<bpmn2:documentation id="documentation_Dz7pPQ"/>
<bpmn2:incoming>sequenceFlow_3VLCbQ</bpmn2:incoming>
<bpmn2:outgoing>sequenceFlow_cE44xg</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:sequenceFlow id="sequenceFlow_3VLCbQ" sourceRef="event_BQQVcw" targetRef="task_DzBmHg">
<bpmn2:documentation id="documentation_Ib3jJg"/>
</bpmn2:sequenceFlow>
<bpmn2:task id="task_Qx2B4g" imixs:processid="200" name="Send">
<bpmn2:extensionElements/>
<bpmn2:documentation id="documentation_rvNWnQ"/>
<bpmn2:incoming>sequenceFlow_cE44xg</bpmn2:incoming>
<bpmn2:outgoing>sequenceFlow_Sl9ddA</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:sequenceFlow id="sequenceFlow_cE44xg" sourceRef="task_DzBmHg" targetRef="task_Qx2B4g">
<bpmn2:documentation id="documentation_aElYrg"/>
</bpmn2:sequenceFlow>
<bpmn2:dataStoreReference id="dataStoreReference_7e3Lqw" name="Data Store">
<bpmn2:documentation id="documentation_7z4JLw"/>
</bpmn2:dataStoreReference>
<bpmn2:association id="association_iA0M8A" sourceRef="task_Qx2B4g" targetRef="dataStoreReference_7e3Lqw">
<bpmn2:documentation id="documentation_UrXC7A"/>
</bpmn2:association>
<bpmn2:dataObject id="dataObject_gtbRDw" imixs:datatype="prompt-data" name="Data">
<bpmn2:documentation id="documentation_0uxQUw"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<PromptDefinition>
<prompt_options>{}</prompt_options>
<prompt><![CDATA[<itemvalue>request.subject</itemvalue>
<FILECONTEXT>^.+\.eml$</FILECONTEXT>
]]]]><![CDATA[>
</prompt>
<loglevel>FINE</loglevel>
</PromptDefinition> ]]></bpmn2:documentation>
</bpmn2:dataObject>
<bpmn2:association id="association_lWHmDQ" sourceRef="task_DzBmHg" targetRef="dataObject_gtbRDw">
<bpmn2:documentation id="documentation_Fj4EFA"/>
</bpmn2:association>
<bpmn2:association id="association_pNef4Q" sourceRef="event_BQQVcw" targetRef="dataStoreReference_7e3Lqw">
<bpmn2:documentation id="documentation_pbD1Sw"/>
</bpmn2:association>
<bpmn2:startEvent id="event_BQQVcw" name="Start">
<bpmn2:documentation id="documentation_KSXkdw"/>
<bpmn2:outgoing>association_pNef4Q</bpmn2:outgoing>
<bpmn2:outgoing>sequenceFlow_3VLCbQ</bpmn2:outgoing>
</bpmn2:startEvent>
<bpmn2:endEvent id="event_uRSh7g" name="Completed">
<bpmn2:documentation id="documentation_uzqyIA"/>
<bpmn2:incoming>sequenceFlow_Sl9ddA</bpmn2:incoming>
</bpmn2:endEvent>
<bpmn2:sequenceFlow id="sequenceFlow_Sl9ddA" sourceRef="task_Qx2B4g" targetRef="event_uRSh7g">
<bpmn2:documentation id="documentation_SpLy3Q"/>
</bpmn2:sequenceFlow>
</bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="OpenBPMN Diagram">
<bpmndi:BPMNPlane bpmnElement="process_1" id="BPMNPlane_d1zbGg">
<bpmndi:BPMNShape bpmnElement="task_DzBmHg" id="BPMNShape_06Te5Q">
<dc:Bounds height="50.0" width="110.0" x="200.0" y="40.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="task_Qx2B4g" id="BPMNShape_yer4kw">
<dc:Bounds height="50.0" width="110.0" x="450.0" y="40.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="dataStoreReference_7e3Lqw" id="BPMNShape_xwZRRA">
<dc:Bounds height="50.0" width="50.0" x="520.0" y="180.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_RaeA2w">
<dc:Bounds height="20.0" width="100.0" x="495.0" y="230.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="dataObject_gtbRDw" id="BPMNShape_31X79A">
<dc:Bounds height="50.0" width="35.0" x="270.0" y="150.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_bCydww">
<dc:Bounds height="20.0" width="100.0" x="237.5" y="205.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="event_BQQVcw" id="BPMNShape_aIKvbQ">
<dc:Bounds height="36.0" width="36.0" x="57.0" y="47.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_b5BxyA">
<dc:Bounds height="20.0" width="100.0" x="25.0" y="86.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="event_uRSh7g" id="BPMNShape_pDh8Gw">
<dc:Bounds height="36.0" width="36.0" x="657.0" y="47.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_c4C4GQ">
<dc:Bounds height="20.0" width="100.0" x="625.0" y="86.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_3VLCbQ" id="BPMNEdge_lrjXGw" sourceElement="BPMNShape_aIKvbQ" targetElement="BPMNShape_06Te5Q">
<di:waypoint x="93.0" y="65.0"/>
<di:waypoint x="200.0" y="65.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_cE44xg" id="BPMNEdge_cZ0SNA" sourceElement="BPMNShape_06Te5Q" targetElement="BPMNShape_yer4kw">
<di:waypoint x="310.0" y="65.0"/>
<di:waypoint x="450.0" y="65.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="association_iA0M8A" id="BPMNEdge_xP9rlQ" sourceElement="BPMNShape_yer4kw" targetElement="BPMNShape_xwZRRA">
<di:waypoint x="504.0" y="90.0"/>
<di:waypoint x="504.0" y="137.0"/>
<di:waypoint x="540.0" y="137.0"/>
<di:waypoint x="540.0" y="180.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="association_lWHmDQ" id="BPMNEdge_kg3SHw" sourceElement="BPMNShape_06Te5Q" targetElement="BPMNShape_31X79A">
<di:waypoint x="254.0" y="90.0"/>
<di:waypoint x="254.0" y="174.0"/>
<di:waypoint x="270.0" y="174.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="association_pNef4Q" id="BPMNEdge_PH7UMQ" sourceElement="BPMNShape_aIKvbQ" targetElement="BPMNShape_xwZRRA">
<di:waypoint x="75.0" y="83.0"/>
<di:waypoint x="75.0" y="243.0"/>
<di:waypoint x="544.0" y="243.0"/>
<di:waypoint x="544.0" y="230.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_Sl9ddA" id="BPMNEdge_KkWFiA" sourceElement="BPMNShape_yer4kw" targetElement="BPMNShape_pDh8Gw">
<di:waypoint x="560.0" y="65.0"/>
<di:waypoint x="657.0" y="65.0"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn2:definitions>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 62 KiB

View file

@ -0,0 +1,148 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" class="sprotty-graph bpmnextension-imixs" height="818" id="bpmn-diagram_5_root_pTGI10VcLg3PlNVo" version="1.1" viewBox="0 0 815 545" width="1223">
<defs>
</defs>
<g transform="scale(1) translate(0,0)">
<g class="graph-content">
<g class="node task bpmnextension-imixs" id="bpmn-diagram_5_task_DzBmHg" transform="translate(200, 40)">
<defs>
<clipPath id="task_DzBmHg_clip_path">
<path d="M2,5q0,-3 3,-3h100q3,0 3,3v40q0,3 &#10; -3,3h-100q-3,0 -3,-3z "/>
</clipPath>
</defs>
<path class="sprotty-node" d="M0,5q0,-5 5,-5h100q5,0 5,5v40q0,5 &#10; -5,5h-100q-5,0 -5,-5z " style="fill: transparent; stroke: #00000024; stroke-width: 2px;"/>
<g class="extension">
<text style="fill: #00000024; font-family: sans-serif; font-size: 9.33333px; stroke: rgb(0, 0, 0); stroke-width: 0px;" transform="translate(3,46)">Id:
100</text>
</g>
<g class="bpmn-text-node" id="bpmn-diagram_5_task_DzBmHg_multiline" transform="translate(0, 8)">
<text class="sprotty-label" style="fill: #00000024; font-family: sans-serif; font-size: 10.6667px; perspective-origin: 9.92188px 6px; stroke: rgb(0, 0, 0); stroke-width: 0px; text-anchor: middle;" transform="translate(55,0)">
<tspan dy="10" x="0">Approve </tspan>
</text>
</g>
</g>
<g class="node task bpmnextension-imixs" id="bpmn-diagram_5_task_Qx2B4g" transform="translate(450, 40)">
<defs>
<clipPath id="task_Qx2B4g_clip_path">
<path d="M2,5q0,-3 3,-3h100q3,0 3,3v40q0,3 &#10; -3,3h-100q-3,0 -3,-3z "/>
</clipPath>
</defs>
<path class="sprotty-node" d="M0,5q0,-5 5,-5h100q5,0 5,5v40q0,5 &#10; -5,5h-100q-5,0 -5,-5z " style="fill: transparent; stroke: #00000024; stroke-width: 2px;"/>
<g class="extension">
<text style="fill: #00000024; font-family: sans-serif; font-size: 9.33333px; stroke: rgb(0, 0, 0); stroke-width: 0px;" transform="translate(3,46)">Id:
200</text>
</g>
<g class="bpmn-text-node" id="bpmn-diagram_5_task_Qx2B4g_multiline" transform="translate(0, 8)">
<text class="sprotty-label" style="fill: #00000024; font-family: sans-serif; font-size: 10.6667px; perspective-origin: 6.21875px 6px; stroke: rgb(0, 0, 0); stroke-width: 0px; text-anchor: middle;" transform="translate(55,0)">
<tspan dy="10" x="0">Send </tspan>
</text>
</g>
</g>
<g class="startEvent event" id="bpmn-diagram_5_event_BQQVcw" transform="translate(57, 47)">
<circle class="sprotty-node" cx="18" cy="18" r="18" style="fill: transparent; stroke: #00000024; stroke-width: 2px;"/>
<g class="symbol">
<path d="" style="fill: #00000024; stroke-width: 0px;" transform="scale(1.5),translate(4,4)"/>
</g>
</g>
<g class="BPMNLabel" id="bpmn-diagram_5_event_BQQVcw_bpmnlabel" transform="translate(25, 86)">
<rect class="sprotty-node" height="22" style="fill: rgba(0, 0, 0, 0); stroke: rgb(0, 0, 0); stroke-width: 0px;" width="100" x="0" y="0"/>
<g class="comp sprotty-comp label-container" id="bpmn-diagram_5_1dabf9f7-0b63-4258-9ad2-4187f7af92c2" style="fill: rgba(0, 0, 0, 0); stroke: rgba(0, 0, 0, 0);" transform="translate(5, 5)">
<g class="bpmn-text-node" id="bpmn-diagram_5_event_BQQVcw_bpmnlabel_multiline">
<text class="sprotty-label" style="fill: #00000024; font-family: sans-serif; font-size: 10.6667px; perspective-origin: 5.625px 6px; stroke: rgb(0, 0, 0); stroke-width: 0px; text-anchor: middle;" transform="translate(45,0)">
<tspan dy="10" x="0">Start </tspan>
</text>
</g>
</g>
</g>
<g class="endEvent event" id="bpmn-diagram_5_event_uRSh7g" transform="translate(657, 47)">
<circle class="sprotty-node" cx="18" cy="18" r="18" style="fill: transparent; stroke: #00000024; stroke-width: 3px;"/>
<g class="symbol">
<path d="" style="fill: #00000024; stroke-width: 0px;" transform="scale(1.5),translate(4,4)"/>
</g>
</g>
<g class="BPMNLabel" id="bpmn-diagram_5_event_uRSh7g_bpmnlabel" transform="translate(625, 86)">
<rect class="sprotty-node" height="22" style="fill: rgba(0, 0, 0, 0); stroke: rgb(0, 0, 0); stroke-width: 0px;" width="100" x="0" y="0"/>
<g class="comp sprotty-comp label-container" id="bpmn-diagram_5_63a5fcfa-f28f-48d1-a957-e5d4e974b3e0" style="fill: rgba(0, 0, 0, 0); stroke: rgba(0, 0, 0, 0);" transform="translate(5, 5)">
<g class="bpmn-text-node" id="bpmn-diagram_5_event_uRSh7g_bpmnlabel_multiline">
<text class="sprotty-label" style="fill: #00000024; font-family: sans-serif; font-size: 10.6667px; perspective-origin: 12.875px 6px; stroke: rgb(0, 0, 0); stroke-width: 0px; text-anchor: middle;" transform="translate(45,0)">
<tspan dy="10" x="0">Completed </tspan>
</text>
</g>
</g>
</g>
<g class="dataObject bpmnextension-imixs" id="bpmn-diagram_5_dataObject_gtbRDw" transform="translate(270, 150)">
<rect class="sprotty-node" height="50" style="fill: rgba(0, 0, 0, 0); stroke: rgb(0, 144, 241); stroke-width: 0px;" width="35" x="0" y="0"/>
<g class="sprotty-icon" style="stroke-width: 2px;">
<path d="&#10; M 0,0 &#10; L 25,0&#10; L 35,10&#10; L 35,50&#10; L 0,50&#10; Z" fill="none" stroke="#00000024" stroke-width="1.5" style="fill: #00000024;"/>
<g class="symbol">
<path d="M6.25 9.016C6.66421 9.016 7 9.35089 7 9.76399V11.26C7 11.6731 6.66421 12.008 6.25 12.008C5.83579 12.008 5.5 11.6731 5.5 11.26V9.76399C5.5 9.35089 5.83579 9.016 6.25 9.016Z&#10; M10.5 9.76399C10.5 9.35089 10.1642 9.016 9.75 9.016C9.33579 9.016 9 9.35089 9 9.76399V11.26C9 11.6731 9.33579 12.008 9.75 12.008C10.1642 12.008 10.5 11.6731 10.5 11.26V9.76399Z&#10; M7.86079 1.80482C7.91028 1.8577 7.95663 1.91232 8 1.96856C8.04337 1.91232 8.08972 1.8577 8.13921 1.80482C8.82116 1.07611 9.87702 0.90832 11.0828 1.04194C12.3131 1.17827 13.2283 1.56829 13.8072 2.29916C14.3725 3.01276 14.5 3.90895 14.5 4.77735C14.5 5.34785 14.447 5.92141 14.2459 6.428L14.4135 7.26391L14.4798 7.29699C15.4115 7.76158 16 8.71126 16 9.7501V11.0107C16 11.2495 15.9143 11.4478 15.844 11.5763C15.7691 11.7131 15.6751 11.8368 15.5851 11.9416C15.4049 12.1512 15.181 12.3534 14.9801 12.5202C14.7751 12.6907 14.5728 12.8419 14.4235 12.9494C14.1842 13.1217 13.9389 13.2807 13.6826 13.4277C13.3756 13.6038 12.9344 13.8361 12.3867 14.0679C11.2956 14.5296 9.75604 15 8 15C6.24396 15 4.70442 14.5296 3.61334 14.0679C3.06559 13.8361 2.62435 13.6038 2.31739 13.4277C2.0611 13.2807 1.81581 13.1217 1.57651 12.9494C1.42716 12.8419 1.2249 12.6907 1.01986 12.5202C0.819 12.3534 0.595113 12.1512 0.414932 11.9416C0.3249 11.8368 0.230849 11.7131 0.156031 11.5763C0.0857453 11.4478 0 11.2495 1.90735e-06 11.0107L0 9.7501C0 8.71126 0.588507 7.76158 1.52017 7.29699L1.5865 7.26391L1.75413 6.42799C1.55295 5.9214 1.5 5.34785 1.5 4.77735C1.5 3.90895 1.62745 3.01276 2.19275 2.29916C2.77172 1.56829 3.68694 1.17827 4.91718 1.04194C6.12298 0.90832 7.17884 1.07611 7.86079 1.80482ZM3.0231 7.7282L3 7.8434V12.0931C3.02086 12.1053 3.04268 12.1179 3.06543 12.131C3.32878 12.2821 3.71567 12.4861 4.19916 12.6907C5.17058 13.1017 6.50604 13.504 8 13.504C9.49396 13.504 10.8294 13.1017 11.8008 12.6907C12.2843 12.4861 12.6712 12.2821 12.9346 12.131C12.9573 12.1179 12.9791 12.1053 13 12.0931V7.8434L12.9769 7.7282C12.4867 7.93728 11.9022 8.01867 11.25 8.01867C10.1037 8.01867 9.19051 7.69201 8.54033 7.03004C8.3213 6.80703 8.14352 6.55741 8 6.28924C7.85648 6.55741 7.6787 6.80703 7.45967 7.03004C6.80949 7.69201 5.89633 8.01867 4.75 8.01867C4.09776 8.01867 3.51325 7.93728 3.0231 7.7282ZM6.76421 2.82557C6.57116 2.61928 6.12702 2.41307 5.08282 2.52878C4.06306 2.64179 3.60328 2.93176 3.36975 3.22656C3.12255 3.53861 3 4.01374 3 4.77735C3 5.56754 3.12905 5.94499 3.3082 6.1441C3.47045 6.32443 3.82768 6.52267 4.75 6.52267C5.60367 6.52267 6.08903 6.28769 6.38811 5.98319C6.70349 5.66209 6.91507 5.1591 7.00579 4.43524C7.12274 3.50212 6.96805 3.04338 6.76421 2.82557ZM9.23579 2.82557C9.03195 3.04338 8.87726 3.50212 8.99421 4.43524C9.08493 5.1591 9.29651 5.66209 9.61189 5.98319C9.91097 6.28769 10.3963 6.52267 11.25 6.52267C12.1723 6.52267 12.5295 6.32443 12.6918 6.1441C12.871 5.94499 13 5.56754 13 4.77735C13 4.01374 12.8775 3.53861 12.6303 3.22656C12.3967 2.93176 11.9369 2.64179 10.9172 2.52878C9.87298 2.41307 9.42884 2.61928 9.23579 2.82557Z" style="fill: #00000024; stroke-width: 0px;" transform="scale(1.5),translate(4,8)"/>
</g>
</g>
</g>
<g class="BPMNLabel" id="bpmn-diagram_5_dataObject_gtbRDw_bpmnlabel" transform="translate(237.5, 205)">
<rect class="sprotty-node" height="22" style="fill: rgba(0, 0, 0, 0); stroke: rgb(0, 0, 0); stroke-width: 0px;" width="100" x="0" y="0"/>
<g class="comp sprotty-comp label-container" id="bpmn-diagram_5_1fa04718-497b-43aa-9a90-d5ba73fe6ebc" style="fill: rgba(0, 0, 0, 0); stroke: rgba(0, 0, 0, 0);" transform="translate(5, 5)">
<g class="bpmn-text-node" id="bpmn-diagram_5_dataObject_gtbRDw_bpmnlabel_multiline">
<text class="sprotty-label" style="fill: #00000024; font-family: sans-serif; font-size: 10.6667px; perspective-origin: 5.625px 6px; stroke: rgb(0, 0, 0); stroke-width: 0px; text-anchor: middle;" transform="translate(45,0)">
<tspan dy="10" x="0">Data </tspan>
</text>
</g>
</g>
</g>
<g class="dataStoreReference" id="bpmn-diagram_5_dataStoreReference_7e3Lqw" transform="translate(520, 180)">
<rect class="sprotty-node" height="50" style="fill: rgba(0, 0, 0, 0); stroke: rgb(0, 0, 0); stroke-width: 0px;" width="50" x="0" y="0"/>
<g class="sprotty-icon" style="stroke-width: 2px;" transform="translate(0,10)">
<path d="M0 0 L0 30" fill="none" stroke="#00000024" stroke-width="1.5"/>
<path d="M50 0 L50 30" fill="none" stroke="#00000024" stroke-width="1.5"/>
<path d="M0 30 A25 8.5 0 0 0 50 30" fill="none" stroke="#00000024" stroke-width="1.5"/>
<path d="M0 15 A25 8.5 0 0 0 50 15" fill="none" stroke="#00000024" stroke-width="1.5"/>
<ellipse cx="25" cy="0" fill="none" rx="25" ry="8.5" stroke="#00000024" stroke-width="1.5"/>
</g>
</g>
<g class="BPMNLabel" id="bpmn-diagram_5_dataStoreReference_7e3Lqw_bpmnlabel" transform="translate(495, 230)">
<rect class="sprotty-node" height="22" style="fill: rgba(0, 0, 0, 0); stroke: rgb(0, 0, 0); stroke-width: 0px;" width="100" x="0" y="0"/>
<g class="comp sprotty-comp label-container" id="bpmn-diagram_5_da9e09dd-e430-42ae-adbe-c2014dd27244" style="fill: rgba(0, 0, 0, 0); stroke: rgba(0, 0, 0, 0);" transform="translate(5, 5)">
<g class="bpmn-text-node" id="bpmn-diagram_5_dataStoreReference_7e3Lqw_bpmnlabel_multiline">
<text class="sprotty-label" style="fill: #00000024; font-family: sans-serif; font-size: 10.6667px; perspective-origin: 12.7344px 6px; stroke: rgb(0, 0, 0); stroke-width: 0px; text-anchor: middle;" transform="translate(45,0)">
<tspan dy="10" x="0">Data Store </tspan>
</text>
</g>
</g>
</g>
<g class="sprotty-edge sequenceFlow bpmnedge" id="bpmn-diagram_5_sequenceFlow_3VLCbQ" style="fill: none; stroke: #00000024; stroke-width: 1.5px;">
<path class="sprotty-edge line" d="M 93,65 L 200,65"/>
<path class="sprotty-edge arrow" d="M 1,0 L 14,-4 L 14,4 Z" style="fill: #00000024;" transform="rotate(180&#10; 200 65) translate(200 65&#10; )"/>
<path class="mouse-handle" d="M 93,65 L 200,65" style="stroke-width: 20; stroke: transparent; stroke-dasharray: none; stroke-dashoffset: 0;"/>
<text class="heading sprotty-label" id="bpmn-diagram_5_sequenceFlow_3VLCbQ_bpmnlabel" style="fill: #00000024; font-family: sans-serif; font-size: 10.6667px; stroke-width: 0px; text-align: center; text-anchor: middle;" transform="translate(146.5, 65) translate(0, -3)"/>
</g>
<g class="sprotty-edge sequenceFlow bpmnedge" id="bpmn-diagram_5_sequenceFlow_cE44xg" style="fill: none; stroke: #00000024; stroke-width: 1.5px;">
<path class="sprotty-edge line" d="M 310,65 L 450,65"/>
<path class="sprotty-edge arrow" d="M 1,0 L 14,-4 L 14,4 Z" style="fill: #00000024;" transform="rotate(180&#10; 450 65) translate(450 65&#10; )"/>
<path class="mouse-handle" d="M 310,65 L 450,65" style="stroke-width: 20; stroke: transparent; stroke-dasharray: none; stroke-dashoffset: 0;"/>
<text class="heading sprotty-label" id="bpmn-diagram_5_sequenceFlow_cE44xg_bpmnlabel" style="fill: #00000024; font-family: sans-serif; font-size: 10.6667px; stroke-width: 0px; text-align: center; text-anchor: middle;" transform="translate(380, 65) translate(0, -3)"/>
</g>
<g class="sprotty-edge sequenceFlow bpmnedge" id="bpmn-diagram_5_sequenceFlow_Sl9ddA" style="fill: none; stroke: #00000024; stroke-width: 1.5px;">
<path class="sprotty-edge line" d="M 560,65 L 657,65"/>
<path class="sprotty-edge arrow" d="M 1,0 L 14,-4 L 14,4 Z" style="fill: #00000024;" transform="rotate(180&#10; 657 65) translate(657 65&#10; )"/>
<path class="mouse-handle" d="M 560,65 L 657,65" style="stroke-width: 20; stroke: transparent; stroke-dasharray: none; stroke-dashoffset: 0;"/>
<text class="heading sprotty-label" id="bpmn-diagram_5_sequenceFlow_Sl9ddA_bpmnlabel" style="fill: #00000024; font-family: sans-serif; font-size: 10.6667px; stroke-width: 0px; text-align: center; text-anchor: middle;" transform="translate(608.5, 65) translate(0, -3)"/>
</g>
<g class="sprotty-edge association bpmnedge" id="bpmn-diagram_5_association_iA0M8A" style="fill: none; stroke: #00000024; stroke-width: 1.5px;">
<path class="sprotty-edge line" d="M 504,90 L 504,127 Q 504,137 514,137 L 530,137 Q 540,137 540,147 L 540,180" style="stroke-dasharray: 4px, 4px;"/>
<path class="mouse-handle" d="M 504,90 L 504,127 Q 504,137 514,137 L 530,137 Q 540,137 540,147 L 540,180" style="stroke-width: 20; stroke: transparent; stroke-dasharray: none; stroke-dashoffset: 0;"/>
<text class="heading sprotty-label" id="bpmn-diagram_5_association_iA0M8A_bpmnlabel" style="fill: #00000024; font-family: sans-serif; font-size: 10.6667px; stroke-width: 0px; text-align: center; text-anchor: middle;" transform="translate(520, 137) translate(0, -3)"/>
</g>
<g class="sprotty-edge association bpmnedge" id="bpmn-diagram_5_association_lWHmDQ" style="fill: none; stroke: #00000024; stroke-width: 1.5px;">
<path class="sprotty-edge line" d="M 254,90 L 254,166.8 Q 254,174 261.2,174 L 270,174" style="stroke-dasharray: 4px, 4px;"/>
<path class="mouse-handle" d="M 254,90 L 254,166.8 Q 254,174 261.2,174 L 270,174" style="stroke-width: 20; stroke: transparent; stroke-dasharray: none; stroke-dashoffset: 0;"/>
<text class="heading sprotty-label" id="bpmn-diagram_5_association_lWHmDQ_bpmnlabel" style="fill: #00000024; font-family: sans-serif; font-size: 10.6667px; stroke-width: 0px; text-align: center; text-anchor: middle;" transform="translate(254, 140) translate(-3, 0)"/>
</g>
<g class="sprotty-edge association bpmnedge" id="bpmn-diagram_5_association_pNef4Q" style="fill: none; stroke: #00000024; stroke-width: 1.5px;">
<path class="sprotty-edge line" d="M 75,83 L 75,233 Q 75,243 85,243 L 538.1,243 Q 544,243 544,237.1 L 544,230" style="stroke-dasharray: 4px, 4px;"/>
<path class="mouse-handle" d="M 75,83 L 75,233 Q 75,243 85,243 L 538.1,243 Q 544,243 544,237.1 L 544,230" style="stroke-width: 20; stroke: transparent; stroke-dasharray: none; stroke-dashoffset: 0;"/>
<text class="heading sprotty-label" id="bpmn-diagram_5_association_pNef4Q_bpmnlabel" style="fill: #00000024; font-family: sans-serif; font-size: 10.6667px; stroke-width: 0px; text-align: center; text-anchor: middle;" transform="translate(236, 243) translate(0, -3)"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -0,0 +1,148 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" class="sprotty-graph bpmnextension-imixs" height="818" id="bpmn-diagram_5_root_pTGI10VcLg3PlNVo" version="1.1" viewBox="0 0 815 545" width="1223">
<defs>
</defs>
<g transform="scale(1) translate(0,0)">
<g class="graph-content">
<g class="node task bpmnextension-imixs" id="bpmn-diagram_5_task_DzBmHg" transform="translate(200, 40)">
<defs>
<clipPath id="task_DzBmHg_clip_path">
<path d="M2,5q0,-3 3,-3h100q3,0 3,3v40q0,3 &#10; -3,3h-100q-3,0 -3,-3z "/>
</clipPath>
</defs>
<path class="sprotty-node" d="M0,5q0,-5 5,-5h100q5,0 5,5v40q0,5 &#10; -5,5h-100q-5,0 -5,-5z " style="fill: transparent; stroke: #ffffff24; stroke-width: 2px;"/>
<g class="extension">
<text style="fill: #ffffff24; font-family: sans-serif; font-size: 9.33333px; stroke: rgb(0, 0, 0); stroke-width: 0px;" transform="translate(3,46)">Id:
100</text>
</g>
<g class="bpmn-text-node" id="bpmn-diagram_5_task_DzBmHg_multiline" transform="translate(0, 8)">
<text class="sprotty-label" style="fill: #ffffff24; font-family: sans-serif; font-size: 10.6667px; perspective-origin: 9.92188px 6px; stroke: rgb(0, 0, 0); stroke-width: 0px; text-anchor: middle;" transform="translate(55,0)">
<tspan dy="10" x="0">Approve </tspan>
</text>
</g>
</g>
<g class="node task bpmnextension-imixs" id="bpmn-diagram_5_task_Qx2B4g" transform="translate(450, 40)">
<defs>
<clipPath id="task_Qx2B4g_clip_path">
<path d="M2,5q0,-3 3,-3h100q3,0 3,3v40q0,3 &#10; -3,3h-100q-3,0 -3,-3z "/>
</clipPath>
</defs>
<path class="sprotty-node" d="M0,5q0,-5 5,-5h100q5,0 5,5v40q0,5 &#10; -5,5h-100q-5,0 -5,-5z " style="fill: transparent; stroke: #ffffff24; stroke-width: 2px;"/>
<g class="extension">
<text style="fill: #ffffff24; font-family: sans-serif; font-size: 9.33333px; stroke: rgb(0, 0, 0); stroke-width: 0px;" transform="translate(3,46)">Id:
200</text>
</g>
<g class="bpmn-text-node" id="bpmn-diagram_5_task_Qx2B4g_multiline" transform="translate(0, 8)">
<text class="sprotty-label" style="fill: #ffffff24; font-family: sans-serif; font-size: 10.6667px; perspective-origin: 6.21875px 6px; stroke: rgb(0, 0, 0); stroke-width: 0px; text-anchor: middle;" transform="translate(55,0)">
<tspan dy="10" x="0">Send </tspan>
</text>
</g>
</g>
<g class="startEvent event" id="bpmn-diagram_5_event_BQQVcw" transform="translate(57, 47)">
<circle class="sprotty-node" cx="18" cy="18" r="18" style="fill: transparent; stroke: #ffffff24; stroke-width: 2px;"/>
<g class="symbol">
<path d="" style="fill: #ffffff24; stroke-width: 0px;" transform="scale(1.5),translate(4,4)"/>
</g>
</g>
<g class="BPMNLabel" id="bpmn-diagram_5_event_BQQVcw_bpmnlabel" transform="translate(25, 86)">
<rect class="sprotty-node" height="22" style="fill: rgba(0, 0, 0, 0); stroke: rgb(0, 0, 0); stroke-width: 0px;" width="100" x="0" y="0"/>
<g class="comp sprotty-comp label-container" id="bpmn-diagram_5_1dabf9f7-0b63-4258-9ad2-4187f7af92c2" style="fill: rgba(0, 0, 0, 0); stroke: rgba(0, 0, 0, 0);" transform="translate(5, 5)">
<g class="bpmn-text-node" id="bpmn-diagram_5_event_BQQVcw_bpmnlabel_multiline">
<text class="sprotty-label" style="fill: #ffffff24; font-family: sans-serif; font-size: 10.6667px; perspective-origin: 5.625px 6px; stroke: rgb(0, 0, 0); stroke-width: 0px; text-anchor: middle;" transform="translate(45,0)">
<tspan dy="10" x="0">Start </tspan>
</text>
</g>
</g>
</g>
<g class="endEvent event" id="bpmn-diagram_5_event_uRSh7g" transform="translate(657, 47)">
<circle class="sprotty-node" cx="18" cy="18" r="18" style="fill: transparent; stroke: #ffffff24; stroke-width: 3px;"/>
<g class="symbol">
<path d="" style="fill: #ffffff24; stroke-width: 0px;" transform="scale(1.5),translate(4,4)"/>
</g>
</g>
<g class="BPMNLabel" id="bpmn-diagram_5_event_uRSh7g_bpmnlabel" transform="translate(625, 86)">
<rect class="sprotty-node" height="22" style="fill: rgba(0, 0, 0, 0); stroke: rgb(0, 0, 0); stroke-width: 0px;" width="100" x="0" y="0"/>
<g class="comp sprotty-comp label-container" id="bpmn-diagram_5_63a5fcfa-f28f-48d1-a957-e5d4e974b3e0" style="fill: rgba(0, 0, 0, 0); stroke: rgba(0, 0, 0, 0);" transform="translate(5, 5)">
<g class="bpmn-text-node" id="bpmn-diagram_5_event_uRSh7g_bpmnlabel_multiline">
<text class="sprotty-label" style="fill: #ffffff24; font-family: sans-serif; font-size: 10.6667px; perspective-origin: 12.875px 6px; stroke: rgb(0, 0, 0); stroke-width: 0px; text-anchor: middle;" transform="translate(45,0)">
<tspan dy="10" x="0">Completed </tspan>
</text>
</g>
</g>
</g>
<g class="dataObject bpmnextension-imixs" id="bpmn-diagram_5_dataObject_gtbRDw" transform="translate(270, 150)">
<rect class="sprotty-node" height="50" style="fill: rgba(0, 0, 0, 0); stroke: rgb(0, 144, 241); stroke-width: 0px;" width="35" x="0" y="0"/>
<g class="sprotty-icon" style="stroke-width: 2px;">
<path d="&#10; M 0,0 &#10; L 25,0&#10; L 35,10&#10; L 35,50&#10; L 0,50&#10; Z" fill="none" stroke="#ffffff24" stroke-width="1.5" style="fill: #ffffff24;"/>
<g class="symbol">
<path d="M6.25 9.016C6.66421 9.016 7 9.35089 7 9.76399V11.26C7 11.6731 6.66421 12.008 6.25 12.008C5.83579 12.008 5.5 11.6731 5.5 11.26V9.76399C5.5 9.35089 5.83579 9.016 6.25 9.016Z&#10; M10.5 9.76399C10.5 9.35089 10.1642 9.016 9.75 9.016C9.33579 9.016 9 9.35089 9 9.76399V11.26C9 11.6731 9.33579 12.008 9.75 12.008C10.1642 12.008 10.5 11.6731 10.5 11.26V9.76399Z&#10; M7.86079 1.80482C7.91028 1.8577 7.95663 1.91232 8 1.96856C8.04337 1.91232 8.08972 1.8577 8.13921 1.80482C8.82116 1.07611 9.87702 0.90832 11.0828 1.04194C12.3131 1.17827 13.2283 1.56829 13.8072 2.29916C14.3725 3.01276 14.5 3.90895 14.5 4.77735C14.5 5.34785 14.447 5.92141 14.2459 6.428L14.4135 7.26391L14.4798 7.29699C15.4115 7.76158 16 8.71126 16 9.7501V11.0107C16 11.2495 15.9143 11.4478 15.844 11.5763C15.7691 11.7131 15.6751 11.8368 15.5851 11.9416C15.4049 12.1512 15.181 12.3534 14.9801 12.5202C14.7751 12.6907 14.5728 12.8419 14.4235 12.9494C14.1842 13.1217 13.9389 13.2807 13.6826 13.4277C13.3756 13.6038 12.9344 13.8361 12.3867 14.0679C11.2956 14.5296 9.75604 15 8 15C6.24396 15 4.70442 14.5296 3.61334 14.0679C3.06559 13.8361 2.62435 13.6038 2.31739 13.4277C2.0611 13.2807 1.81581 13.1217 1.57651 12.9494C1.42716 12.8419 1.2249 12.6907 1.01986 12.5202C0.819 12.3534 0.595113 12.1512 0.414932 11.9416C0.3249 11.8368 0.230849 11.7131 0.156031 11.5763C0.0857453 11.4478 0 11.2495 1.90735e-06 11.0107L0 9.7501C0 8.71126 0.588507 7.76158 1.52017 7.29699L1.5865 7.26391L1.75413 6.42799C1.55295 5.9214 1.5 5.34785 1.5 4.77735C1.5 3.90895 1.62745 3.01276 2.19275 2.29916C2.77172 1.56829 3.68694 1.17827 4.91718 1.04194C6.12298 0.90832 7.17884 1.07611 7.86079 1.80482ZM3.0231 7.7282L3 7.8434V12.0931C3.02086 12.1053 3.04268 12.1179 3.06543 12.131C3.32878 12.2821 3.71567 12.4861 4.19916 12.6907C5.17058 13.1017 6.50604 13.504 8 13.504C9.49396 13.504 10.8294 13.1017 11.8008 12.6907C12.2843 12.4861 12.6712 12.2821 12.9346 12.131C12.9573 12.1179 12.9791 12.1053 13 12.0931V7.8434L12.9769 7.7282C12.4867 7.93728 11.9022 8.01867 11.25 8.01867C10.1037 8.01867 9.19051 7.69201 8.54033 7.03004C8.3213 6.80703 8.14352 6.55741 8 6.28924C7.85648 6.55741 7.6787 6.80703 7.45967 7.03004C6.80949 7.69201 5.89633 8.01867 4.75 8.01867C4.09776 8.01867 3.51325 7.93728 3.0231 7.7282ZM6.76421 2.82557C6.57116 2.61928 6.12702 2.41307 5.08282 2.52878C4.06306 2.64179 3.60328 2.93176 3.36975 3.22656C3.12255 3.53861 3 4.01374 3 4.77735C3 5.56754 3.12905 5.94499 3.3082 6.1441C3.47045 6.32443 3.82768 6.52267 4.75 6.52267C5.60367 6.52267 6.08903 6.28769 6.38811 5.98319C6.70349 5.66209 6.91507 5.1591 7.00579 4.43524C7.12274 3.50212 6.96805 3.04338 6.76421 2.82557ZM9.23579 2.82557C9.03195 3.04338 8.87726 3.50212 8.99421 4.43524C9.08493 5.1591 9.29651 5.66209 9.61189 5.98319C9.91097 6.28769 10.3963 6.52267 11.25 6.52267C12.1723 6.52267 12.5295 6.32443 12.6918 6.1441C12.871 5.94499 13 5.56754 13 4.77735C13 4.01374 12.8775 3.53861 12.6303 3.22656C12.3967 2.93176 11.9369 2.64179 10.9172 2.52878C9.87298 2.41307 9.42884 2.61928 9.23579 2.82557Z" style="fill: #ffffff24; stroke-width: 0px;" transform="scale(1.5),translate(4,8)"/>
</g>
</g>
</g>
<g class="BPMNLabel" id="bpmn-diagram_5_dataObject_gtbRDw_bpmnlabel" transform="translate(237.5, 205)">
<rect class="sprotty-node" height="22" style="fill: rgba(0, 0, 0, 0); stroke: rgb(0, 0, 0); stroke-width: 0px;" width="100" x="0" y="0"/>
<g class="comp sprotty-comp label-container" id="bpmn-diagram_5_1fa04718-497b-43aa-9a90-d5ba73fe6ebc" style="fill: rgba(0, 0, 0, 0); stroke: rgba(0, 0, 0, 0);" transform="translate(5, 5)">
<g class="bpmn-text-node" id="bpmn-diagram_5_dataObject_gtbRDw_bpmnlabel_multiline">
<text class="sprotty-label" style="fill: #ffffff24; font-family: sans-serif; font-size: 10.6667px; perspective-origin: 5.625px 6px; stroke: rgb(0, 0, 0); stroke-width: 0px; text-anchor: middle;" transform="translate(45,0)">
<tspan dy="10" x="0">Data </tspan>
</text>
</g>
</g>
</g>
<g class="dataStoreReference" id="bpmn-diagram_5_dataStoreReference_7e3Lqw" transform="translate(520, 180)">
<rect class="sprotty-node" height="50" style="fill: rgba(0, 0, 0, 0); stroke: rgb(0, 0, 0); stroke-width: 0px;" width="50" x="0" y="0"/>
<g class="sprotty-icon" style="stroke-width: 2px;" transform="translate(0,10)">
<path d="M0 0 L0 30" fill="none" stroke="#ffffff24" stroke-width="1.5"/>
<path d="M50 0 L50 30" fill="none" stroke="#ffffff24" stroke-width="1.5"/>
<path d="M0 30 A25 8.5 0 0 0 50 30" fill="none" stroke="#ffffff24" stroke-width="1.5"/>
<path d="M0 15 A25 8.5 0 0 0 50 15" fill="none" stroke="#ffffff24" stroke-width="1.5"/>
<ellipse cx="25" cy="0" fill="none" rx="25" ry="8.5" stroke="#ffffff24" stroke-width="1.5"/>
</g>
</g>
<g class="BPMNLabel" id="bpmn-diagram_5_dataStoreReference_7e3Lqw_bpmnlabel" transform="translate(495, 230)">
<rect class="sprotty-node" height="22" style="fill: rgba(0, 0, 0, 0); stroke: rgb(0, 0, 0); stroke-width: 0px;" width="100" x="0" y="0"/>
<g class="comp sprotty-comp label-container" id="bpmn-diagram_5_da9e09dd-e430-42ae-adbe-c2014dd27244" style="fill: rgba(0, 0, 0, 0); stroke: rgba(0, 0, 0, 0);" transform="translate(5, 5)">
<g class="bpmn-text-node" id="bpmn-diagram_5_dataStoreReference_7e3Lqw_bpmnlabel_multiline">
<text class="sprotty-label" style="fill: #ffffff24; font-family: sans-serif; font-size: 10.6667px; perspective-origin: 12.7344px 6px; stroke: rgb(0, 0, 0); stroke-width: 0px; text-anchor: middle;" transform="translate(45,0)">
<tspan dy="10" x="0">Data Store </tspan>
</text>
</g>
</g>
</g>
<g class="sprotty-edge sequenceFlow bpmnedge" id="bpmn-diagram_5_sequenceFlow_3VLCbQ" style="fill: none; stroke: #ffffff24; stroke-width: 1.5px;">
<path class="sprotty-edge line" d="M 93,65 L 200,65"/>
<path class="sprotty-edge arrow" d="M 1,0 L 14,-4 L 14,4 Z" style="fill: #ffffff24;" transform="rotate(180&#10; 200 65) translate(200 65&#10; )"/>
<path class="mouse-handle" d="M 93,65 L 200,65" style="stroke-width: 20; stroke: transparent; stroke-dasharray: none; stroke-dashoffset: 0;"/>
<text class="heading sprotty-label" id="bpmn-diagram_5_sequenceFlow_3VLCbQ_bpmnlabel" style="fill: #ffffff24; font-family: sans-serif; font-size: 10.6667px; stroke-width: 0px; text-align: center; text-anchor: middle;" transform="translate(146.5, 65) translate(0, -3)"/>
</g>
<g class="sprotty-edge sequenceFlow bpmnedge" id="bpmn-diagram_5_sequenceFlow_cE44xg" style="fill: none; stroke: #ffffff24; stroke-width: 1.5px;">
<path class="sprotty-edge line" d="M 310,65 L 450,65"/>
<path class="sprotty-edge arrow" d="M 1,0 L 14,-4 L 14,4 Z" style="fill: #ffffff24;" transform="rotate(180&#10; 450 65) translate(450 65&#10; )"/>
<path class="mouse-handle" d="M 310,65 L 450,65" style="stroke-width: 20; stroke: transparent; stroke-dasharray: none; stroke-dashoffset: 0;"/>
<text class="heading sprotty-label" id="bpmn-diagram_5_sequenceFlow_cE44xg_bpmnlabel" style="fill: #ffffff24; font-family: sans-serif; font-size: 10.6667px; stroke-width: 0px; text-align: center; text-anchor: middle;" transform="translate(380, 65) translate(0, -3)"/>
</g>
<g class="sprotty-edge sequenceFlow bpmnedge" id="bpmn-diagram_5_sequenceFlow_Sl9ddA" style="fill: none; stroke: #ffffff24; stroke-width: 1.5px;">
<path class="sprotty-edge line" d="M 560,65 L 657,65"/>
<path class="sprotty-edge arrow" d="M 1,0 L 14,-4 L 14,4 Z" style="fill: #ffffff24;" transform="rotate(180&#10; 657 65) translate(657 65&#10; )"/>
<path class="mouse-handle" d="M 560,65 L 657,65" style="stroke-width: 20; stroke: transparent; stroke-dasharray: none; stroke-dashoffset: 0;"/>
<text class="heading sprotty-label" id="bpmn-diagram_5_sequenceFlow_Sl9ddA_bpmnlabel" style="fill: #ffffff24; font-family: sans-serif; font-size: 10.6667px; stroke-width: 0px; text-align: center; text-anchor: middle;" transform="translate(608.5, 65) translate(0, -3)"/>
</g>
<g class="sprotty-edge association bpmnedge" id="bpmn-diagram_5_association_iA0M8A" style="fill: none; stroke: #ffffff24; stroke-width: 1.5px;">
<path class="sprotty-edge line" d="M 504,90 L 504,127 Q 504,137 514,137 L 530,137 Q 540,137 540,147 L 540,180" style="stroke-dasharray: 4px, 4px;"/>
<path class="mouse-handle" d="M 504,90 L 504,127 Q 504,137 514,137 L 530,137 Q 540,137 540,147 L 540,180" style="stroke-width: 20; stroke: transparent; stroke-dasharray: none; stroke-dashoffset: 0;"/>
<text class="heading sprotty-label" id="bpmn-diagram_5_association_iA0M8A_bpmnlabel" style="fill: #ffffff24; font-family: sans-serif; font-size: 10.6667px; stroke-width: 0px; text-align: center; text-anchor: middle;" transform="translate(520, 137) translate(0, -3)"/>
</g>
<g class="sprotty-edge association bpmnedge" id="bpmn-diagram_5_association_lWHmDQ" style="fill: none; stroke: #ffffff24; stroke-width: 1.5px;">
<path class="sprotty-edge line" d="M 254,90 L 254,166.8 Q 254,174 261.2,174 L 270,174" style="stroke-dasharray: 4px, 4px;"/>
<path class="mouse-handle" d="M 254,90 L 254,166.8 Q 254,174 261.2,174 L 270,174" style="stroke-width: 20; stroke: transparent; stroke-dasharray: none; stroke-dashoffset: 0;"/>
<text class="heading sprotty-label" id="bpmn-diagram_5_association_lWHmDQ_bpmnlabel" style="fill: #ffffff24; font-family: sans-serif; font-size: 10.6667px; stroke-width: 0px; text-align: center; text-anchor: middle;" transform="translate(254, 140) translate(-3, 0)"/>
</g>
<g class="sprotty-edge association bpmnedge" id="bpmn-diagram_5_association_pNef4Q" style="fill: none; stroke: #ffffff24; stroke-width: 1.5px;">
<path class="sprotty-edge line" d="M 75,83 L 75,233 Q 75,243 85,243 L 538.1,243 Q 544,243 544,237.1 L 544,230" style="stroke-dasharray: 4px, 4px;"/>
<path class="mouse-handle" d="M 75,83 L 75,233 Q 75,243 85,243 L 538.1,243 Q 544,243 544,237.1 L 544,230" style="stroke-width: 20; stroke: transparent; stroke-dasharray: none; stroke-dashoffset: 0;"/>
<text class="heading sprotty-label" id="bpmn-diagram_5_association_pNef4Q_bpmnlabel" style="fill: #ffffff24; font-family: sans-serif; font-size: 10.6667px; stroke-width: 0px; text-align: center; text-anchor: middle;" transform="translate(236, 243) translate(0, -3)"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -0,0 +1,148 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" class="sprotty-graph bpmnextension-imixs" height="818" id="bpmn-diagram_5_root_pTGI10VcLg3PlNVo" version="1.1" viewBox="0 0 815 545" width="1223">
<defs>
</defs>
<g transform="scale(1) translate(0,0)">
<g class="graph-content">
<g class="node task bpmnextension-imixs" id="bpmn-diagram_5_task_DzBmHg" transform="translate(200, 40)">
<defs>
<clipPath id="task_DzBmHg_clip_path">
<path d="M2,5q0,-3 3,-3h100q3,0 3,3v40q0,3 &#10; -3,3h-100q-3,0 -3,-3z "/>
</clipPath>
</defs>
<path class="sprotty-node" d="M0,5q0,-5 5,-5h100q5,0 5,5v40q0,5 &#10; -5,5h-100q-5,0 -5,-5z " style="fill: transparent; stroke: #ffffff0a; stroke-width: 2px;"/>
<g class="extension">
<text style="fill: #ffffff0a; font-family: sans-serif; font-size: 9.33333px; stroke: rgb(0, 0, 0); stroke-width: 0px;" transform="translate(3,46)">Id:
100</text>
</g>
<g class="bpmn-text-node" id="bpmn-diagram_5_task_DzBmHg_multiline" transform="translate(0, 8)">
<text class="sprotty-label" style="fill: #ffffff0a; font-family: sans-serif; font-size: 10.6667px; perspective-origin: 9.92188px 6px; stroke: rgb(0, 0, 0); stroke-width: 0px; text-anchor: middle;" transform="translate(55,0)">
<tspan dy="10" x="0">Approve </tspan>
</text>
</g>
</g>
<g class="node task bpmnextension-imixs" id="bpmn-diagram_5_task_Qx2B4g" transform="translate(450, 40)">
<defs>
<clipPath id="task_Qx2B4g_clip_path">
<path d="M2,5q0,-3 3,-3h100q3,0 3,3v40q0,3 &#10; -3,3h-100q-3,0 -3,-3z "/>
</clipPath>
</defs>
<path class="sprotty-node" d="M0,5q0,-5 5,-5h100q5,0 5,5v40q0,5 &#10; -5,5h-100q-5,0 -5,-5z " style="fill: transparent; stroke: #ffffff0a; stroke-width: 2px;"/>
<g class="extension">
<text style="fill: #ffffff0a; font-family: sans-serif; font-size: 9.33333px; stroke: rgb(0, 0, 0); stroke-width: 0px;" transform="translate(3,46)">Id:
200</text>
</g>
<g class="bpmn-text-node" id="bpmn-diagram_5_task_Qx2B4g_multiline" transform="translate(0, 8)">
<text class="sprotty-label" style="fill: #ffffff0a; font-family: sans-serif; font-size: 10.6667px; perspective-origin: 6.21875px 6px; stroke: rgb(0, 0, 0); stroke-width: 0px; text-anchor: middle;" transform="translate(55,0)">
<tspan dy="10" x="0">Send </tspan>
</text>
</g>
</g>
<g class="startEvent event" id="bpmn-diagram_5_event_BQQVcw" transform="translate(57, 47)">
<circle class="sprotty-node" cx="18" cy="18" r="18" style="fill: transparent; stroke: #ffffff0a; stroke-width: 2px;"/>
<g class="symbol">
<path d="" style="fill: #ffffff0a; stroke-width: 0px;" transform="scale(1.5),translate(4,4)"/>
</g>
</g>
<g class="BPMNLabel" id="bpmn-diagram_5_event_BQQVcw_bpmnlabel" transform="translate(25, 86)">
<rect class="sprotty-node" height="22" style="fill: rgba(0, 0, 0, 0); stroke: rgb(0, 0, 0); stroke-width: 0px;" width="100" x="0" y="0"/>
<g class="comp sprotty-comp label-container" id="bpmn-diagram_5_1dabf9f7-0b63-4258-9ad2-4187f7af92c2" style="fill: rgba(0, 0, 0, 0); stroke: rgba(0, 0, 0, 0);" transform="translate(5, 5)">
<g class="bpmn-text-node" id="bpmn-diagram_5_event_BQQVcw_bpmnlabel_multiline">
<text class="sprotty-label" style="fill: #ffffff0a; font-family: sans-serif; font-size: 10.6667px; perspective-origin: 5.625px 6px; stroke: rgb(0, 0, 0); stroke-width: 0px; text-anchor: middle;" transform="translate(45,0)">
<tspan dy="10" x="0">Start </tspan>
</text>
</g>
</g>
</g>
<g class="endEvent event" id="bpmn-diagram_5_event_uRSh7g" transform="translate(657, 47)">
<circle class="sprotty-node" cx="18" cy="18" r="18" style="fill: transparent; stroke: #ffffff0a; stroke-width: 3px;"/>
<g class="symbol">
<path d="" style="fill: #ffffff0a; stroke-width: 0px;" transform="scale(1.5),translate(4,4)"/>
</g>
</g>
<g class="BPMNLabel" id="bpmn-diagram_5_event_uRSh7g_bpmnlabel" transform="translate(625, 86)">
<rect class="sprotty-node" height="22" style="fill: rgba(0, 0, 0, 0); stroke: rgb(0, 0, 0); stroke-width: 0px;" width="100" x="0" y="0"/>
<g class="comp sprotty-comp label-container" id="bpmn-diagram_5_63a5fcfa-f28f-48d1-a957-e5d4e974b3e0" style="fill: rgba(0, 0, 0, 0); stroke: rgba(0, 0, 0, 0);" transform="translate(5, 5)">
<g class="bpmn-text-node" id="bpmn-diagram_5_event_uRSh7g_bpmnlabel_multiline">
<text class="sprotty-label" style="fill: #ffffff0a; font-family: sans-serif; font-size: 10.6667px; perspective-origin: 12.875px 6px; stroke: rgb(0, 0, 0); stroke-width: 0px; text-anchor: middle;" transform="translate(45,0)">
<tspan dy="10" x="0">Completed </tspan>
</text>
</g>
</g>
</g>
<g class="dataObject bpmnextension-imixs" id="bpmn-diagram_5_dataObject_gtbRDw" transform="translate(270, 150)">
<rect class="sprotty-node" height="50" style="fill: rgba(0, 0, 0, 0); stroke: rgb(0, 144, 241); stroke-width: 0px;" width="35" x="0" y="0"/>
<g class="sprotty-icon" style="stroke-width: 2px;">
<path d="&#10; M 0,0 &#10; L 25,0&#10; L 35,10&#10; L 35,50&#10; L 0,50&#10; Z" fill="none" stroke="#ffffff0a" stroke-width="1.5" style="fill: #ffffff0a;"/>
<g class="symbol">
<path d="M6.25 9.016C6.66421 9.016 7 9.35089 7 9.76399V11.26C7 11.6731 6.66421 12.008 6.25 12.008C5.83579 12.008 5.5 11.6731 5.5 11.26V9.76399C5.5 9.35089 5.83579 9.016 6.25 9.016Z&#10; M10.5 9.76399C10.5 9.35089 10.1642 9.016 9.75 9.016C9.33579 9.016 9 9.35089 9 9.76399V11.26C9 11.6731 9.33579 12.008 9.75 12.008C10.1642 12.008 10.5 11.6731 10.5 11.26V9.76399Z&#10; M7.86079 1.80482C7.91028 1.8577 7.95663 1.91232 8 1.96856C8.04337 1.91232 8.08972 1.8577 8.13921 1.80482C8.82116 1.07611 9.87702 0.90832 11.0828 1.04194C12.3131 1.17827 13.2283 1.56829 13.8072 2.29916C14.3725 3.01276 14.5 3.90895 14.5 4.77735C14.5 5.34785 14.447 5.92141 14.2459 6.428L14.4135 7.26391L14.4798 7.29699C15.4115 7.76158 16 8.71126 16 9.7501V11.0107C16 11.2495 15.9143 11.4478 15.844 11.5763C15.7691 11.7131 15.6751 11.8368 15.5851 11.9416C15.4049 12.1512 15.181 12.3534 14.9801 12.5202C14.7751 12.6907 14.5728 12.8419 14.4235 12.9494C14.1842 13.1217 13.9389 13.2807 13.6826 13.4277C13.3756 13.6038 12.9344 13.8361 12.3867 14.0679C11.2956 14.5296 9.75604 15 8 15C6.24396 15 4.70442 14.5296 3.61334 14.0679C3.06559 13.8361 2.62435 13.6038 2.31739 13.4277C2.0611 13.2807 1.81581 13.1217 1.57651 12.9494C1.42716 12.8419 1.2249 12.6907 1.01986 12.5202C0.819 12.3534 0.595113 12.1512 0.414932 11.9416C0.3249 11.8368 0.230849 11.7131 0.156031 11.5763C0.0857453 11.4478 0 11.2495 1.90735e-06 11.0107L0 9.7501C0 8.71126 0.588507 7.76158 1.52017 7.29699L1.5865 7.26391L1.75413 6.42799C1.55295 5.9214 1.5 5.34785 1.5 4.77735C1.5 3.90895 1.62745 3.01276 2.19275 2.29916C2.77172 1.56829 3.68694 1.17827 4.91718 1.04194C6.12298 0.90832 7.17884 1.07611 7.86079 1.80482ZM3.0231 7.7282L3 7.8434V12.0931C3.02086 12.1053 3.04268 12.1179 3.06543 12.131C3.32878 12.2821 3.71567 12.4861 4.19916 12.6907C5.17058 13.1017 6.50604 13.504 8 13.504C9.49396 13.504 10.8294 13.1017 11.8008 12.6907C12.2843 12.4861 12.6712 12.2821 12.9346 12.131C12.9573 12.1179 12.9791 12.1053 13 12.0931V7.8434L12.9769 7.7282C12.4867 7.93728 11.9022 8.01867 11.25 8.01867C10.1037 8.01867 9.19051 7.69201 8.54033 7.03004C8.3213 6.80703 8.14352 6.55741 8 6.28924C7.85648 6.55741 7.6787 6.80703 7.45967 7.03004C6.80949 7.69201 5.89633 8.01867 4.75 8.01867C4.09776 8.01867 3.51325 7.93728 3.0231 7.7282ZM6.76421 2.82557C6.57116 2.61928 6.12702 2.41307 5.08282 2.52878C4.06306 2.64179 3.60328 2.93176 3.36975 3.22656C3.12255 3.53861 3 4.01374 3 4.77735C3 5.56754 3.12905 5.94499 3.3082 6.1441C3.47045 6.32443 3.82768 6.52267 4.75 6.52267C5.60367 6.52267 6.08903 6.28769 6.38811 5.98319C6.70349 5.66209 6.91507 5.1591 7.00579 4.43524C7.12274 3.50212 6.96805 3.04338 6.76421 2.82557ZM9.23579 2.82557C9.03195 3.04338 8.87726 3.50212 8.99421 4.43524C9.08493 5.1591 9.29651 5.66209 9.61189 5.98319C9.91097 6.28769 10.3963 6.52267 11.25 6.52267C12.1723 6.52267 12.5295 6.32443 12.6918 6.1441C12.871 5.94499 13 5.56754 13 4.77735C13 4.01374 12.8775 3.53861 12.6303 3.22656C12.3967 2.93176 11.9369 2.64179 10.9172 2.52878C9.87298 2.41307 9.42884 2.61928 9.23579 2.82557Z" style="fill: #ffffff0a; stroke-width: 0px;" transform="scale(1.5),translate(4,8)"/>
</g>
</g>
</g>
<g class="BPMNLabel" id="bpmn-diagram_5_dataObject_gtbRDw_bpmnlabel" transform="translate(237.5, 205)">
<rect class="sprotty-node" height="22" style="fill: rgba(0, 0, 0, 0); stroke: rgb(0, 0, 0); stroke-width: 0px;" width="100" x="0" y="0"/>
<g class="comp sprotty-comp label-container" id="bpmn-diagram_5_1fa04718-497b-43aa-9a90-d5ba73fe6ebc" style="fill: rgba(0, 0, 0, 0); stroke: rgba(0, 0, 0, 0);" transform="translate(5, 5)">
<g class="bpmn-text-node" id="bpmn-diagram_5_dataObject_gtbRDw_bpmnlabel_multiline">
<text class="sprotty-label" style="fill: #ffffff0a; font-family: sans-serif; font-size: 10.6667px; perspective-origin: 5.625px 6px; stroke: rgb(0, 0, 0); stroke-width: 0px; text-anchor: middle;" transform="translate(45,0)">
<tspan dy="10" x="0">Data </tspan>
</text>
</g>
</g>
</g>
<g class="dataStoreReference" id="bpmn-diagram_5_dataStoreReference_7e3Lqw" transform="translate(520, 180)">
<rect class="sprotty-node" height="50" style="fill: rgba(0, 0, 0, 0); stroke: rgb(0, 0, 0); stroke-width: 0px;" width="50" x="0" y="0"/>
<g class="sprotty-icon" style="stroke-width: 2px;" transform="translate(0,10)">
<path d="M0 0 L0 30" fill="none" stroke="#ffffff0a" stroke-width="1.5"/>
<path d="M50 0 L50 30" fill="none" stroke="#ffffff0a" stroke-width="1.5"/>
<path d="M0 30 A25 8.5 0 0 0 50 30" fill="none" stroke="#ffffff0a" stroke-width="1.5"/>
<path d="M0 15 A25 8.5 0 0 0 50 15" fill="none" stroke="#ffffff0a" stroke-width="1.5"/>
<ellipse cx="25" cy="0" fill="none" rx="25" ry="8.5" stroke="#ffffff0a" stroke-width="1.5"/>
</g>
</g>
<g class="BPMNLabel" id="bpmn-diagram_5_dataStoreReference_7e3Lqw_bpmnlabel" transform="translate(495, 230)">
<rect class="sprotty-node" height="22" style="fill: rgba(0, 0, 0, 0); stroke: rgb(0, 0, 0); stroke-width: 0px;" width="100" x="0" y="0"/>
<g class="comp sprotty-comp label-container" id="bpmn-diagram_5_da9e09dd-e430-42ae-adbe-c2014dd27244" style="fill: rgba(0, 0, 0, 0); stroke: rgba(0, 0, 0, 0);" transform="translate(5, 5)">
<g class="bpmn-text-node" id="bpmn-diagram_5_dataStoreReference_7e3Lqw_bpmnlabel_multiline">
<text class="sprotty-label" style="fill: #ffffff0a; font-family: sans-serif; font-size: 10.6667px; perspective-origin: 12.7344px 6px; stroke: rgb(0, 0, 0); stroke-width: 0px; text-anchor: middle;" transform="translate(45,0)">
<tspan dy="10" x="0">Data Store </tspan>
</text>
</g>
</g>
</g>
<g class="sprotty-edge sequenceFlow bpmnedge" id="bpmn-diagram_5_sequenceFlow_3VLCbQ" style="fill: none; stroke: #ffffff0a; stroke-width: 1.5px;">
<path class="sprotty-edge line" d="M 93,65 L 200,65"/>
<path class="sprotty-edge arrow" d="M 1,0 L 14,-4 L 14,4 Z" style="fill: #ffffff0a;" transform="rotate(180&#10; 200 65) translate(200 65&#10; )"/>
<path class="mouse-handle" d="M 93,65 L 200,65" style="stroke-width: 20; stroke: transparent; stroke-dasharray: none; stroke-dashoffset: 0;"/>
<text class="heading sprotty-label" id="bpmn-diagram_5_sequenceFlow_3VLCbQ_bpmnlabel" style="fill: #ffffff0a; font-family: sans-serif; font-size: 10.6667px; stroke-width: 0px; text-align: center; text-anchor: middle;" transform="translate(146.5, 65) translate(0, -3)"/>
</g>
<g class="sprotty-edge sequenceFlow bpmnedge" id="bpmn-diagram_5_sequenceFlow_cE44xg" style="fill: none; stroke: #ffffff0a; stroke-width: 1.5px;">
<path class="sprotty-edge line" d="M 310,65 L 450,65"/>
<path class="sprotty-edge arrow" d="M 1,0 L 14,-4 L 14,4 Z" style="fill: #ffffff0a;" transform="rotate(180&#10; 450 65) translate(450 65&#10; )"/>
<path class="mouse-handle" d="M 310,65 L 450,65" style="stroke-width: 20; stroke: transparent; stroke-dasharray: none; stroke-dashoffset: 0;"/>
<text class="heading sprotty-label" id="bpmn-diagram_5_sequenceFlow_cE44xg_bpmnlabel" style="fill: #ffffff0a; font-family: sans-serif; font-size: 10.6667px; stroke-width: 0px; text-align: center; text-anchor: middle;" transform="translate(380, 65) translate(0, -3)"/>
</g>
<g class="sprotty-edge sequenceFlow bpmnedge" id="bpmn-diagram_5_sequenceFlow_Sl9ddA" style="fill: none; stroke: #ffffff0a; stroke-width: 1.5px;">
<path class="sprotty-edge line" d="M 560,65 L 657,65"/>
<path class="sprotty-edge arrow" d="M 1,0 L 14,-4 L 14,4 Z" style="fill: #ffffff0a;" transform="rotate(180&#10; 657 65) translate(657 65&#10; )"/>
<path class="mouse-handle" d="M 560,65 L 657,65" style="stroke-width: 20; stroke: transparent; stroke-dasharray: none; stroke-dashoffset: 0;"/>
<text class="heading sprotty-label" id="bpmn-diagram_5_sequenceFlow_Sl9ddA_bpmnlabel" style="fill: #ffffff0a; font-family: sans-serif; font-size: 10.6667px; stroke-width: 0px; text-align: center; text-anchor: middle;" transform="translate(608.5, 65) translate(0, -3)"/>
</g>
<g class="sprotty-edge association bpmnedge" id="bpmn-diagram_5_association_iA0M8A" style="fill: none; stroke: #ffffff0a; stroke-width: 1.5px;">
<path class="sprotty-edge line" d="M 504,90 L 504,127 Q 504,137 514,137 L 530,137 Q 540,137 540,147 L 540,180" style="stroke-dasharray: 4px, 4px;"/>
<path class="mouse-handle" d="M 504,90 L 504,127 Q 504,137 514,137 L 530,137 Q 540,137 540,147 L 540,180" style="stroke-width: 20; stroke: transparent; stroke-dasharray: none; stroke-dashoffset: 0;"/>
<text class="heading sprotty-label" id="bpmn-diagram_5_association_iA0M8A_bpmnlabel" style="fill: #ffffff0a; font-family: sans-serif; font-size: 10.6667px; stroke-width: 0px; text-align: center; text-anchor: middle;" transform="translate(520, 137) translate(0, -3)"/>
</g>
<g class="sprotty-edge association bpmnedge" id="bpmn-diagram_5_association_lWHmDQ" style="fill: none; stroke: #ffffff0a; stroke-width: 1.5px;">
<path class="sprotty-edge line" d="M 254,90 L 254,166.8 Q 254,174 261.2,174 L 270,174" style="stroke-dasharray: 4px, 4px;"/>
<path class="mouse-handle" d="M 254,90 L 254,166.8 Q 254,174 261.2,174 L 270,174" style="stroke-width: 20; stroke: transparent; stroke-dasharray: none; stroke-dashoffset: 0;"/>
<text class="heading sprotty-label" id="bpmn-diagram_5_association_lWHmDQ_bpmnlabel" style="fill: #ffffff0a; font-family: sans-serif; font-size: 10.6667px; stroke-width: 0px; text-align: center; text-anchor: middle;" transform="translate(254, 140) translate(-3, 0)"/>
</g>
<g class="sprotty-edge association bpmnedge" id="bpmn-diagram_5_association_pNef4Q" style="fill: none; stroke: #ffffff0a; stroke-width: 1.5px;">
<path class="sprotty-edge line" d="M 75,83 L 75,233 Q 75,243 85,243 L 538.1,243 Q 544,243 544,237.1 L 544,230" style="stroke-dasharray: 4px, 4px;"/>
<path class="mouse-handle" d="M 75,83 L 75,233 Q 75,243 85,243 L 538.1,243 Q 544,243 544,237.1 L 544,230" style="stroke-width: 20; stroke: transparent; stroke-dasharray: none; stroke-dashoffset: 0;"/>
<text class="heading sprotty-label" id="bpmn-diagram_5_association_pNef4Q_bpmnlabel" style="fill: #ffffff0a; font-family: sans-serif; font-size: 10.6667px; stroke-width: 0px; text-align: center; text-anchor: middle;" transform="translate(236, 243) translate(0, -3)"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -0,0 +1,494 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>DYNAMIXS.AI - Die TRUSTED Enterprise AI Platform</title>
<style>
/*
*************************************************
* CSS-GRUNDLAGEN (Zum schnellen Testen integriert) *
*************************************************
*/
:root {
--color-primary: #007bff;
/* Starkes Blau */
--color-secondary: #28a745;
/* Akzent Grün/Akzent */
--color-dark: #212529;
--color-light: #f8f9fa;
--font-family: 'Inter', sans-serif;
--section-padding: 80px 0;
}
body {
font-family: var(--font-family);
line-height: 1.6;
margin: 0;
padding-top: 60px;
/* Platz für die Fixed-Navigation */
color: var(--color-dark);
background-color: white;
}
h1,
h2,
h3 {
line-height: 1.2;
font-weight: 800;
margin-bottom: 20px;
}
a {
color: var(--color-primary);
text-decoration: none;
transition: color 0.3s;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 20px;
}
section {
padding: var(--section-padding);
scroll-margin-top: 60px;
/* Für smooth scrolling */
}
/* --- Navigation --- */
.header-nav {
position: fixed;
top: 0;
left: 0;
width: 100%;
background-color: white;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
z-index: 1000;
}
.nav-content {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 20px;
}
.logo {
font-size: 1.5em;
font-weight: bold;
color: var(--color-dark);
}
.nav-menu ul {
list-style: none;
padding: 0;
margin: 0;
display: flex;
}
.nav-menu ul li a {
padding: 10px 15px;
display: block;
font-weight: 600;
color: var(--color-dark);
}
.nav-menu ul li a:hover {
color: var(--color-primary);
}
/* --- CTAs --- */
.btn {
display: inline-block;
padding: 12px 25px;
margin-top: 10px;
border-radius: 5px;
text-transform: uppercase;
font-weight: 600;
transition: background-color 0.3s;
text-align: center;
}
.btn-primary {
background-color: var(--color-primary);
color: white;
}
.btn-primary:hover {
background-color: #0056b3;
}
.btn-secondary {
background-color: transparent;
color: var(--color-primary);
border: 2px solid var(--color-primary);
}
.btn-secondary:hover {
background-color: var(--color-primary);
color: white;
}
/* --- Sektion: Hero/Home --- */
#home {
background-color: var(--color-light);
text-align: center;
padding: 100px 0;
}
#home h1 {
font-size: 3em;
margin-bottom: 10px;
color: var(--color-dark);
}
#home .subtitle {
font-size: 1.5em;
font-weight: 400;
margin-bottom: 40px;
color: #6c757d;
}
.cta-group .btn {
margin: 0 10px;
}
/* --- Sektion: Problem (Kontrast-Sektion) --- */
#problem {
background-color: var(--color-dark);
color: white;
text-align: center;
}
#problem h2 {
color: white;
}
#problem ul {
list-style: none;
padding: 0;
display: flex;
justify-content: center;
gap: 40px;
flex-wrap: wrap;
}
#problem ul li {
max-width: 250px;
text-align: left;
padding: 20px;
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 8px;
}
/* --- Sektion: Features (Grid) --- */
.feature-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 40px;
margin-top: 40px;
}
.feature-card {
background-color: var(--color-light);
padding: 30px;
border-radius: 10px;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.05);
}
.feature-card h3 {
color: var(--color-primary);
}
/* --- Sektion: Prozess (Linearer Ablauf) --- */
.process-step {
display: flex;
align-items: flex-start;
margin-bottom: 30px;
}
.step-number {
font-size: 2em;
font-weight: bold;
color: var(--color-secondary);
margin-right: 20px;
}
.step-content h3 {
margin-top: 0;
color: var(--color-primary);
}
/* --- Sektion: Ergebnisse (Metriken/Testimonials) --- */
.metric-grid {
display: flex;
justify-content: space-around;
text-align: center;
margin-top: 40px;
}
.metric strong {
display: block;
font-size: 3em;
color: var(--color-primary);
line-height: 1;
}
.testimonial-card {
background-color: var(--color-light);
padding: 30px;
border-left: 5px solid var(--color-secondary);
margin-top: 30px;
}
/* --- Footer --- */
footer {
background-color: var(--color-dark);
color: white;
padding: 40px 0;
text-align: center;
font-size: 0.9em;
}
footer a {
color: white;
margin: 0 10px;
}
/* --- Media Queries für Responsivität --- */
@media (max-width: 768px) {
.nav-menu ul {
display: none;
/* Mobile Navigation vereinfacht (Hamburger-Menü würde hier folgen) */
}
.nav-content {
justify-content: center;
}
body {
padding-top: 50px;
}
.header-nav {
height: 50px;
}
#home h1 {
font-size: 2.5em;
}
.metric-grid {
flex-direction: column;
gap: 30px;
}
.cta-group {
display: flex;
flex-direction: column;
gap: 10px;
}
}
</style>
</head>
<body>
<header class="header-nav">
<div class="container nav-content">
<div class="logo">DYNAMIXS.AI</div>
<nav class="nav-menu">
<ul>
<li><a href="#home">Start</a></li>
<li><a href="#plattform">Plattform</a></li>
<li><a href="#prozess">Prozess</a></li>
<li><a href="#ergebnisse">Erfolge</a></li>
<li><a href="#kontakt" class="btn btn-primary">Demo</a></li>
</ul>
</nav>
</div>
</header>
<section id="home" class="container">
<h1>Ihre Geschäftsprozesse sind einzigartig.<br>Unsere KI versteht sie.</h1>
<p class="subtitle">Die **TRUSTED Enterprise AI Platform** – Modellierung, Verbesserung und Automatisierung
Ihrer Prozesse, geerdet in Ihrer Business-Realität.</p>
<div class="cta-group">
<a href="#plattform" class="btn btn-primary">Platform kennenlernen</a>
<a href="#kontakt" class="btn btn-secondary">Experten sprechen</a>
</div>
</section>
<section id="problem">
<div class="container">
<h2>Warum KI allein nicht genug ist</h2>
<p>Ohne den Kontext Ihrer Abläufe bleibt KI eine Black Box. Die häufigsten Herausforderungen:</p>
<ul>
<li>
<i class="fas fa-sitemap"></i>
<h3>Verstreute Workflows</h3>
<p>Komplexe Abläufe sind über viele Systeme verteilt, Tools halten nicht Schritt.</p>
</li>
<li>
<i class="fas fa-database"></i>
<h3>Datensilos</h3>
<p>Wichtige Informationen sind isoliert, was Entscheidungen verlangsamt und die Zuverlässigkeit
mindert.</p>
</li>
<li>
<i class="fas fa-lock"></i>
<h3>Sicherheitsrisiken</h3>
<p>Compliance- und Sicherheitsauflagen limitieren den Einsatz externer, unkontrollierter KI.</p>
</li>
</ul>
</div>
</section>
<section id="plattform" class="container">
<h2>Was DYNAMIXS.AI **anders** macht</h2>
<p class="subtitle">Wir starten mit Ihrer Business-Realität. Die DYNAMIXS.AI Plattform ist Ihre **Process
Context Engine**:</p>
<p>Ihre Workflows, Regeln, Dokumente und das Expertenwissen Ihrer Teams werden zusammengeführt, um der KI den
notwendigen Kontext zu liefern. Dadurch wird KI **präzise, geschäftsreif und vertrauenswürdig**.</p>
<img src="placeholder-grafik-context-engine.svg" alt="Visuelle Darstellung der Process Context Engine"
style="width: 100%; max-width: 600px; display: block; margin: 40px auto;">
<a href="#features" class="btn btn-primary">Mehr zu AI Modeling</a>
</section>
<section id="features" class="container">
<h2>Drei Säulen für Ihren Erfolg</h2>
<div class="feature-grid">
<div class="feature-card">
<i class="fas fa-handshake fa-3x"></i>
<h3>Start mit Ihrer Geschäftsrealität</h3>
<p>Wir modellieren Prozesse, Daten und Regeln exakt so, wie sie existieren. Ihre individuelle Logik ist
die Basis für präzise KI-Aktionen.</p>
<a href="#">Mehr erfahren &rarr;</a>
</div>
<div class="feature-card">
<i class="fas fa-robot fa-3x"></i>
<h3>AI transformiert Ihre Prozesse</h3>
<p>Ihre Workflows bilden den Rahmen für KI-gesteuerte Entscheidungen: **Smart, Secure und Trusted.** Das
System lernt mit jedem Workflow.</p>
<a href="#">AI Modeling ansehen &rarr;</a>
</div>
<div class="feature-card">
<i class="fas fa-cogs fa-3x"></i>
<h3>Effiziente Anpassung mit Templates</h3>
<p>Vordefinierte Bausteine für Finance, HR und Logistik ermöglichen eine schnelle, kosteneffiziente
Implementierung in Stunden statt Wochen.</p>
<a href="#">Zur Template Library &rarr;</a>
</div>
</div>
</section>
<section id="prozess" class="container" style="background-color: var(--color-light);">
<h2>In 4 Schritten zur Trusted AI Platform</h2>
<p>Von der Vision zur Implementierung – schnell und strukturiert.</p>
<div class="process-flow">
<div class="process-step">
<div class="step-number">1</div>
<div class="step-content">
<h3>Capture your business reality</h3>
<p>Ihre Prozesse, Daten und Regeln werden in einem Living Model abgebildet.</p>
</div>
</div>
<div class="process-step">
<div class="step-number">2</div>
<div class="step-content">
<h3>Build the workflow model</h3>
<p>Eine erste lauffähige Version Ihres Systems ist innerhalb von Stunden einsatzbereit.</p>
</div>
</div>
<div class="process-step">
<div class="step-number">3</div>
<div class="step-content">
<h3>Customize with templates</h3>
<p>Fertige Komponenten verkürzen die Entwicklungszeit und beschleunigen die Implementierung.</p>
</div>
</div>
<div class="process-step">
<div class="step-number">4</div>
<div class="step-content">
<h3>Deploy, learn, improve</h3>
<p>Nach dem Live-Gang beginnt die kontinuierliche Optimierung durch gesammelte Prozessdaten.</p>
</div>
</div>
</div>
</section>
<section id="architektur" class="container">
<h2>Enterprise-Ready Architektur</h2>
<p>Ein Technologie-Stack, geformt durch zwei Jahrzehnte Enterprise-Projekte, auf den Sie sich verlassen können:
</p>
<ul>
<li>**Skalierbar:** Event-driven, BPMN-basiert, Cloud-native und API-first.</li>
<li>**Geschützt:** Daten sind verschlüsselt, auditierbar und DSGVO-konform.</li>
<li>**Bewährt:** Erfolgreich im Einsatz in Logistik, HR, Finance und Government.</li>
</ul>
<a href="#" class="btn btn-secondary">Architektur im Detail ansehen</a>
</section>
<section id="ergebnisse" class="container" style="background-color: var(--color-light);">
<h2>Messbare Erfolge in realen Unternehmen</h2>
<div class="metric-grid">
<div class="metric">
<strong>2</strong>
<p>Wochen bis zur vollen Integration in vielen Kundenfällen.</p>
</div>
<div class="metric">
<strong>5,000+</strong>
<p>Transaktionen und 95 Modelle bei einer Steuerberatung.</p>
</div>
<div class="metric">
<strong>2</strong>
<p>Stunden bis zum ersten lauffähigen Modell.</p>
</div>
</div>
<div class="testimonial-card">
<p>“Unglaublich, wie schnell wir unsere Geschäftsprozesse implementiert haben. Die Ergebnisse fließen direkt
in unser ERP.”</p>
<small>— Kunde, Finance</small>
</div>
<a href="#" class="btn btn-primary" style="margin-top: 40px;">Alle Erfolgsstories &rarr;</a>
</section>
<section id="kontakt" class="container" style="text-align: center;">
<h2>Ready to see how?</h2>
<p class="subtitle">Nutzen Sie das ungenutzte Intelligenzpotenzial Ihrer Workflows. Wir zeigen Ihnen, wie.</p>
<a href="#" class="btn btn-primary btn-lg" style="font-size: 1.2em;">Jetzt Beratungstermin vereinbaren</a>
<p style="margin-top: 20px;">Oder rufen Sie uns an: +49 (0) XXXX / XXXXXX</p>
</section>
<footer>
<div class="container">
<div class="logo">DYNAMIXS.AI</div>
<p>© 2025 DYNAMIXS.AI | Alle Rechte vorbehalten.</p>
<p>
<a href="#">Kontakt</a>
<a href="#">Legal / Impressum</a>
<a href="#">Datenschutz</a>
</p>
</div>
</footer>
</body>
</html>

View file

@ -2741,9 +2741,6 @@ Create a short briefing (3-5 bullet points):
<dc:Bounds height="20.0" width="100.0" x="989.7044067382812" y="915.10791015625"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="participant_hnZfjA" id="BPMNShape_iHhp5Q">
<dc:Bounds height="210.0" width="800.0" x="0.0" y="0.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="dataObject_g68BvQ" id="BPMNShape_4ZBosQ">
<dc:Bounds height="50.0" width="35.0" x="1510.0" y="400.0"/>
<bpmndi:BPMNLabel id="BPMNLabel_4YP9hg">

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1074,7 +1074,7 @@ result.isValid=true;
</imixs:item>
<imixs:item name="txtactivityresult" type="xs:string">
<imixs:value><![CDATA[<item name="comment" ignore="true"/>
<item name="process">Buchhaltung</item>]]></imixs:value>
<item name="process">Management</item>]]></imixs:value>
</imixs:item>
<imixs:item name="txtname" type="xs:string">
<imixs:value><![CDATA[Speichern]]></imixs:value>