Compare commits
83 commits
dynamixs-a
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 637a3f65e6 | |||
| ec49e84f53 | |||
| 2f6144fc35 | |||
| 66e7257e65 | |||
| a1760da2b3 | |||
| f8a258a1f7 | |||
| b5bb9ac635 | |||
| 4498f23458 | |||
| c1b9b621f6 | |||
| 26d9e8a807 | |||
| dd48226be5 | |||
| c93d148bc2 | |||
| 391da04900 | |||
| 72b29632b4 | |||
| 1c4af10c34 | |||
| f26c503b50 | |||
| a8950c433e | |||
| a98b30cbbd | |||
| f0e52d8bd1 | |||
| b4b0f6f8f5 | |||
| 8ced4940b7 | |||
| 18199c8f8f | |||
| 72de18959a | |||
| 97a0118c6a | |||
| daf4d14f85 | |||
| f0f755653f | |||
| 994b332538 | |||
| 29a2f43ef7 | |||
| c0e44d14ff | |||
| b458e11e90 | |||
| 5f15f7cfeb | |||
| 2ad786b749 | |||
| 705d3a6edf | |||
| 7d080d7885 | |||
| 21ee6258f3 | |||
| 3ee35eea1e | |||
| 079d035235 | |||
| 1462e1817e | |||
| fafa6633e9 | |||
| cde77ef9e0 | |||
| de65dfb48d | |||
| 470a100179 | |||
| 1c5e920ab7 | |||
| 34f8d54b08 | |||
| 920ead69f9 | |||
| afe0f0c59f | |||
| 3ea9767dac | |||
| 627ff7c199 | |||
| 5b663e69f4 | |||
| 23e09d4600 | |||
| 6743a9d716 | |||
| 0a367eb0b7 | |||
| 9964d78b2f | |||
| 15116bf299 | |||
| fe52b43b5a | |||
| b57aa87ba5 | |||
| 5d30da66da | |||
| e0268af9f0 | |||
| 4616e5bac6 | |||
| d45d232cd8 | |||
| 9de80d518d | |||
| 79f42ec989 | |||
| 7aacc62e73 | |||
| 258f141808 | |||
| e00739d564 | |||
| dc7d0a5998 | |||
| 65d6f9d75a | |||
| 9ddf32fc09 | |||
| 687b25416e | |||
| 9463d08d13 | |||
| 7f351012d9 | |||
| 025d97d0ce | |||
| 41cf0cb5e6 | |||
| ae8de55c4e | |||
| 83e3c74455 | |||
| af59ae8422 | |||
| 56e548513d | |||
| 87e45b1984 | |||
| cd823daa7d | |||
| 8082b208cd | |||
| 94086e84b3 | |||
| 1bd6e0f4c5 | |||
| e862b1ac09 |
1210 changed files with 29913 additions and 60297 deletions
6
.env
Normal file
6
.env
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
# Docker Config
|
||||||
|
PROJECT_PREFIX=dynamixs-ai-super-office
|
||||||
|
|
||||||
|
# LLM Config
|
||||||
|
LLM_API_ENDPOINT=https://api.llama.cpp.imixs.com/
|
||||||
|
LLM_API_KEY=7fdb663fa87ea16731c1e0ece8ad3214e358423eabf2403188110c731ce07321
|
||||||
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -14,7 +14,8 @@ target/
|
||||||
.classpath
|
.classpath
|
||||||
|
|
||||||
# ignore docker deployments
|
# ignore docker deployments
|
||||||
|
docker/.env
|
||||||
docker/deployments/
|
docker/deployments/
|
||||||
docker/keys
|
docker/keys
|
||||||
|
|
||||||
docker/docker-compose-imixs.yaml
|
docker/docker-compose-imixs.yaml
|
||||||
|
|
||||||
|
|
|
||||||
3
.vscode/launch.json
vendored
3
.vscode/launch.json
vendored
|
|
@ -1,6 +1,7 @@
|
||||||
{
|
{
|
||||||
// Wildfly Debug Configuration
|
// Wildfly Debug Configuration
|
||||||
"configurations": [
|
"configurations": [
|
||||||
|
|
||||||
{
|
{
|
||||||
"type": "java",
|
"type": "java",
|
||||||
"name": "Debug Dynamixs-AI",
|
"name": "Debug Dynamixs-AI",
|
||||||
|
|
@ -10,4 +11,4 @@
|
||||||
"projectName": "dynamixs-ai"
|
"projectName": "dynamixs-ai"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,7 @@
|
||||||
FROM imixs/imixs-office-workflow:5.1.3-SNAPSHOT-wildfly-29.0.1.Final-jdk17
|
FROM ghcr.io/dynamixs-ai/ai-platform:latest
|
||||||
|
|
||||||
# Debug
|
|
||||||
# Setup configuration
|
|
||||||
#COPY ./docker/configuration/wildfly/standalone-debug.xml /opt/jboss/wildfly/standalone/configuration/
|
|
||||||
|
|
||||||
|
|
||||||
# Deploy artefact
|
# Deploy artefact
|
||||||
RUN rm -r /opt/jboss/wildfly/standalone/deployments/*
|
RUN rm -r /opt/jboss/wildfly/standalone/deployments/*
|
||||||
# Deploy artefact
|
# Deploy artefact
|
||||||
ADD ./dynamixs-ai-app/target/dynamixs-ai*.war /opt/jboss/wildfly/standalone/deployments/
|
COPY ./target/*.war /opt/jboss/wildfly/standalone/deployments/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
FROM imixs/imixs-office-workflow:5.1.3-SNAPSHOT-wildfly-29.0.1.Final-jdk17
|
FROM ghcr.io/dynamixs-ai/ai-platform:latest
|
||||||
|
|
||||||
# Deploy artefact
|
# Deploy artefact
|
||||||
RUN rm -r /opt/jboss/wildfly/standalone/deployments/*
|
RUN rm -r /opt/jboss/wildfly/standalone/deployments/*
|
||||||
|
|
|
||||||
36
README.md
36
README.md
|
|
@ -1,5 +1,9 @@
|
||||||
# Dynamixs AI
|
# Dynamixs AI
|
||||||
|
|
||||||
|
Dies ist das interne Super Office von Dynamixs.ai
|
||||||
|
|
||||||
|
Wir verwenden OIDC / Keyclaok für die Anmeldung
|
||||||
|
|
||||||
This repository contains the source code as also build scripts to setup an Dynamixs AI instance.
|
This repository contains the source code as also build scripts to setup an Dynamixs AI instance.
|
||||||
|
|
||||||
**Topics**
|
**Topics**
|
||||||
|
|
@ -11,11 +15,41 @@ This repository contains the source code as also build scripts to setup an Dynam
|
||||||
|
|
||||||
## Build & Run
|
## Build & Run
|
||||||
|
|
||||||
|
The dev environment is defined by the 'docker compose' file `docker-compose-dev.yaml`
|
||||||
|
|
||||||
|
The Environment contains the following components:
|
||||||
|
|
||||||
|
- Imixs-Office-Workflow - application instance based on Wildfly 29.x
|
||||||
|
- PostgreSQL Server - postgres:9.6.1 - local database
|
||||||
|
- Apache Tika - apache/tika:3.2.0.0-full for OCR
|
||||||
|
- Apache Cassandra - cassandra:5.0.4 local vector database
|
||||||
|
- Collabora - collabora/code:25.04.6.2.1 for local office documents
|
||||||
|
- Imixs-Admin - imixs/imixs-admin Imixs Admin Client
|
||||||
|
- Prometheus - prom/prometheus:latest for logging metrics
|
||||||
|
- Grafana - grafana/grafana:10.4.0 - for metric monitoring
|
||||||
|
|
||||||
|
### AI / LLM
|
||||||
|
|
||||||
|
The system expects a LLM Server endpoint based on Open AI API. The default LLM server endpoint is defined by the environment variables `LLM_SERVICE_ENDPOINT` and `LLM_API_KEY`. You can define both variables in the file `./docker/.env`
|
||||||
|
|
||||||
|
```
|
||||||
|
LLM_API_ENDPOINT=https://my.llama.cpp.foo.com/
|
||||||
|
LLM_API_KEY=your-api-key-here
|
||||||
|
```
|
||||||
|
|
||||||
|
### Build / Setup
|
||||||
|
|
||||||
To build and run the project you can use the build script `devi.sh` and run:
|
To build and run the project you can use the build script `devi.sh` and run:
|
||||||
|
|
||||||
$ ./devi setup
|
$ ./devi setup
|
||||||
|
|
||||||
You can access the application from our Web browser
|
This wild build the project with 'maven' and also build the local docker image. The project will be started automatically.
|
||||||
|
|
||||||
|
You can also start the project with
|
||||||
|
|
||||||
|
$ ./devi start
|
||||||
|
|
||||||
|
To access the application from our Web browser
|
||||||
|
|
||||||
http://localhost:8080
|
http://localhost:8080
|
||||||
|
|
||||||
|
|
|
||||||
24
build.sh
Executable file
24
build.sh
Executable file
|
|
@ -0,0 +1,24 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
############################################################
|
||||||
|
# The Dynamixs.AI Developer Script
|
||||||
|
# start, build, hot, setup, deploy
|
||||||
|
#
|
||||||
|
############################################################
|
||||||
|
|
||||||
|
strip_dash() {
|
||||||
|
echo "$1" | sed 's/^-//'
|
||||||
|
}
|
||||||
|
|
||||||
|
echo " _ _ _ _ "
|
||||||
|
echo " __| | _____ _(_) | |__ ___| |_ __"
|
||||||
|
echo " / _\` |/ _ \\ \\ / / | | '_ \\ / _ \\ | \'_ \\"
|
||||||
|
echo "| (_| | __/\ V /| | | | | | __/ | |_) |"
|
||||||
|
echo " \__,_|\___| \_/ |_| |_| |_|\___|_| .__/ "
|
||||||
|
echo " |_| "
|
||||||
|
echo " Dynamixs.AI Build Script..."
|
||||||
|
echo "_________________________________________"
|
||||||
|
|
||||||
|
# Update git
|
||||||
|
git pull
|
||||||
|
mvn clean install -DskipTests -Pimixs-cloud
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
I am a biologist and I observe the behavior of zebras in the wild. Therefore, I need high-quality accessories and sensors for my drones.
|
|
||||||
|
|
||||||
Hallo,
|
|
||||||
Ich bin auf der Suche nach Kondensatoren mit einer betriebstemperatur zwischen -10°C bis +85°C.
|
|
||||||
Haben Sie solche Produkte?
|
|
||||||
|
|
||||||
Ich möchte mir eine Wetterstation für den Nordpol bauen. Was empfehlen Sie mir hier?
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
||||||
# Elevator Pitch: Trusted AI Plattform
|
|
||||||
|
|
||||||
## Version 1.4 (Arbeitsstand)
|
|
||||||
|
|
||||||
**🎯 WHY - Warum?**
|
|
||||||
KI beginnt gerade unsere Welt zu verändern. Wie wir arbeiten, wie wir Probleme lösen. Das bedeutet aber auch, dass wir Unternehmens-IT völlig neu denken müssen.
|
|
||||||
|
|
||||||
Bestehende Systeme verfügen heute über Unmengen an Daten, aber über kein Wissen. Unternehmensprozesse unterstützen unsere vorhandenen Strukturen, bieten aber keine Flexibilität für sich ändernde Arbeitsabläufe.
|
|
||||||
|
|
||||||
**🔧 HOW - Wie?**
|
|
||||||
Deshalb müssen wir KI-Systeme befähigen, zu erfassen, wie wir arbeiten und Probleme lösen.
|
|
||||||
|
|
||||||
KI muss unser Unternehmen verstehen: Unsere Daten, unsere Prozesse, unsere Art zu arbeiten.
|
|
||||||
|
|
||||||
**💡 WHAT - Was?**
|
|
||||||
Wir haben mit Dynamixs AI eine neue Plattform entwickelt, die diese beiden Welten verbindet - Daten und Prozesse - und zwar in einer Weise, die eine KI verstehen kann. Daraus entsteht etwas völlig Neues: eine sichere Unternehmens-KI - Trusted AI. Unternehmensdaten bleiben sicher im Unternehmen und sind vor unerlaubtem Zugriff geschützt.
|
|
||||||
|
|
||||||
----------
|
|
||||||
|
|
||||||
## Version 1.3 (Arbeitsstand)
|
|
||||||
|
|
||||||
**🎯 WHY - Warum?**
|
|
||||||
Alle reden heute über KI im Unternehmen. Aber die Zukunft liegt nicht darin, dass KI intelligent wird und unser Business übernimmt - sondern dass wir intelligent mit KI-Systemen arbeiten.
|
|
||||||
|
|
||||||
Das bedeutet: KI muss unser Unternehmen verstehen. Unsere Daten, unsere Prozesse, unsere Art zu arbeiten.
|
|
||||||
|
|
||||||
Wir müssen also KI befähigen, die Art zu verstehen, wie wir arbeiten und Probleme lösen.
|
|
||||||
|
|
||||||
**🔧 HOW - Wie?**
|
|
||||||
Darum müssen wir heute IT ganz neu denken. Bestehende Systeme verfügen zwar über Unmengen an Daten, aber über kein Wissen. Unternehmensprozesse unterstützen starre Strukturen, bieten aber keine Flexibilität und Freiheit.
|
|
||||||
|
|
||||||
**💡 WHAT - Was?**
|
|
||||||
Wir haben mit Dynamixs AI eine neue Plattform entwickelt, die diese beiden Welten verbindet - Daten und Prozesse - und zwar in einer Weise, die eine KI verstehen kann. Daraus entsteht etwas völlig Neues: eine sichere Unternehmens-KI - Trusted AI. Unternehmensdaten bleiben sicher im Unternehmen und sind vor unerlaubtem Zugriff geschützt.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Notizen:
|
|
||||||
|
|
||||||
- **Zielgruppe**: Alle (Freunde, Geschäftspartner, Investoren, Kunden)
|
|
||||||
- **Ziel**: Der "Inception-Gedanke" - intelligent MIT KI arbeiten, nicht KI intelligent machen
|
|
||||||
- **Kern-Message**: KI muss unser Business verstehen lernen
|
|
||||||
- **Dauer**: 30 Sekunden
|
|
||||||
29
devi
29
devi
|
|
@ -1,12 +1,11 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
############################################################
|
############################################################
|
||||||
# The Imixs Developer Script
|
# The Dynamixs.AI Developer Script
|
||||||
# start, build, hot, setup, deploy
|
# start, build, hot, setup, deploy
|
||||||
#
|
#
|
||||||
############################################################
|
############################################################
|
||||||
|
|
||||||
# Funktion zum Entfernen des '-' Zeichens von einem Parameter
|
|
||||||
strip_dash() {
|
strip_dash() {
|
||||||
echo "$1" | sed 's/^-//'
|
echo "$1" | sed 's/^-//'
|
||||||
}
|
}
|
||||||
|
|
@ -24,23 +23,31 @@ strip_dash() {
|
||||||
if [[ "$(strip_dash $1)" == "setup" ]]; then
|
if [[ "$(strip_dash $1)" == "setup" ]]; then
|
||||||
echo " Dev Setup..."
|
echo " Dev Setup..."
|
||||||
sudo chmod -R 777 docker/deployments/
|
sudo chmod -R 777 docker/deployments/
|
||||||
echo " starting dev enrvionment..."
|
echo " starting dev environment..."
|
||||||
mvn clean install -Pdebug
|
mvn clean install -Pdebug
|
||||||
cp ./*-app/target/*.war ./docker/deployments/
|
cp ./*-app/target/*.war ./docker/deployments/
|
||||||
docker-compose -f ./docker/docker-compose-dev.yaml up
|
docker compose -f ./docker-compose-dev.yaml up
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
if [[ "$(strip_dash $1)" == "start" ]]; then
|
if [[ "$(strip_dash $1)" == "start" ]]; then
|
||||||
echo " Start Dev Environment..."
|
echo " Start Dev Environment..."
|
||||||
docker-compose -f ./docker/docker-compose-dev.yaml up
|
docker compose -f ./docker-compose.yaml up
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$(strip_dash $1)" == "dev" ]]; then
|
||||||
|
echo " Start Dev Environment..."
|
||||||
|
mvn clean install -DskipTests -Pdebug
|
||||||
|
docker compose -f ./docker-compose-dev.yaml up
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$(strip_dash $1)" == "docker" ]]; then
|
if [[ "$(strip_dash $1)" == "docker" ]]; then
|
||||||
echo " Buld Docker Image..."
|
echo " Build Docker image..."
|
||||||
mvn clean install -Pdocker
|
mvn clean install -DskipTests -Pdocker
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if [[ "$(strip_dash $1)" == "build" ]]; then
|
if [[ "$(strip_dash $1)" == "build" ]]; then
|
||||||
echo " Build and Autodeploy..."
|
echo " Build and Autodeploy..."
|
||||||
mvn clean install -DskipTests
|
mvn clean install -DskipTests
|
||||||
|
|
@ -58,11 +65,6 @@ if [[ "$(strip_dash $1)" == "hot" ]]; then
|
||||||
cd ..
|
cd ..
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$(strip_dash $1)" == "deploy" ]]; then
|
|
||||||
echo " Deploy to Imixs-Cloud..."
|
|
||||||
mvn clean install -Pimixs-cloud -DskipTests
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Überprüfen, ob keine Parameter übergeben wurden - standard build
|
# Überprüfen, ob keine Parameter übergeben wurden - standard build
|
||||||
if [[ $# -eq 0 ]]; then
|
if [[ $# -eq 0 ]]; then
|
||||||
|
|
@ -70,11 +72,10 @@ if [[ $# -eq 0 ]]; then
|
||||||
echo " Run with ./dev.sh -XXX"
|
echo " Run with ./dev.sh -XXX"
|
||||||
echo " "
|
echo " "
|
||||||
echo " -start : start Docker Containers"
|
echo " -start : start Docker Containers"
|
||||||
|
echo " -dev : start the Docker dev environment"
|
||||||
echo " -build : build application and redeploy"
|
echo " -build : build application and redeploy"
|
||||||
echo " -hot : Manik Hotdeploy"
|
echo " -hot : Manik Hotdeploy"
|
||||||
echo " -docker : build the Docker image"
|
|
||||||
echo " -test : run tests"
|
echo " -test : run tests"
|
||||||
echo " -deploy: Imixs-Cloud Deployment starten "
|
|
||||||
echo " -setup : setup dev environment - rebuild docker containers "
|
echo " -setup : setup dev environment - rebuild docker containers "
|
||||||
echo "_________________________________________"
|
echo "_________________________________________"
|
||||||
echo " "
|
echo " "
|
||||||
|
|
|
||||||
3
doc/AAIF.md
Normal file
3
doc/AAIF.md
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
# AAIF.io
|
||||||
|
|
||||||
|
https://aaif.io/
|
||||||
153
doc/MCP/0.2.README.md
Normal file
153
doc/MCP/0.2.README.md
Normal file
|
|
@ -0,0 +1,153 @@
|
||||||
|
# MCP Integration Architecture for Imixs BPM Suite
|
||||||
|
|
||||||
|
## 1. Core Concept
|
||||||
|
|
||||||
|
The **Model Context Protocol (MCP)** is an open standard that enables AI systems to interact with external tools and data sources through a unified protocol.
|
||||||
|
|
||||||
|
### Current State (without MCP)
|
||||||
|
|
||||||
|
```
|
||||||
|
User → Orchestrator → LLM → Response
|
||||||
|
↓
|
||||||
|
Internal REST APIs only
|
||||||
|
```
|
||||||
|
|
||||||
|
The LLM is **passive** – it can only respond to requests and call internal APIs that we explicitly implement.
|
||||||
|
|
||||||
|
### Future State (with MCP)
|
||||||
|
|
||||||
|
```
|
||||||
|
User → Orchestrator → LLM → Tool Selection
|
||||||
|
↓
|
||||||
|
┌──────────┴──────────┐
|
||||||
|
↓ ↓
|
||||||
|
Internal Tools External MCP Servers
|
||||||
|
(Imixs REST) (SAP, Salesforce, ...)
|
||||||
|
```
|
||||||
|
|
||||||
|
The LLM becomes **active** – it can discover and invoke tools from any MCP-compliant system, including third-party enterprise applications.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Benefits
|
||||||
|
|
||||||
|
| Benefit | Description |
|
||||||
|
| ------------------------------ | ------------------------------------------------------------------------------------- |
|
||||||
|
| **Standardized Protocol** | One integration pattern for all external systems instead of custom implementations |
|
||||||
|
| **Tool Discovery** | LLM automatically learns available tools from connected MCP servers |
|
||||||
|
| **Bidirectional Integration** | Imixs can consume external tools AND expose its own tools to external AI systems |
|
||||||
|
| **Reduced Development Effort** | Leverage existing MCP servers (SAP, Microsoft, etc.) without building custom adapters |
|
||||||
|
| **Future-Proof** | As more vendors adopt MCP, integration becomes plug-and-play |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Architecture Overview
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
│ Imixs BPM Suite │
|
||||||
|
│ (Jakarta EE 10) │
|
||||||
|
├─────────────────────────────────────────────────────────────────────────────┤
|
||||||
|
│ │
|
||||||
|
│ ┌───────────────────────────────────────────────────────────────────┐ │
|
||||||
|
│ │ AI Orchestrator (CDI Bean) │ │
|
||||||
|
│ │ │ │
|
||||||
|
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │
|
||||||
|
│ │ │ Tool │ │ LLM Client │ │ MCP Client │ │ │
|
||||||
|
│ │ │ Registry │◄─►│ (OpenAI API) │ │ (external tools) │ │ │
|
||||||
|
│ │ └──────────────┘ └──────────────┘ └──────────────────┘ │ │
|
||||||
|
│ └───────────────────────────────────────────────────────────────────┘ │
|
||||||
|
│ │ │
|
||||||
|
│ ┌──────────────┴──────────────┐ │
|
||||||
|
│ ▼ ▼ │
|
||||||
|
│ ┌───────────────────────┐ ┌─────────────────────────────────┐ │
|
||||||
|
│ │ Internal Tools │ │ MCP Server Endpoint │ │
|
||||||
|
│ │ (REST Services) │ │ (JAX-RS) │ │
|
||||||
|
│ │ │ │ │ │
|
||||||
|
│ │ • WorkflowService │ │ GET /mcp/tools (discovery) │ │
|
||||||
|
│ │ • DocumentService │ │ POST /mcp/execute (invoke) │ │
|
||||||
|
│ │ • TaskService │ │ │ │
|
||||||
|
│ └───────────────────────┘ └─────────────────────────────────┘ │
|
||||||
|
│ │ │
|
||||||
|
└──────────────────────────────────────────────┼──────────────────────────────┘
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
External MCP Clients
|
||||||
|
(Claude, SAP, etc.)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Key Components
|
||||||
|
|
||||||
|
| Component | Responsibility |
|
||||||
|
| ------------------- | ----------------------------------------------------------------- |
|
||||||
|
| **Tool Registry** | Manages all available tools (internal + external MCP) |
|
||||||
|
| **AI Orchestrator** | Routes user requests to LLM, handles tool selection and execution |
|
||||||
|
| **MCP Client** | Connects to external MCP servers (e.g., SAP) |
|
||||||
|
| **MCP Server** | Exposes Imixs tools to external AI systems |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Use Cases
|
||||||
|
|
||||||
|
### Use Case 1: Cross-System Process Automation
|
||||||
|
|
||||||
|
**Scenario:** User says _"Create a new invoice in Imixs and sync the customer address from SAP"_
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Orchestrator sends prompt + available tools to LLM
|
||||||
|
2. LLM selects: imixs.startProcess + sap.getCustomerAddress
|
||||||
|
3. Orchestrator calls SAP MCP Server → gets address
|
||||||
|
4. Orchestrator calls Imixs REST API → creates invoice with address
|
||||||
|
5. LLM formulates response for user
|
||||||
|
```
|
||||||
|
|
||||||
|
### Use Case 2: External AI Access to Imixs
|
||||||
|
|
||||||
|
**Scenario:** A consultant uses Claude Desktop and asks _"Show me all open approval tasks in Imixs"_
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Claude Desktop connects to Imixs MCP Server
|
||||||
|
2. Calls GET /mcp/tools → discovers available tools
|
||||||
|
3. Calls POST /mcp/execute → invokes "getOpenTasks"
|
||||||
|
4. Claude presents the task list to the user
|
||||||
|
```
|
||||||
|
|
||||||
|
### Use Case 3: Intelligent Document Routing
|
||||||
|
|
||||||
|
**Scenario:** User uploads an invoice and says _"Process this invoice"_
|
||||||
|
|
||||||
|
```
|
||||||
|
1. LLM analyzes document (existing RAG capability)
|
||||||
|
2. LLM selects tools: imixs.startProcess + sap.validateVendor
|
||||||
|
3. Orchestrator validates vendor in SAP
|
||||||
|
4. Orchestrator starts approval workflow in Imixs
|
||||||
|
5. User receives confirmation with process ID
|
||||||
|
```
|
||||||
|
|
||||||
|
### Use Case 4: Multi-System Reporting
|
||||||
|
|
||||||
|
**Scenario:** User asks _"Compare our open orders in Imixs with pending deliveries in SAP"_
|
||||||
|
|
||||||
|
```
|
||||||
|
1. LLM selects: imixs.searchWorkitems + sap.getPendingDeliveries
|
||||||
|
2. Orchestrator fetches data from both systems
|
||||||
|
3. LLM correlates and summarizes the data
|
||||||
|
4. User receives a consolidated report
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Next Steps
|
||||||
|
|
||||||
|
1. **Phase 1:** Implement basic Orchestrator with internal tool registry
|
||||||
|
2. **Phase 2:** Add MCP Server endpoint to expose Imixs tools
|
||||||
|
3. **Phase 3:** Implement MCP Client for external server connections
|
||||||
|
4. **Phase 4:** Integration testing with SAP MCP Server
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. References
|
||||||
|
|
||||||
|
- [MCP Specification](https://modelcontextprotocol.io/)
|
||||||
|
- [Imixs-Workflow Documentation](https://www.imixs.org)
|
||||||
|
- [Jakarta EE 10 Specification](https://jakarta.ee/)
|
||||||
620
doc/MCP/README.md
Normal file
620
doc/MCP/README.md
Normal file
|
|
@ -0,0 +1,620 @@
|
||||||
|
# MCP Integration Architecture
|
||||||
|
|
||||||
|
## 1. The Core Concept
|
||||||
|
|
||||||
|
The Model Context Protocol (MCP) is an open standard that enables LLMs to discover and invoke tools from external systems through a unified protocol. Instead of building custom integrations for each enterprise application, MCP provides standardized tool discovery and execution.
|
||||||
|
|
||||||
|
For Dynamixs.AI, this means:
|
||||||
|
|
||||||
|
- **As MCP Server**: External AI systems (e.g., Claude Desktop) can interact with our workflow engine.
|
||||||
|
- **As MCP Client**: Our platform can leverage tools from external systems (e.g., SAP, Salesforce) without custom adapters.
|
||||||
|
|
||||||
|
### 1.1. The Problem
|
||||||
|
|
||||||
|
LLMs make mistakes. When an AI agent can directly execute actions across multiple systems, a single misinterpretation can cause significant damage:
|
||||||
|
|
||||||
|
```
|
||||||
|
User: "Create the new partner Müller GmbH"
|
||||||
|
|
||||||
|
LLM interprets: Partner → Supplier (wrong: should be Customer)
|
||||||
|
LLM executes: 1. Create supplier in SAP
|
||||||
|
2. Start invoice process in Imixs
|
||||||
|
3. Send invoice to supplier
|
||||||
|
|
||||||
|
Result: Wrong data in two systems, manual cleanup required by human interaction.
|
||||||
|
```
|
||||||
|
|
||||||
|
Autonomous AI execution without human oversight creates unacceptable business risk.
|
||||||
|
|
||||||
|
### 1.2.The Solution
|
||||||
|
|
||||||
|
We combine MCP's integration capabilities with Dynamixs.AI's process control. The AI **proposes** actions – humans **approve** them through a standard BPMN process:
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────┐ ┌──────────────────┐ ┌─────────────┐
|
||||||
|
│ AI creates │────►│ Human reviews │────►│ Workflow │
|
||||||
|
│ action plan │ │ and approves │ │ executes │
|
||||||
|
└─────────────┘ └──────────────────┘ └─────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
This approach delivers:
|
||||||
|
|
||||||
|
- **AI-powered automation** – intelligent tool selection and planning
|
||||||
|
- **Human oversight** – every critical action requires explicit approval
|
||||||
|
- **Full audit trail** – all decisions documented in the workflow history
|
||||||
|
- **Unlimited customization** – the standard AI execution process serves as a foundation; organizations can extend it into complex, domain-specific workflows with additional approval steps, escalations, conditional routing, or multi-level authorization
|
||||||
|
|
||||||
|
## 2. Architecture
|
||||||
|
|
||||||
|
### 2.1 High-Level Overview
|
||||||
|
|
||||||
|
The architecture consists of five core components:
|
||||||
|
|
||||||
|
```
|
||||||
|
┌──────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
│ Dynamixs.AI │
|
||||||
|
├──────────────────────────────────────────────────────────────────────────────┤
|
||||||
|
│ │
|
||||||
|
│ ┌────────────────────────────────────────────────────────────────────┐ │
|
||||||
|
│ │ AI Orchestrator │ │
|
||||||
|
│ │ │ │
|
||||||
|
│ │ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │ │
|
||||||
|
│ │ │ Tool Registry │ │ LLM Client │ │ MCP Client │ │ │
|
||||||
|
│ │ └────────────────┘ └────────────────┘ └────────────────┘ │ │
|
||||||
|
│ └────────────────────────────────────────────────────────────────────┘ │
|
||||||
|
│ │ │ │
|
||||||
|
│ ▼ ▼ │
|
||||||
|
│ ┌─────────────────────────────┐ ┌────────────────────────┐ │
|
||||||
|
│ │ AI Execution Process │ │ External MCP Servers │ │
|
||||||
|
│ │ (BPMN) │ │ (SAP, Salesforce...) │ │
|
||||||
|
│ │ │ └────────────────────────┘ │
|
||||||
|
│ │ • Human Review Task │ │
|
||||||
|
│ │ • Action Execution │ │
|
||||||
|
│ │ • Audit Trail │ │
|
||||||
|
│ └─────────────────────────────┘ │
|
||||||
|
│ │ │
|
||||||
|
│ ▼ │
|
||||||
|
│ ┌─────────────────────────────┐ │
|
||||||
|
│ │ Imixs Workflow Engine │ │
|
||||||
|
│ │ + Internal REST Services │ │
|
||||||
|
│ └─────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
├──────────────────────────────────────────────────────────────────────────────┤
|
||||||
|
│ MCP Server Endpoint │
|
||||||
|
│ (exposes tools externally) │
|
||||||
|
└──────────────────────────────────────────────────────────────────────────────┘
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
External MCP Clients
|
||||||
|
(Claude, SAP, etc.)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Components**
|
||||||
|
|
||||||
|
| Component | Description |
|
||||||
|
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||||
|
| **AI Orchestrator** | Central coordinator. Receives user requests, interacts with the LLM to create execution plans, and initiates the approval workflow. |
|
||||||
|
| **Tool Registry** | Maintains a catalog of all available tools – both internal Dynamixs.AI services and external tools discovered from MCP servers. Provides tool definitions to the LLM for function calling. |
|
||||||
|
| **LLM Client** | Connects to the local LLM (llama.cpp via OpenAI API). Sends prompts with tool definitions and receives structured execution plans. |
|
||||||
|
| **MCP Client** | Discovers and invokes tools from external MCP servers (e.g., SAP, Salesforce). Translates MCP protocol calls into the Tool Registry format. |
|
||||||
|
| **MCP Server Endpoint** | Exposes Dynamixs.AI workflow capabilities to external AI systems. Allows tools like Claude Desktop or third-party orchestrators to start processes or query tasks. |
|
||||||
|
| **AI Execution Process** | A BPMN process that handles human review and approval. Stores the execution plan, presents it to the user, and executes approved actions through the workflow engine. |
|
||||||
|
|
||||||
|
### 2.2 Request Flow
|
||||||
|
|
||||||
|
The following sequence illustrates how a user request flows through the system:
|
||||||
|
|
||||||
|
```
|
||||||
|
┌──────┐ ┌──────────────┐ ┌─────┐ ┌──────────────┐ ┌─────────┐
|
||||||
|
│ User │ │ Orchestrator │ │ LLM │ │ AI Execution │ │ Workflow│
|
||||||
|
└──┬───┘ └──────┬───────┘ └──┬──┘ │ Process │ │ Engine │
|
||||||
|
│ │ │ └──────┬───────┘ └────┬────┘
|
||||||
|
│ 1. Request │ │ │ │
|
||||||
|
│───────────────►│ │ │ │
|
||||||
|
│ │ │ │ │
|
||||||
|
│ │ 2. Get tools │ │ │
|
||||||
|
│ │────────────────│ │ │
|
||||||
|
│ │ (from Tool Registry) │ │
|
||||||
|
│ │ │ │ │
|
||||||
|
│ │ 3. Create plan │ │ │
|
||||||
|
│ │───────────────►│ │ │
|
||||||
|
│ │ │ │ │
|
||||||
|
│ │ 4. Return plan │ │ │
|
||||||
|
│ │◄───────────────│ │ │
|
||||||
|
│ │ │ │ │
|
||||||
|
│ │ 5. Start process │ │
|
||||||
|
│ │───────────────────────────────►│ │
|
||||||
|
│ │ │ │ │
|
||||||
|
│ 6. Review task appears in user's tasklist │ │
|
||||||
|
│◄────────────────────────────────────────────────│ │
|
||||||
|
│ │ │ │ │
|
||||||
|
│ 7. Approve │ │ │ │
|
||||||
|
│────────────────────────────────────────────────►│ │
|
||||||
|
│ │ │ │ │
|
||||||
|
│ │ │ │ 8. Execute │
|
||||||
|
│ │ │ │─────────────────►│
|
||||||
|
│ │ │ │ │
|
||||||
|
│ 9. Result │ │ │ │
|
||||||
|
│◄───────────────────────────────────────────────────────────────────│
|
||||||
|
│ │ │ │ │
|
||||||
|
```
|
||||||
|
|
||||||
|
1. User submits a natural language request (e.g., "Create customer Müller GmbH in SAP and start invoice process")
|
||||||
|
2. Orchestrator retrieves available tools from the Tool Registry (internal + external MCP tools)
|
||||||
|
3. Orchestrator sends the request along with tool definitions to the LLM
|
||||||
|
4. LLM analyzes the request and returns a structured execution plan
|
||||||
|
5. Orchestrator creates a new AI Execution Process instance with the plan attached
|
||||||
|
6. A review task appears in the user's tasklist
|
||||||
|
7. User reviews the plan and approves (or rejects/modifies)
|
||||||
|
8. Upon approval, the workflow engine executes the planned actions
|
||||||
|
9. User receives confirmation with results
|
||||||
|
|
||||||
|
### 2.3 AI Orchestrator
|
||||||
|
|
||||||
|
Dynamixs.AI already provides powerful LLM integration within BPMN processes. Process designers can embed prompts directly into the model using BPMN Text Annotations. A generic plugin evaluates these annotations at runtime, calls the LLM, and uses the response to drive process decisions – for example, routing a document based on its AI-classified content or generating a summary for the next approver.
|
||||||
|
|
||||||
|
This approach works well for **predefined workflows**. The process designer knows in advance which LLM calls are needed and where. The prompts are fixed, the integration points are explicit, and the sequence flow controls everything.
|
||||||
|
|
||||||
|
But what happens when the user's intent is not predefined? When a user types _"Create a customer in SAP and start an invoice process"_, there is no existing BPMN model for such kind of ad-hoc request. The system would need a process for every possible combination of actions – which is impossible.
|
||||||
|
|
||||||
|
This is where the Dynamixs.AI Orchestrator comes in. Instead of embedding AI into fixed workflows, the Orchestrator inverts the relationship: **Dynamixs.AI creates the workflow**. The user expresses intent in natural language, the LLM selects the appropriate tools and assembles an execution plan, and the result flows into a BPMN process for human approval and execution.
|
||||||
|
|
||||||
|
The two approaches complement each other:
|
||||||
|
|
||||||
|
Key Design Decisions:
|
||||||
|
|
||||||
|
| Approach | Use Case |
|
||||||
|
| --------------------- | ------------------------------------------------------------------------------------------------------- |
|
||||||
|
| BPMN with embedded AI | Predefined processes where AI enhances specific steps (classification, summarization, decision support) |
|
||||||
|
| Ad-hoc AI Workflows | Ad-hoc requests where the user defines the goal and Dynamixs.AI determines the steps |
|
||||||
|
|
||||||
|
The AI Orchestrator does not replace the existing LLM integration. It adds a new capability: Letting users initiate complex, cross-system actions through natural language – with full BPMN-based control over execution.
|
||||||
|
|
||||||
|
#### 2.3.1 Implementation
|
||||||
|
|
||||||
|
The AI Orchestrator is the central coordinator between the user, the LLM, and the workflow engine. It has one primary job: Transform a natural language request into a controlled, auditable workflow process.
|
||||||
|
|
||||||
|
It does not execute actions itself. It does not make decisions. It coordinates.
|
||||||
|
|
||||||
|
Think of it as a receptionist: It receives the request, consults with the right people (the LLM), prepares the paperwork (the execution plan), and hands it off to the proper department (the workflow engine). The receptionist never performs the actual work – but nothing happens without going through them first.
|
||||||
|
The Orchestrator is responsible for:
|
||||||
|
|
||||||
|
- **Receiving requests** – Natural language input from users via UI, chat interface, or API
|
||||||
|
- **Gathering context** – Retrieving available tools, user permissions, and relevant business data
|
||||||
|
- **Consulting the LLM** – Sending the request along with tool definitions and receiving a structured execution plan
|
||||||
|
- **Quality control** – Checking if the LLM response is valid, complete, and within acceptable confidence levels
|
||||||
|
- **Initiating the workflow** – Creating an AI Execution Process instance that contains the plan for human review
|
||||||
|
|
||||||
|
```java
|
||||||
|
@ApplicationScoped
|
||||||
|
public class AiOrchestrator {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ToolRegistry toolRegistry;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
LlmClient llmClient;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
WorkflowService workflowService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Processes a user request and starts an AI Execution Process.
|
||||||
|
*
|
||||||
|
* @param prompt The natural language request
|
||||||
|
* @return The created workitem containing the execution plan
|
||||||
|
*/
|
||||||
|
public ItemCollection processRequest(String prompt) {
|
||||||
|
// 1. Get available tools
|
||||||
|
List<ToolDefinition> tools = toolRegistry.getAllTools();
|
||||||
|
|
||||||
|
// 2. Create execution plan via LLM
|
||||||
|
ExecutionPlan plan = llmClient.createPlan(prompt, tools);
|
||||||
|
|
||||||
|
// 3. Start AI Execution Process
|
||||||
|
ItemCollection workitem = new ItemCollection();
|
||||||
|
workitem.setModelVersion("ai-execution-1.0");
|
||||||
|
workitem.setTaskID(1000);
|
||||||
|
workitem.setItemValue("ai.prompt", prompt);
|
||||||
|
workitem.setItemValue("ai.plan", plan.toJson());
|
||||||
|
workitem.setItemValue("ai.confidence", plan.getConfidence());
|
||||||
|
|
||||||
|
return workflowService.processWorkItem(workitem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2.3.2 How This Component Works
|
||||||
|
|
||||||
|
When a request arrives, the Orchestrator follows a strict sequence:
|
||||||
|
|
||||||
|
**Step 1: Collect available tools.** The Orchestrator asks the Tool Registry for all tools the current user is allowed to use. This includes internal Dynamix.AI services and external MCP tools. The result is a list of tool definitions with names, descriptions, and parameter schemas.
|
||||||
|
|
||||||
|
**Step 2: Build the LLM prompt.** The Orchestrator constructs a prompt that contains the user's request, the available tools, and any relevant context (e.g., current user, business domain). The prompt instructs the LLM to analyze the request and return a structured execution plan.
|
||||||
|
|
||||||
|
**Step 3: Call the LLM.** The request goes to the local LLM via the OpenAI-compatible API. The LLM responds with a JSON structure containing the selected tools, parameters, execution order, and a confidence score.
|
||||||
|
|
||||||
|
**Step 4: Validate the response.** The Orchestrator checks if the plan is well-formed. Are all referenced tools valid? Are required parameters present? Is the confidence score above the minimum threshold? If validation fails, the Orchestrator may retry with a refined prompt or return an error to the user.
|
||||||
|
|
||||||
|
**Step 5: Start the AI Execution Process.** The Orchestrator creates a new workflow instance of type "AI Execution Request". The execution plan is stored as process data. From this point on, the workflow engine takes over – the Orchestrator's job is done.
|
||||||
|
|
||||||
|
The Orchestrator is intentionally simple. It contains no business logic, no tool-specific code, no execution capabilities. This separation ensures that all critical actions flow through the controlled environment of the BPMN process.
|
||||||
|
|
||||||
|
### 2.4 Tool Registry
|
||||||
|
|
||||||
|
The AI Orchestrator needs to tell the LLM what actions are possible. Without this information, the LLM would have no idea what tools exist, what they do, or how to call them. It would be like asking someone to cook dinner without telling them what ingredients and appliances are available.
|
||||||
|
|
||||||
|
In a simple system with only internal services, this could be hardcoded. But Dynamixs.AI operates in a heterogeneous environment. Some tools are internal REST services – starting a process, querying tasks, updating documents. Others come from external MCP servers – creating a customer in SAP, sending an email through Microsoft Graph, querying Salesforce records. New tools may be added at runtime when an administrator connects a new MCP server.
|
||||||
|
|
||||||
|
Managing this complexity requires a dedicated component. The Tool Registry serves as the single source of truth for all available tools – regardless of where they come from or how they are implemented.
|
||||||
|
|
||||||
|
#### 2.4.1 Implementation
|
||||||
|
|
||||||
|
The Tool Registry is a catalog of tool definitions. Each definition describes one atomic action the system can perform: a name, a description, input parameters, and metadata about the tool's origin and risk level.
|
||||||
|
The registry has three core responsibilities:
|
||||||
|
|
||||||
|
**Aggregation.** It collects tools from multiple sources. Internal tools are registered at application startup. External tools are discovered dynamically by querying connected MCP servers. The registry merges these into a unified catalog.
|
||||||
|
|
||||||
|
**Normalization.** Tools from different sources use different formats. Internal services might be defined as Java methods with annotations. MCP servers deliver tool definitions in their own JSON schema. The registry normalizes everything into a consistent format that the LLM can understand.
|
||||||
|
|
||||||
|
**Access Control.** Not every user should see every tool. A clerk should not be offered tools that delete financial records. The registry filters the available tools based on the current user's roles and permissions. When the Orchestrator asks for tools, it receives only those the user is authorized to use.
|
||||||
|
|
||||||
|
The Tool Registry does not execute tools. It only knows about them. Execution is handled by other components – internal services are called directly, MCP tools go through the MCP Client.
|
||||||
|
|
||||||
|
#### 2.4.2 How it works
|
||||||
|
|
||||||
|
The Tool Registry operates in two phases: initialization and runtime.
|
||||||
|
|
||||||
|
**Initialization Phase**
|
||||||
|
|
||||||
|
At application startup, the registry loads internal tool definitions. These are typically defined through annotations on service methods or through configuration files. Each internal tool maps directly to an existing REST endpoint or service method in Dynamixs.AI – for example, imixs.startProcess, imixs.getOpenTasks, or imixs.completeWorkitem.
|
||||||
|
|
||||||
|
Next, the registry contacts all configured MCP servers. For each server, it calls the standard MCP discovery endpoint to retrieve the server's tool catalog. These external tools are added to the registry with metadata indicating their origin – for example, sap.createCustomer or salesforce.queryAccounts.
|
||||||
|
|
||||||
|
If an MCP server is unavailable at startup, the registry logs a warning but continues. Missing servers can be re-discovered later through a manual refresh or scheduled polling.
|
||||||
|
|
||||||
|
**Runtime Phase**
|
||||||
|
|
||||||
|
When the Orchestrator requests the tool catalog, the registry performs the following steps:
|
||||||
|
|
||||||
|
First, it identifies the current user and their roles. This information comes from the security context of the current request.
|
||||||
|
|
||||||
|
Second, it filters the catalog. Each tool definition includes a required permission level. Tools that exceed the user's authorization are excluded from the result.
|
||||||
|
|
||||||
|
Third, it formats the output. The LLM expects tool definitions in a specific JSON schema compatible with OpenAI function calling. The registry transforms its internal representation into this format.
|
||||||
|
|
||||||
|
The result is a list of tool definitions ready for inclusion in the LLM prompt. The Orchestrator receives only what it needs – no internal implementation details, no execution logic, just clean definitions.
|
||||||
|
|
||||||
|
**Dynamic Updates**
|
||||||
|
|
||||||
|
The tool catalog is not static. Administrators can connect new MCP servers at runtime. When this happens, the registry discovers the new server's tools and adds them to the catalog. Existing workflow instances are not affected – they continue with the tools that were available when they started. New requests see the updated catalog immediately.
|
||||||
|
|
||||||
|
This dynamic behavior is essential for enterprise environments where integrations evolve over time. Connecting a new system should not require application restarts or code deployments.
|
||||||
|
|
||||||
|
### 2.5 MCP Client
|
||||||
|
|
||||||
|
The Tool Registry knows about external tools. But knowing about a tool and actually calling it are two different things. When the workflow engine needs to execute sap.createCustomer, something has to translate that request into an actual call to the SAP MCP server, handle the response, and deal with any errors that occur.
|
||||||
|
|
||||||
|
This is not a trivial task. MCP is a protocol with its own conventions for authentication, request formatting, error handling, and response parsing. Each MCP server might have slightly different behavior. Network issues can cause timeouts. Servers might be temporarily unavailable. Responses need validation before they can be trusted.
|
||||||
|
|
||||||
|
Without a dedicated component, this complexity would leak into the workflow engine, the Orchestrator, or worse – into individual BPMN process scripts. Every place that needs to call an external tool would implement its own HTTP calls, its own error handling, its own retry logic. This leads to inconsistency, bugs, and maintenance nightmares.
|
||||||
|
|
||||||
|
The MCP Client encapsulates all of this. It provides a clean interface: Give me a tool name and parameters, and I will handle the rest.
|
||||||
|
|
||||||
|
#### 2.5.1 Implementation
|
||||||
|
|
||||||
|
The MCP Client is the gateway to the external world. It handles all communication with external MCP servers – discovery, invocation, and error management.
|
||||||
|
|
||||||
|
The client has three core responsibilities:
|
||||||
|
|
||||||
|
**Discovery.** When the application needs to know what tools an MCP server offers, the client queries the server's discovery endpoint. It retrieves the list of available tools, their descriptions, and their parameter schemas. This information feeds into the Tool Registry.
|
||||||
|
|
||||||
|
**Invocation.** When a workflow needs to execute an external tool, the client translates the request into the MCP protocol format, sends it to the appropriate server, waits for the response, and returns the result in a normalized format that Dynamixs.AI can process.
|
||||||
|
|
||||||
|
**Resilience.** External systems fail. Networks have latency. Servers go down for maintenance. The MCP Client handles these realities gracefully. It implements timeouts, retries with exponential backoff, circuit breakers for repeatedly failing servers, and meaningful error messages when things go wrong.
|
||||||
|
|
||||||
|
The MCP Client does not decide which tools to call. That decision is made by the LLM and approved by the user. The client simply executes what it is told – reliably and predictably.
|
||||||
|
|
||||||
|
#### 2.5.2 How it works
|
||||||
|
|
||||||
|
The MCP Client manages a pool of server connections. Each connection represents one external MCP server – SAP, Salesforce, Microsoft Graph, or any other MCP-compliant system.
|
||||||
|
|
||||||
|
**Server Configuration**
|
||||||
|
|
||||||
|
Administrators configure MCP servers through the Dynamixs.AI administration interface. For each server, they provide:
|
||||||
|
|
||||||
|
- A unique identifier (e.g., sap-production, salesforce-emea)
|
||||||
|
- The server's base URL
|
||||||
|
- Authentication credentials (API keys, OAuth tokens, or other mechanisms)
|
||||||
|
- Optional settings like timeout values and retry policies
|
||||||
|
|
||||||
|
The client stores these configurations and establishes connections on demand. It does not maintain permanent connections – each request opens a new HTTP connection, which aligns with the stateless nature of REST-based MCP servers.
|
||||||
|
|
||||||
|
**Tool Discovery**
|
||||||
|
|
||||||
|
When the Tool Registry requests tools from an external server, the MCP Client performs a discovery call. It sends a request to the server's /tools endpoint (or equivalent, depending on MCP version) and receives a JSON response listing all available tools.
|
||||||
|
|
||||||
|
The client parses this response and transforms it into the internal tool definition format. It adds metadata about the server origin so that later invocations know where to route requests. The transformed definitions are returned to the Tool Registry for inclusion in the catalog.
|
||||||
|
|
||||||
|
Discovery happens at application startup and can be triggered manually by administrators when they know a server's capabilities have changed.
|
||||||
|
|
||||||
|
**Tool Invocation**
|
||||||
|
|
||||||
|
When the workflow engine executes an external tool, the MCP Client receives a request containing:
|
||||||
|
|
||||||
|
- The fully qualified tool name (e.g., sap.createCustomer)
|
||||||
|
- The parameters as a key-value map
|
||||||
|
- Context information like correlation IDs for tracing
|
||||||
|
|
||||||
|
The client identifies the target server from the tool name prefix. It constructs an MCP-compliant request payload, adds authentication headers, and sends the request to the server's execution endpoint.
|
||||||
|
|
||||||
|
The response follows one of three paths:
|
||||||
|
|
||||||
|
**Success.** The server returns a result. The client extracts the relevant data, transforms it into a normalized format, and returns it to the workflow engine. The workflow continues with the next step.
|
||||||
|
|
||||||
|
**Transient failure.** The server returns a temporary error (timeout, rate limit, server overload). The client waits and retries according to its retry policy. If all retries fail, it returns an error that the workflow can handle – perhaps by creating a manual task for an administrator.
|
||||||
|
|
||||||
|
**Permanent failure.** The server returns a definitive error (invalid parameters, resource not found, permission denied). The client returns this error immediately without retry. The workflow decides how to proceed – maybe by notifying the user, maybe by taking an alternative path.
|
||||||
|
|
||||||
|
**Security Considerations**
|
||||||
|
|
||||||
|
The MCP Client handles sensitive data. Authentication credentials must be stored securely. Request and response payloads might contain personal or financial information that should not be logged in full. The client implements appropriate safeguards:
|
||||||
|
|
||||||
|
- Credentials are stored encrypted and never logged
|
||||||
|
- Payload logging is configurable and defaults to minimal (tool name and status only)
|
||||||
|
- All communication uses TLS
|
||||||
|
- Authentication tokens are refreshed automatically when they expire
|
||||||
|
|
||||||
|
### 2.6 MCP Server Endpoint
|
||||||
|
|
||||||
|
So far, we have discussed how Dynamixs.AI consumes external tools. But integration is a two-way street. Just as our platform benefits from calling SAP or Salesforce, other systems might benefit from calling us.
|
||||||
|
|
||||||
|
Consider a consultant working in Claude Desktop. They want to check the status of an approval process in Dynamixs.AI. Without an MCP Server, they would have to switch applications, log into Dynamixs.AI, navigate to the right screen, and search for the process. With an MCP Server, they simply ask Claude: "Show me the open approval tasks for project Alpha." Claude calls our MCP endpoint, retrieves the data, and presents it directly.
|
||||||
|
|
||||||
|
Or consider a scenario where SAP needs to trigger a Dynamixs.AI workflow. When a new purchase order is created in SAP, an approval process should start in our system. If SAP's AI orchestrator can discover and call our tools, this integration becomes configuration rather than custom development.
|
||||||
|
|
||||||
|
The MCP Server Endpoint transforms Dynamixs.AI from a closed system into a participant in a larger ecosystem. We become a tool provider, not just a tool consumer.
|
||||||
|
|
||||||
|
#### 2.6.1 Implementation
|
||||||
|
|
||||||
|
The MCP Server Endpoint exposes selected Dynamixs.AI capabilities as MCP-compliant tools. External AI systems can discover what we offer and invoke our tools using the standard MCP protocol.
|
||||||
|
|
||||||
|
The endpoint has three core responsibilities:
|
||||||
|
|
||||||
|
**Tool Publication.** It defines which internal capabilities are exposed externally. Not everything should be accessible from outside – only a curated set of tools that make sense for external consumption. Each published tool has a clear description, well-defined parameters, and documented behavior.
|
||||||
|
|
||||||
|
**Protocol Compliance.** External clients expect MCP-standard behavior. The endpoint implements the required discovery and invocation interfaces according to the MCP specification. Any MCP-compliant client should be able to connect without custom integration code.
|
||||||
|
|
||||||
|
**Security Enforcement.** External access requires strict security. Every request must be authenticated. Every tool invocation must be authorized. The endpoint validates that the caller has permission to perform the requested action before anything executes.
|
||||||
|
The MCP Server Endpoint is not a full mirror of our internal capabilities. It is a carefully designed external API that exposes what we choose to share, in the way we choose to share it.
|
||||||
|
|
||||||
|
#### 2.6.2 How it works
|
||||||
|
|
||||||
|
The MCP Server Endpoint is implemented as a set of JAX-RS resources within the Dynamixs.AI application. It exposes two primary interfaces: discovery and invocation.
|
||||||
|
|
||||||
|
**Tool Discovery**
|
||||||
|
|
||||||
|
External clients begin by asking what tools are available. They call the discovery endpoint – typically a GET request to /mcp/tools. The endpoint responds with a JSON array of tool definitions.
|
||||||
|
|
||||||
|
Each tool definition includes:
|
||||||
|
|
||||||
|
- A unique name (e.g., dynamixs.startProcess, dynamixs.getOpenTasks)
|
||||||
|
- A human-readable description explaining what the tool does
|
||||||
|
- A parameter schema defining required and optional inputs
|
||||||
|
- Metadata like version information and documentation links
|
||||||
|
|
||||||
|
The discovery response is generated dynamically. It reflects the current state of published tools, filtered by the caller's permissions. An authenticated administrator might see management tools that are hidden from regular API consumers.
|
||||||
|
|
||||||
|
**Tool Invocation**
|
||||||
|
|
||||||
|
When an external client wants to execute a tool, it sends a POST request to the invocation endpoint – typically /mcp/execute. The request body contains the tool name and parameters in JSON format.
|
||||||
|
|
||||||
|
The endpoint processes the request through several stages:
|
||||||
|
|
||||||
|
**Authentication.** The request must include valid credentials – an API key, OAuth token, or other configured mechanism. Invalid or missing credentials result in immediate rejection.
|
||||||
|
|
||||||
|
**Authorization.** The endpoint checks whether the authenticated caller is permitted to invoke the requested tool. Permissions are configured per tool and per client. A client might be allowed to query tasks but not to complete them.
|
||||||
|
|
||||||
|
**Validation.** The parameters are validated against the tool's schema. Missing required parameters, wrong data types, or invalid values are rejected with descriptive error messages.
|
||||||
|
|
||||||
|
**Execution.** The endpoint translates the MCP request into an internal service call. This might mean calling the WorkflowService to start a process, the DocumentService to retrieve a file, or any other internal component. The execution happens within a proper transaction context with full audit logging.
|
||||||
|
|
||||||
|
**Response.** The result is transformed into MCP-compliant format and returned to the caller. Success responses include the operation result. Error responses include error codes and messages that help the caller understand what went wrong.
|
||||||
|
|
||||||
|
**Published Tools**
|
||||||
|
|
||||||
|
The initial set of published tools focuses on core workflow operations:
|
||||||
|
|
||||||
|
| Tool | Description |
|
||||||
|
| ------------------------- | -------------------------------------------------- |
|
||||||
|
| dynamixs.startProcess | Creates a new process instance of a specified type |
|
||||||
|
| dynamixs.getOpenTasks | Retrieves tasks assigned to a user or group |
|
||||||
|
| dynamixs.getProcessStatus | Returns the current state of a process instance |
|
||||||
|
| dynamixs.completeTask | Completes a task with provided form data |
|
||||||
|
| dynamixs.searchWorkitems | Searches for workitems matching specified criteria |
|
||||||
|
| dynamixs.getDocument | Retrieves a document attached to a process |
|
||||||
|
|
||||||
|
This list will evolve based on real-world usage. Tools that prove valuable will be enhanced. Tools that create security concerns might be restricted or removed. The goal is a stable, useful API – not a complete exposure of every internal function.
|
||||||
|
|
||||||
|
**Security Considerations**
|
||||||
|
|
||||||
|
The MCP Server Endpoint is an attack surface. It accepts requests from external systems over the network. Security is not optional – it is fundamental to the design.
|
||||||
|
|
||||||
|
All communication requires TLS. Plain HTTP requests are rejected.
|
||||||
|
|
||||||
|
Authentication is mandatory. Anonymous access is not supported. Clients must be registered and issued credentials before they can make any calls.
|
||||||
|
|
||||||
|
Rate limiting prevents abuse. Clients that send too many requests in a short period are throttled. This protects the system from accidental overload and deliberate denial-of-service attempts.
|
||||||
|
|
||||||
|
Audit logging captures every request. Who called what, when, with which parameters, and what was the result. This creates accountability and supports incident investigation.
|
||||||
|
|
||||||
|
Input validation is strict. The endpoint assumes all input is potentially malicious. Parameters are validated, sanitized, and bounded before use. SQL injection, path traversal, and similar attacks are blocked by design.
|
||||||
|
|
||||||
|
### 2.7 AI Execution Process
|
||||||
|
|
||||||
|
Everything we have discussed so far – the Orchestrator, the Tool Registry, the MCP Client – is infrastructure. Important infrastructure, but infrastructure nonetheless. None of it matters if we cannot answer one fundamental question: Who controls the AI?
|
||||||
|
|
||||||
|
The uncomfortable truth about AI systems is that they make mistakes. They misinterpret requests. They hallucinate capabilities. They confidently execute the wrong action. In a demo, this is embarrassing. In a production system handling real business data, this is dangerous.
|
||||||
|
|
||||||
|
Most AI integration approaches try to solve this through technical means: Better prompts. Confidence thresholds. Guardrails and filters. These help, but they do not eliminate the problem. An LLM that is 95% accurate still fails one in twenty times. In a system processing hundreds of requests per day, that means multiple failures per week.
|
||||||
|
|
||||||
|
The real solution is not technical – it is organizational. Humans must remain in control. The AI proposes, the human decides. This is not a limitation to work around. It is a feature to embrace.
|
||||||
|
|
||||||
|
And here is where Dynamixs.AI has an unfair advantage: We are a process management platform. Controlled execution with human decision points is literally what we do. We do not need to invent a new approval mechanism. We do not need to build a task management system. We do not need to implement audit trails. We have all of this already.
|
||||||
|
|
||||||
|
The AI Execution Process is simply a BPMN process like any other in our system. It uses the same engine, the same task management, the same user interface, the same audit logging. The only difference is what triggers it and what it contains.
|
||||||
|
|
||||||
|
#### 2.7.1 Implementation
|
||||||
|
|
||||||
|
The AI Execution Process is a BPMN workflow that governs the lifecycle of an AI-generated execution plan. It receives the plan from the Orchestrator, presents it to a human for review, and executes the approved actions through the workflow engine.
|
||||||
|
|
||||||
|
The process has four core responsibilities:
|
||||||
|
|
||||||
|
**Presentation.** The execution plan is technical – a JSON structure with tool names, parameters, and metadata. Users need to see this in a human-readable form. The process transforms the plan into a clear summary: What will happen, in what order, affecting which systems.
|
||||||
|
|
||||||
|
**Decision Capture.** The user reviews the plan and makes a decision: Approve, reject, or modify. This decision is recorded as part of the process history. Not just what was decided, but who decided it, when, and with what justification.
|
||||||
|
|
||||||
|
**Controlled Execution.** Upon approval, the process executes each action in the plan. This happens sequentially, with error handling at each step. If one action fails, the process can pause, notify the user, and wait for guidance rather than blindly continuing.
|
||||||
|
|
||||||
|
**Result Documentation.** Every action's outcome is recorded. Success or failure, returned data, error messages – everything becomes part of the permanent process record. Weeks or months later, anyone can look at the process history and understand exactly what happened.
|
||||||
|
|
||||||
|
#### 2.7.1 How it works
|
||||||
|
|
||||||
|
The AI Execution Process follows a straightforward flow with well-defined stages.
|
||||||
|
|
||||||
|
**Stage 1: Initialization**
|
||||||
|
|
||||||
|
The Orchestrator creates a new process instance and populates it with the execution plan. The process data includes:
|
||||||
|
|
||||||
|
- The original user prompt
|
||||||
|
- The complete execution plan as generated by the LLM
|
||||||
|
- Metadata: timestamp, requesting user, confidence score, source context
|
||||||
|
- A human-readable summary generated from the plan
|
||||||
|
|
||||||
|
The process starts in a "Pending Review" state. A task appears in the user's task list.
|
||||||
|
|
||||||
|
**Stage 2: Human Review**
|
||||||
|
|
||||||
|
The user opens the review task and sees a structured presentation of what the AI wants to do:
|
||||||
|
|
||||||
|
```
|
||||||
|
╔══════════════════════════════════════════════════════════════════╗
|
||||||
|
║ AI Execution Request ║
|
||||||
|
╠══════════════════════════════════════════════════════════════════╣
|
||||||
|
║ ║
|
||||||
|
║ Your request: ║
|
||||||
|
║ "Create customer Müller GmbH in SAP and start invoice process" ║
|
||||||
|
║ ║
|
||||||
|
║ Planned actions: ║
|
||||||
|
║ ║
|
||||||
|
║ ┌────┬─────────────────────┬─────────────────────────────────┐ ║
|
||||||
|
║ │ # │ Action │ Details │ ║
|
||||||
|
║ ├────┼─────────────────────┼─────────────────────────────────┤ ║
|
||||||
|
║ │ 1 │ sap.createCustomer │ Name: Müller GmbH │ ║
|
||||||
|
║ │ │ │ Type: Customer │ ║
|
||||||
|
║ │ │ │ Country: Germany │ ║
|
||||||
|
║ ├────┼─────────────────────┼─────────────────────────────────┤ ║
|
||||||
|
║ │ 2 │ dynamixs.start │ Process: Invoice │ ║
|
||||||
|
║ │ │ Process │ Link to: Customer from Step 1 │ ║
|
||||||
|
║ └────┴─────────────────────┴─────────────────────────────────┘ ║
|
||||||
|
║ ║
|
||||||
|
║ Confidence: 94% ║
|
||||||
|
║ ║
|
||||||
|
║ ┌──────────┐ ┌──────────┐ ┌──────────┐ ║
|
||||||
|
║ │ Approve │ │ Reject │ │ Modify │ ║
|
||||||
|
║ └──────────┘ └──────────┘ └──────────┘ ║
|
||||||
|
║ ║
|
||||||
|
╚══════════════════════════════════════════════════════════════════╝
|
||||||
|
```
|
||||||
|
|
||||||
|
The user has three options:
|
||||||
|
|
||||||
|
**Approve** – The plan is correct. Proceed with execution.
|
||||||
|
|
||||||
|
**Reject** – The plan is wrong or unwanted. Cancel the process. The user can optionally provide a reason for rejection.
|
||||||
|
**Modify** – The plan is partially correct but needs adjustment. The user can edit parameters, remove actions, or add comments. The modified plan is saved and can be approved or sent back to the AI for revision.
|
||||||
|
|
||||||
|
**Stage 3: Execution**
|
||||||
|
|
||||||
|
Upon approval, the process moves to the execution stage. A script task iterates through the planned actions and executes them one by one.
|
||||||
|
|
||||||
|
For each action:
|
||||||
|
|
||||||
|
1. The process identifies whether this is an internal tool or an external MCP tool
|
||||||
|
2. Internal tools are executed via direct service calls
|
||||||
|
3. External tools are executed via the MCP Client
|
||||||
|
4. The result is captured and stored in the process data
|
||||||
|
5. Success or failure determines the next step
|
||||||
|
|
||||||
|
If an action fails, the process does not automatically abort. Instead, it moves to an error handling state where the user can decide: Retry the failed action, skip it and continue, or abort the entire execution. This human-in-the-loop error handling prevents cascading failures.
|
||||||
|
|
||||||
|
**Stage 4: Completion**
|
||||||
|
|
||||||
|
After all actions complete (or the user aborts), the process moves to its final state. A summary is generated:
|
||||||
|
|
||||||
|
- Total actions attempted
|
||||||
|
- Successful actions with their results
|
||||||
|
- Failed actions with error details
|
||||||
|
- Overall execution time
|
||||||
|
|
||||||
|
The user receives a notification. The process remains in the archive as a permanent record.
|
||||||
|
|
||||||
|
**BPMN Model Structure**
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────┐ ┌─────────────┐ ┌──────────────────────────────────────┐
|
||||||
|
│ Start │────►│ Review │────►│ Approved? │
|
||||||
|
└─────────┘ │ (Human │ └───────────────┬──────────────────────┘
|
||||||
|
│ Task) │ │
|
||||||
|
└─────────────┘ ┌─────────┼─────────┐
|
||||||
|
│ │ │
|
||||||
|
▼ │ ▼
|
||||||
|
┌──────────┐ │ ┌───────────┐
|
||||||
|
│ Execute │ │ │ Rejected │
|
||||||
|
│ Actions │ │ │ (End) │
|
||||||
|
│ (Script) │ │ └───────────┘
|
||||||
|
└────┬─────┘ │
|
||||||
|
│ │
|
||||||
|
▼ │
|
||||||
|
┌──────────────┐ │
|
||||||
|
│ Success? │ │
|
||||||
|
└───────┬──────┘ │
|
||||||
|
┌─────┴─────┐ │
|
||||||
|
│ │ │
|
||||||
|
▼ ▼ ▼
|
||||||
|
┌───────────┐ ┌─────────────┐
|
||||||
|
│ Completed │ │ Handle Error│
|
||||||
|
│ (End) │ │ (Human │
|
||||||
|
└───────────┘ │ Task) │
|
||||||
|
└──────┬──────┘
|
||||||
|
│
|
||||||
|
┌──────┴──────┐
|
||||||
|
│ │
|
||||||
|
▼ ▼
|
||||||
|
[Retry] [Abort]
|
||||||
|
│ │
|
||||||
|
└──────┬──────┘
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
(back to execution or end)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Customization**
|
||||||
|
|
||||||
|
This standard process is a starting point – not a limitation.
|
||||||
|
|
||||||
|
Organizations can clone and extend this process to match their specific requirements. A financial services company might add a second approval step for actions exceeding a certain value. A pharmaceutical company might require digital signatures for compliance. A multinational might route approvals to different teams based on the affected systems.
|
||||||
|
|
||||||
|
Some examples of customization:
|
||||||
|
|
||||||
|
| Requirement | Customization |
|
||||||
|
| ---------------------- | ---------------------------------------------------------------------- |
|
||||||
|
| Four-eyes principle | Add a second review task assigned to a different role |
|
||||||
|
| Value-based escalation | Add a gateway that routes high-value actions to management |
|
||||||
|
| Time-sensitive actions | Add timer events that escalate if review takes too long |
|
||||||
|
| Audit requirements | Add intermediate events that log to external compliance systems |
|
||||||
|
| Partial approval | Split the plan and allow approving some actions while rejecting others |
|
||||||
|
|
||||||
|
The process can also integrate with the existing BPMN-embedded prompts. After an action executes, a subsequent step could call the LLM to verify the result or generate a follow-up action. The two AI integration approaches – Orchestrator-initiated and BPMN-embedded – can work together in a single process.
|
||||||
|
|
||||||
|
This is the power of building AI control on top of a real process engine. We are not inventing a new paradigm. We are extending a proven one.
|
||||||
File diff suppressed because it is too large
Load diff
326
doc/MODELLING.md
Normal file
326
doc/MODELLING.md
Normal file
|
|
@ -0,0 +1,326 @@
|
||||||
|
# BPMN-AI Modeling Fundamentals
|
||||||
|
|
||||||
|
## 1. The Limits of Traditional Automation
|
||||||
|
|
||||||
|
Business Process Management systems have delivered enormous value to enterprise systems by structuring predictable work. _When an order exceeds a threshold, route to approval. When a payment is due, trigger a reminder. When a form is submitted, validate the fields._ These deterministic patterns — _if this, then that_ — form the backbone of enterprise automation.
|
||||||
|
|
||||||
|
But organizations operate in an increasingly complex world of documents, data, and decisions. Contracts arrive in different structures. Customer inquiries require interpretation. Invoices are available in various languages and formats. In this area, traditional BPM offers only two options: human processing or brittle rule-based parsing that breaks when formats vary.
|
||||||
|
|
||||||
|
The fundamental limitation is architectural. Traditional systems operate on explicit data—values in defined fields, keywords in specified locations, metadata attached by upstream processes. They cannot operate on meaning because they have no capacity for comprehension.
|
||||||
|
|
||||||
|
## 2. The AI Integration Problem
|
||||||
|
|
||||||
|
Large Language Models (LLMs) have changed what machines can do. They can read a document and identify its type — not by keyword matching but by understanding its purpose. They can extract data from unstructured text — not by parsing fixed layouts but by comprehending content. They can evaluate nuanced conditions — not through boolean logic but through semantic reasoning.
|
||||||
|
|
||||||
|
These capabilities are transformative. But capability alone does not create enterprise value. The challenge is integration — and current approaches fall short.
|
||||||
|
|
||||||
|
Most AI integration follows a familiar pattern: the workflow reaches a point where intelligence is needed, calls an external API, receives a response, and continues. The AI operates as a service alongside the process, not as part of it. This creates three critical problems:
|
||||||
|
|
||||||
|
- **Opacity** The AI operation is invisible in the process model. Stakeholders see that something happens; they cannot see what. The process diagram shows a service call, not the logic being applied.
|
||||||
|
- **Inflexibility** Changing AI behavior requires developer involvement. The prompt lives in code, not in the process definition. Process owners who understand the business requirement cannot directly modify how AI applies to their processes.
|
||||||
|
- **Governance gaps** AI decisions occur outside the workflow's audit framework. The process log shows inputs and outputs; it does not capture the reasoning in between. Compliance and audit functions face a blind spot precisely where judgment is being exercised.
|
||||||
|
|
||||||
|
These problems are not incidental — they are inherent to treating AI as an external service. As long as intelligence lives outside the process model, it remains outside process governance.
|
||||||
|
|
||||||
|
## 3. A New Approach: Model-Driven AI Process Automation
|
||||||
|
|
||||||
|
Dynamixs.AI addresses these problems through a fundamental architectural choice: AI capabilities are not services called from workflows — they are workflow elements themselves.
|
||||||
|
|
||||||
|
A document categorization is modeled in the BPMN diagram just as a user task would be. A natural language decision condition appears at a gateway just as a boolean expression would. A knowledge retrieval operation is visible in the process flow just as a database query would be. The process model does not invoke AI; it incorporates AI as a first-class modeling construct.
|
||||||
|
|
||||||
|
This is not a difference in degree but in kind. It creates a new category of enterprise software where:
|
||||||
|
|
||||||
|
- Process designers model AI behavior through the same tools they use for all process design — no developer handoff required
|
||||||
|
- AI operations are visible in process diagrams, understood by business stakeholders, documented in process artifacts
|
||||||
|
- AI configuration is auditable — prompts, decision logic, and knowledge queries are versioned process elements, not hidden code
|
||||||
|
- Governance frameworks apply uniformly to human tasks, system integrations, and AI operations alike
|
||||||
|
|
||||||
|
The intelligence is woven into the process definition itself. When a process designer opens the model, they see not just what humans do and what systems do, but what AI does — and they can configure all three through a unified approach.
|
||||||
|
|
||||||
|
## 4. Six Foundational Methodologies
|
||||||
|
|
||||||
|
This architectural foundation enables six distinct capabilities that together transform document-centric business processes:
|
||||||
|
|
||||||
|
1. Categorization — Intelligent classification and routing based on semantic understanding of document content
|
||||||
|
2. Summarization — Context-aware abstraction tailored to document type and process requirements
|
||||||
|
3. Extraction — Transformation of unstructured content into normalized, structured data
|
||||||
|
4. Natural Language Decisions — Business rules expressed in human language, evaluated against full process context
|
||||||
|
5. Assistant Systems — Continuous AI support with conversational memory spanning the workflow lifecycle
|
||||||
|
6. Knowledge Integration — Organizational learning through retrieval-augmented generation across workflow instances
|
||||||
|
|
||||||
|
These are not independent features but interconnected methodologies. Categorization determines which summarization strategy applies. Summarization provides context for extraction. Extracted data informs natural language decisions. The assistant maintains continuity across all interactions. And knowledge integration ensures that every completed workflow makes the organization more intelligent.
|
||||||
|
|
||||||
|
The following sections examine each methodology: the business problem it addresses, the approach Dynamixs.AI takes, and the strategic value it delivers.
|
||||||
|
|
||||||
|
### 4.1. Semantic Categorization
|
||||||
|
|
||||||
|
When documents enter an organization, they must be classified before any process can begin. Traditional approaches rely on metadata, keyword matching, or trained classifiers — all operating on hard coded business logic rather than meaning. They fail when data arrive through unexpected channels, use unexpected terminology, or vary from expected formats.
|
||||||
|
|
||||||
|
Semantic categorization works differently: the system reads the document and understands what it is. Not searching for keywords, but comprehending structure, purpose, and content. The output is structured classification data — document type, customer identity, language, urgency — that determines which workflow handles the document and how.
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<document>
|
||||||
|
<type>Invoice</type>
|
||||||
|
<customer>214 TechBridge Tokyo</customer>
|
||||||
|
<language>JP<language>
|
||||||
|
<priority>0.75</priority>
|
||||||
|
</document>
|
||||||
|
```
|
||||||
|
|
||||||
|
In Dynamixs.AI, categorization is modeled as a BPMN element within the process definition. The classification logic is configured by the process designer, visible in the process diagram, versioned with the process definition.
|
||||||
|
|
||||||
|
<img src="modelling-categorize.png" />
|
||||||
|
|
||||||
|
When requirements change, the process owner adjusts the categorization directly—no development cycle required.
|
||||||
|
Documents route to appropriate processes within seconds rather than waiting in human triage queues. Classification scales elastically with volume. And the logic that previously existed only in experienced employees' heads becomes explicit, auditable organizational infrastructure.
|
||||||
|
|
||||||
|
**Key Benefits:**
|
||||||
|
|
||||||
|
- Eliminates manual document triage
|
||||||
|
- Handles format variations automatically
|
||||||
|
- Provides consistent classification across document types
|
||||||
|
- Classification criteria can be modified without code changes
|
||||||
|
|
||||||
|
### 4.2. Contextual Summarization
|
||||||
|
|
||||||
|
Knowledge workers spend significant time reading documents to extract relevant information. A five-page contract, a detailed incident report, a lengthy customer correspondence—each must be read in full to identify what matters for the task at hand. The document management system stores and retrieves faithfully, but delivers documents as-is, leaving comprehension entirely to the human reader.
|
||||||
|
|
||||||
|
Contextual summarization generates process-specific abstracts tailored to document type and task requirements. An invoice summary emphasizes amounts, dates, and payment terms. A contract summary highlights obligations, duration, and risk factors. The same document produces different summaries for different process contexts — each optimized for the decisions that follow.
|
||||||
|
|
||||||
|
In Dynamixs.AI, summarization is modeled as a BPMN element that follows categorization. The summarization strategy — what to emphasize, what level of detail, what language—is configured per document type and process stage. The summary is generated before the human task begins, not on demand.
|
||||||
|
|
||||||
|
<img src="modelling-summarization.png" />
|
||||||
|
|
||||||
|
Workers receive focused abstracts rather than raw documents. Review time drops dramatically. Attention concentrates on what matters. And summarization logic adapts to process requirements through configuration, not code.
|
||||||
|
|
||||||
|
**Key Benefits:**
|
||||||
|
|
||||||
|
- Reduces document review time by 60-80%
|
||||||
|
- Ensures consistent focus on process-relevant information
|
||||||
|
- Summaries adapt to document type automatically
|
||||||
|
- Supports multilingual documents with language-appropriate output
|
||||||
|
|
||||||
|
### 4.3. Structured Extraction
|
||||||
|
|
||||||
|
Enterprise systems run on structured data—fields with defined formats, values within expected ranges, dates in standard notation. Yet information arrives unstructured: invoices as PDFs, contracts as Word documents, correspondence as free text. The bridge between these worlds is largely built by human hands, typing data from documents into system fields.
|
||||||
|
|
||||||
|
Structured extraction transforms unstructured content into normalized data. The system identifies relevant information—invoice numbers, dates, amounts, parties, terms—and outputs it in structured format. Crucially, extraction includes normalization: dates convert to ISO format regardless of source notation, amounts standardize regardless of decimal conventions, currencies map to standard codes. The document language detected during categorization guides these transformations automatically.
|
||||||
|
|
||||||
|
In Dynamixs.AI, extraction is modeled as a BPMN element that operates on document content or summaries. The extraction schema—which fields to capture, what normalizations to apply—is defined in the process model. Each extracted value carries a confidence indicator, enabling automatic processing for high-confidence extractions and human verification where needed.
|
||||||
|
|
||||||
|
<img src="modelling-extraction.png" />
|
||||||
|
|
||||||
|
Manual data entry reduces by 80-90% for well-defined schemas. Format variations no longer break processing. And extracted data flows directly into forms, validations, and downstream systems.
|
||||||
|
|
||||||
|
**Output Example:**
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<document>
|
||||||
|
<item name="invoice_number">INV-2024-0847</item>
|
||||||
|
<item name="invoice_date">2025-03-15</item>
|
||||||
|
<item name="due_date">2025-04-14</item>
|
||||||
|
<item name="vendor_name">TechBridge Tokyo</item>
|
||||||
|
<item name="total_amount" >4523.80</item>
|
||||||
|
<item name="currency">USD</item>
|
||||||
|
<item name="payment_terms">30 days net</item>
|
||||||
|
</document>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Key Benefits:**
|
||||||
|
|
||||||
|
- Eliminates manual data entry for 80-90% of standard documents
|
||||||
|
- Confidence scoring enables targeted human review
|
||||||
|
- Locale-aware normalization ensures data consistency
|
||||||
|
- XML output integrates directly with form systems and downstream processes
|
||||||
|
|
||||||
|
### 4.4. Natural Language Decisions
|
||||||
|
|
||||||
|
Business processes require routing decisions. Traditional BPMN gateways evaluate boolean expressions against process variables: _amount > 10000_ or _customer.status == 'premium'_. This works for simple thresholds but fails for nuanced business rules. _"Does this contract contain unusual liability provisions?"_ or _"Is this shipment subject to export controls?"_ resist expression as boolean formulas. The result is a gap between business intent and system implementation—rules that seem clear in discussion become ambiguous in code.
|
||||||
|
|
||||||
|
Natural language decisions allow gateway conditions to be expressed as business stakeholders would state them. The system evaluates the condition against available context — extracted data, document summaries, process variables—and returns a clear routing outcome. When confident determination is not possible, the workflow routes to human judgment rather than applying arbitrary defaults.
|
||||||
|
|
||||||
|
In Dynamixs.AI, natural language conditions are configured directly at BPMN gateways. The business rule is visible in the process diagram, readable by non-technical stakeholders, adjustable without developer involvement. Every decision logs the condition evaluated, the context considered, and the outcome determined.
|
||||||
|
|
||||||
|
<img src="modelling-decision.png" />
|
||||||
|
|
||||||
|
Complex contextual decisions become possible without programming. Business rules remain aligned with business intent. And decision logic is transparent and auditable.
|
||||||
|
|
||||||
|
**Example Conditions:**
|
||||||
|
|
||||||
|
- "Is this a delivery to a non-EU country?"
|
||||||
|
- "Does the contract value exceed the approval threshold for this department?"
|
||||||
|
- "Is the customer classified as high-risk?"
|
||||||
|
- "Does this request require legal review based on the contract terms?"
|
||||||
|
- "Is this a recurring customer with an existing framework agreement?"
|
||||||
|
|
||||||
|
**Key Benefits:**
|
||||||
|
|
||||||
|
- Business rules remain readable and maintainable
|
||||||
|
- Non-technical stakeholders can understand and modify conditions
|
||||||
|
- Complex contextual decisions become possible without programming
|
||||||
|
- Full audit trail of decisions and reasoning
|
||||||
|
|
||||||
|
### 4.5 Assistant Systems
|
||||||
|
|
||||||
|
The previous methodologies — _categorization, summarization, extraction, decisions_ — operate at discrete points in a workflow. Each interaction is stateless. This mirrors how most organizations have integrated AI capabilities: isolated calls to language models, each starting fresh without memory of prior interactions.
|
||||||
|
|
||||||
|
But knowledge work is not a series of independent transactions. It is iterative, contextual, and cumulative. Questions arise during processing. Earlier insights become relevant to later decisions. A worker reviewing extracted data might wonder why a particular value was proposed. A manager approving an exception might need to understand the full history of how the case developed. A specialist encountering an unusual situation might benefit from exploring implications with an informed partner.
|
||||||
|
|
||||||
|
Traditional support systems — chatbots, help desks, knowledge bases — cannot help here. They operate outside the workflow context. The worker must leave their task, explain their situation from scratch, receive generic assistance, and translate it back to their specific case. The support system knows nothing of the document being processed, the classification that was made, the data that was extracted, or the decisions that are pending.
|
||||||
|
|
||||||
|
**Persistent Context Across the Process Lifecycle**
|
||||||
|
|
||||||
|
Dynamixs.AI solve this problem by maintaining conversational continuity across the entire workflow lifecycle. The key insight is that each AI interaction within the workflow is not merely an isolated operation but a contribution to an evolving understanding.
|
||||||
|
|
||||||
|
When a document is categorized, that analysis becomes part of the shared context. When a summary is generated, the assistant already knows what type of document it is dealing with. When data is extracted, the context includes both the categorization and the summarization. When a decision is evaluated, the full history of prior analysis informs the judgment.
|
||||||
|
|
||||||
|
This context does not reset between steps. It accumulates during the processing live-cycle. By the time a human worker engages with the process, the assistant understands everything that has occurred: what the document contains, how it was classified, why certain data was extracted, what decisions were made and on what basis.
|
||||||
|
|
||||||
|
For long-running processes — a construction project spanning months, a contract negotiation over weeks, a compliance review requiring multiple approvals — this continuity is transformative. A question asked in month three can reference context established in month one. The assistant's understanding grows as the process progresses, mirroring how a knowledgeable colleague would accumulate familiarity with a case over time.
|
||||||
|
|
||||||
|
**Human-AI Collaboration Within Structured Workflow**
|
||||||
|
|
||||||
|
Workers interact with the assistant at any point during their tasks. They can ask why a particular extraction was proposed and receive an explanation grounded in the document content. They can request alternative interpretations of ambiguous passages. They can explore what-if scenarios for pending decisions. They can verify their understanding before committing to an action.
|
||||||
|
|
||||||
|
This is not a chatbot bolted onto the workflow. It is an informed participant in the process, constrained by the same governance framework, contributing to the same audit trail, operating within the same process boundaries.
|
||||||
|
|
||||||
|
**Modeled as BPMN Elements**
|
||||||
|
|
||||||
|
In Dynamixs.AI, assistant interactions is part of the model reading and writing to the shared conversation context. The process designer defines where assistant interaction is available, what context is included, and how conversations are preserved.
|
||||||
|
|
||||||
|
<img src="modelling-assistant.png" />
|
||||||
|
|
||||||
|
The accumulated dialogue becomes part of the workflow record — visible, auditable, and available for review.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"workflow_id": "WF-2024-08472",
|
||||||
|
"messages": [
|
||||||
|
{
|
||||||
|
"role": "system",
|
||||||
|
"content": "You are an assistant helping process incoming invoices...",
|
||||||
|
"timestamp": "2024-03-15T09:00:00Z",
|
||||||
|
"bpmn_element": "SystemPromptTask"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": "Categorize the following document: [document content]",
|
||||||
|
"timestamp": "2024-03-15T09:00:01Z",
|
||||||
|
"bpmn_element": "CategorizationTask"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "assistant",
|
||||||
|
"content": "{\"document_type\": \"Invoice\", ...}",
|
||||||
|
"timestamp": "2024-03-15T09:00:03Z",
|
||||||
|
"bpmn_element": "CategorizationTask"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": "Based on the categorization, summarize this invoice...",
|
||||||
|
"timestamp": "2024-03-15T09:00:04Z",
|
||||||
|
"bpmn_element": "SummarizationTask"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The strategic impact extends beyond individual productivity. New employees can engage effectively with complex cases because the assistant provides process-aware guidance. Quality improves because workers can verify interpretations before acting. Knowledge accumulates within the process record rather than dissipating when the task is complete.
|
||||||
|
|
||||||
|
**Key Benefits:**
|
||||||
|
|
||||||
|
- AI maintains context across entire process lifecycle
|
||||||
|
- Earlier insights inform later processing steps
|
||||||
|
- Human-AI collaboration within structured workflow
|
||||||
|
- Complete conversation audit trail for compliance
|
||||||
|
|
||||||
|
### 4.6 Knowledge Integration - Retrieval-Augmented Generation (RAG)
|
||||||
|
|
||||||
|
Organizations execute thousands of workflows. Each generates information: what happened, what was decided, what worked, what failed. This information has potential value far beyond the individual process instance. Lessons learned on Project A could prevent mistakes on Project B. Customer preferences discovered in one interaction could improve service in future interactions. The exception handling developed for one case could apply to similar cases months later.
|
||||||
|
|
||||||
|
Yet this knowledge typically remains locked within completed process instances. The workflow system records everything — fully traceable, completely documented—but does not make that knowledge accessible to future work. Finding relevant precedents requires knowing they exist and searching explicitly. Each new workflow begins fresh, unable to benefit from the thousands that came before.
|
||||||
|
|
||||||
|
This is organizational amnesia at the operational level. Strategic insights might surface in quarterly reviews and lessons-learned sessions. But day-to-day knowledge — specific customer preferences, practical warnings, discovered patterns—dissipates as processes complete and employees move to new tasks.
|
||||||
|
|
||||||
|
#### 4.6.1 Bidirectional Knowledge Flow
|
||||||
|
|
||||||
|
Dynamixs.AI Knowledge Integration addresses this problem through retrieval-augmented generation (RAG) operating in two directions: workflows contribute knowledge on certain points in the processing life-cycle and workflows receive knowledge when needed or a new workflow begins.
|
||||||
|
|
||||||
|
- **Knowledge Contribution** When a workflow completes, the system analyzes what occurred and extracts durable insights. This is not a mechanical summary but a synthesis focused on future utility: What should be remembered? What warnings apply? What preferences emerged? What patterns were discovered? The insight is stored alongside identifying metadata—customer, project, product, process type—enabling semantic retrieval when relevant contexts arise.
|
||||||
|
- **Knowledge Retrieval** When a new workflow begins, the system queries the knowledge base for relevant precedents. Related insights are synthesized into a contextual briefing: prior interactions with this customer, warnings from similar cases, preferences that emerged in past dealings, patterns that proved relevant. This briefing appears before the worker begins their task—proactive knowledge delivery rather than passive search.
|
||||||
|
|
||||||
|
The critical difference from traditional knowledge management is the direction of initiative. Conventional systems wait to be asked. A worker who suspects relevant precedents exist can search for them — if they know what to search for, if they have time to search, if they remember to search at all. In practice, this means most relevant knowledge goes undiscovered. The search never happens.
|
||||||
|
|
||||||
|
Knowledge Integration inverts this pattern. The system identifies what might be relevant and volunteers it. A new workflow involving Customer X automatically surfaces the history with Customer X. A case resembling past problematic patterns automatically raises the warning flags. The worker does not need to know what to look for; the system brings relevant context forward.
|
||||||
|
|
||||||
|
This is how experienced employees naturally operate—they remember relevant history and apply it to new situations. Knowledge Integration makes this organizational memory systematic rather than individual, persistent rather than dependent on personnel continuity.
|
||||||
|
|
||||||
|
#### 4.6.2 Compounding Organizational Intelligence
|
||||||
|
|
||||||
|
Every completed workflow makes the organization marginally more intelligent. A single insight may seem modest. But across thousands of workflows, knowledge compounds. Patterns emerge. Customer relationships deepen. Institutional expertise accumulates in infrastructure rather than individual heads.
|
||||||
|
|
||||||
|
New employees benefit immediately from organizational history. Experienced employees are reminded of relevant precedents they may have forgotten. Transitions between personnel no longer mean loss of operational knowledge. The organization learns from its own experience, automatically and continuously.
|
||||||
|
|
||||||
|
In Dynamixs.AI, both knowledge contribution and knowledge retrieval are modeled as BPMN elements within process definitions. The process designer configures what insights to extract upon completion, what queries to execute upon initiation, and how knowledge flows between process types.
|
||||||
|
|
||||||
|
This makes knowledge strategy visible and governable. Which processes contribute to which knowledge domains? What contextual briefings do workers receive? How is insight quality maintained over time? These questions have explicit answers in the process model, not implicit answers in hidden system behavior.
|
||||||
|
|
||||||
|
The strategic impact is cumulative. Organizations that implement Knowledge Integration do not merely automate processes—they build learning systems. Each workflow execution becomes a contribution to organizational intelligence that persists beyond the individual case, the individual employee, and the individual moment.
|
||||||
|
|
||||||
|
**Store Prompt Structure:**
|
||||||
|
|
||||||
|
```
|
||||||
|
Analyze this completed workflow and extract key insights for future reference.
|
||||||
|
|
||||||
|
Focus on:
|
||||||
|
- Specific outcomes and decisions made
|
||||||
|
- Unusual circumstances or exceptions
|
||||||
|
- Customer preferences or requirements discovered
|
||||||
|
- Warnings for similar future cases
|
||||||
|
- Relevant names, amounts, and dates
|
||||||
|
|
||||||
|
Respond with 2-3 sentences. Be specific, not generic.
|
||||||
|
|
||||||
|
Workflow Summary:
|
||||||
|
{workflow_summary}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Retrieve Prompt Structure:**
|
||||||
|
|
||||||
|
```
|
||||||
|
Based on the following historical insights related to this customer/project/product,
|
||||||
|
generate a briefing for the worker starting this new workflow.
|
||||||
|
|
||||||
|
Current Workflow Context:
|
||||||
|
- Customer: {customer_name}
|
||||||
|
- Document Type: {document_type}
|
||||||
|
- Subject: {subject}
|
||||||
|
|
||||||
|
Related Historical Insights:
|
||||||
|
{rag_results}
|
||||||
|
|
||||||
|
Generate a brief (3-5 sentences) contextual briefing highlighting:
|
||||||
|
- Relevant past interactions
|
||||||
|
- Known preferences or issues
|
||||||
|
- Warnings or recommendations
|
||||||
|
```
|
||||||
|
|
||||||
|
**Key Benefits:**
|
||||||
|
|
||||||
|
- Organizational knowledge accumulates automatically
|
||||||
|
- New workflows benefit from historical context
|
||||||
|
- Proactive knowledge delivery (system volunteers information)
|
||||||
|
- Searchable knowledge base grows with every completed workflow
|
||||||
|
|
||||||
|
# 5. Conclusion
|
||||||
|
|
||||||
|
The six methodologies presented in this paper share a common architectural principle: AI capabilities are implemented as native BPMN 2.0 elements, configured through process modeling rather than software development.
|
||||||
|
|
||||||
|
This design choice has significant implications. Prompt definitions, extraction schemas, decision conditions, and knowledge queries are process artifacts—versioned, documented, and modifiable through standard BPM tooling. When business requirements change, process designers adjust AI behavior directly. The iteration cycle between requirement and implementation shortens from weeks to minutes.
|
||||||
|
|
||||||
|
The BPMN 2.0 foundation also ensures that AI operations participate in established governance frameworks. Every AI interaction is logged as a workflow event. Audit trails capture inputs, outputs, and configuration state. The same compliance mechanisms that govern human tasks and system integrations apply to AI elements without architectural exception.
|
||||||
|
|
||||||
|
The compositional nature of BPMN modeling extends to AI capabilities. Organizations combine methodologies as their processes require—categorization alone for simple routing, full integration of all six methodologies for complex knowledge work. Process complexity scales through model composition, not custom development.
|
||||||
|
|
||||||
|
Technically, the platform maintains model independence through standardized adapter interfaces. Language models can be exchanged—cloud providers, on-premise deployments, open-source alternatives—without modifying process definitions. Organizations retain control over their AI infrastructure decisions while protecting their investment in process design.
|
||||||
|
|
||||||
|
This architecture—AI as modelable, composable, governable process elements—represents a distinct approach to intelligent process automation. The methodologies described in this paper provide the foundation; BPMN 2.0 provides the integration framework that makes them accessible to process designers rather than AI specialists.
|
||||||
BIN
doc/MODELLING.pdf
Normal file
BIN
doc/MODELLING.pdf
Normal file
Binary file not shown.
81
doc/NDWM.md
Normal file
81
doc/NDWM.md
Normal file
|
|
@ -0,0 +1,81 @@
|
||||||
|
# Knowledge-Driven Workflow Management
|
||||||
|
|
||||||
|
## Abstract
|
||||||
|
|
||||||
|
Traditional workflow management systems excel at structuring processes and storing data, but they fail to capture the semantic meaning and contextual insights that emerge during workflow execution. This paper presents a methodology for transforming workflow management systems into knowledge-driven platforms by integrating Large Language Models (LLMs) with BPMN 2.0 modeling. The approach introduces two key innovations: automated insight generation at workflow completion and proactive knowledge activation at workflow initiation.
|
||||||
|
|
||||||
|
## 1. Problem Statement
|
||||||
|
|
||||||
|
Enterprise Resource Planning (ERP) systems structure and manage corporate data. Business Process Management (BPM) suites structure and orchestrate business processes. However, both approaches share a fundamental limitation: they store information without understanding it.
|
||||||
|
Consider a two-year construction planning project. Throughout its lifecycle, hundreds of workflows are executed, thousands of documents are processed, and countless decisions are made. Each individual workflow is visible and traceable. Yet the accumulated knowledge, the contextual relationships, and the lessons learned become fragmented across the System. After several months, no single person or system truly understands the project in its entirety.
|
||||||
|
The core challenge is the gap between activity and understanding. Systems record what happened, but not what it means.
|
||||||
|
|
||||||
|
## 2. Methodology
|
||||||
|
|
||||||
|
### 2.1 Workflow Summary Generation
|
||||||
|
|
||||||
|
The foundation of this approach is the structured summarization of workflow execution within Dynamixs.AI. Each completed workflow generates a chronological summary containing the workflow type and status, a timestamped event history with actor identification, embedded document content (extracted text from attachments), and user comments and annotations.
|
||||||
|
This summary serves as the raw material for insight generation. It captures not just the data, but the narrative of how the workflow unfolded.
|
||||||
|
|
||||||
|
### 2.2 LLM-Based Insight Extraction
|
||||||
|
|
||||||
|
Upon workflow completion, Dynamixs.AI automatically invokes an LLM to analyze the workflow summary. The LLM is prompted to extract project-specific insights rather than generic observations. The prompt structure emphasizes specific facts over general advice, unusual events or warnings, relevant names and entities, and future implications.
|
||||||
|
A carefully designed prompt template ensures consistent, actionable output:
|
||||||
|
|
||||||
|
Analyze this completed workflow and extract key insights. Respond with a brief insight (2-3 sentences): What happened? What should be remembered? Be specific. No generic advice. Include relevant names when mentioned.
|
||||||
|
|
||||||
|
### 2.3 RAG Integration
|
||||||
|
|
||||||
|
The generated insights are stored in a Retrieval-Augmented Generation (RAG) system alongside the original workflow summary. This creates a two-layer knowledge architecture: the Fact Layer containing raw workflow data (chronology, documents, events) and the Insight Layer containing the distilled understanding (meaning, warnings, relationships).
|
||||||
|
The insight is prepended to the workflow summary, ensuring that semantic retrieval surfaces the distilled knowledge first, followed by supporting details. Both layers share a common workflow identifier, enabling complete context reconstruction.
|
||||||
|
|
||||||
|
### 2.4 Proactive Knowledge Activation
|
||||||
|
|
||||||
|
The transformative element of this methodology is the inversion of the traditional query pattern. Instead of waiting for users to search for information, Dynamixs.AI proactively surfaces relevant knowledge when a new workflow begins.
|
||||||
|
When a workflow is initiated, Dynamixs.AI queries the RAG database for related insights (e.g., by customer, product, or project), aggregates relevant historical knowledge, and invokes the LLM to generate a contextual briefing for the user. (TODO: this part need to be implemented in a more elegant way...)
|
||||||
|
This briefing is presented before the user begins work, transforming passive data retrieval into active knowledge delivery.
|
||||||
|
|
||||||
|
## 3. BPMN 2.0 Integration
|
||||||
|
|
||||||
|
A key architectural decision is the modeling of LLM interactions within the BPMN 2.0 framework. Rather than implementing insight generation as external system logic, both the insight extraction and knowledge activation are modeled as workflow elements parallel to the business process.
|
||||||
|
This approach offers several advantages:
|
||||||
|
|
||||||
|
1. **Visibility:** LLM operations are visible in the process model, not hidden in code.
|
||||||
|
2. **Configurability:** Prompts and RAG queries can be modified by process designers without development.
|
||||||
|
3. **Auditability:** All LLM interactions are logged as workflow events.
|
||||||
|
4. **Flexibility:** Different process types can use different insight generation strategies.
|
||||||
|
|
||||||
|
Micro-workflows can be employed to orchestrate LLM calls, RAG queries, and result processing, maintaining separation between business logic and knowledge management logic.
|
||||||
|
|
||||||
|
## 4. System Architecture
|
||||||
|
|
||||||
|
The architecture consists of four primary components:
|
||||||
|
|
||||||
|
- The Workflow Engine (BPMN 2.0) which orchestrates business processes and LLM micro-workflows.
|
||||||
|
- The LLM Service which processes prompts and generates insights (model-agnostic via OpenAI-compatible API).
|
||||||
|
- The RAG System which stores and retrieves workflow summaries and insights with vector-based semantic search.
|
||||||
|
- The Knowledge Activator which queries RAG at workflow initiation and generates contextual briefings.
|
||||||
|
|
||||||
|
Dynamixs.AI maintains model independence by utilizing standardized API interfaces. The LLM component can be replaced (e.g., from Mistral to Llama) without affecting the workflow definitions or RAG integration.
|
||||||
|
|
||||||
|
## 5. Practical Example
|
||||||
|
|
||||||
|
Consider a sales quotation workflow. A customer request arrives via email, is processed, and an offer is sent. The workflow summary captures the complete interaction, including the observation that requested products became unavailable.
|
||||||
|
The generated insight records:
|
||||||
|
|
||||||
|
- Customer identity and contact details
|
||||||
|
- Specific product requirements
|
||||||
|
- The critical warning about product unavailability
|
||||||
|
- Customer interest in volume discounts
|
||||||
|
|
||||||
|
Six months later, when a new workflow is initiated for the same customer, Dynamixs.AI automatically surfaces this context. The sales representative is immediately informed of the previous interaction, the unresolved product availability issue, and the customer's pricing expectations, all before beginning work.
|
||||||
|
|
||||||
|
## 6. Conclusion
|
||||||
|
|
||||||
|
This methodology transforms workflow management from a system that merely records activity to one that accumulates and activates organizational knowledge. By integrating LLM-based insight generation with BPMN 2.0 modeling and RAG-based retrieval, enterprises can ensure that lessons learned in one workflow inform future workflows automatically.
|
||||||
|
The key innovation is not the individual components, which are well-established, but their integration pattern:
|
||||||
|
|
||||||
|
- knowledge flows from completed workflows into a semantic store
|
||||||
|
- and is proactively surfaced when relevant contexts arise.
|
||||||
|
|
||||||
|
Dynamixs.AI does not wait to be asked; it volunteers what it knows. This represents a shift from data management to knowledge management, enabled by the semantic capabilities of modern LLMs and the structured orchestration of BPMN 2.0.
|
||||||
BIN
doc/NDWM.pdf
Normal file
BIN
doc/NDWM.pdf
Normal file
Binary file not shown.
84
doc/PROMTS/prompt-create_model_de.md
Normal file
84
doc/PROMTS/prompt-create_model_de.md
Normal file
|
|
@ -0,0 +1,84 @@
|
||||||
|
Du bist Geschäftsprozess Architekt und Modellierer. Deine Aufgabe ist es Prozessmodelle zu erstellen.
|
||||||
|
Unsere Software basiert auf BPMN 2.0. Wir modellieren Geschäftsprozesse nach folgendem Prinzip:
|
||||||
|
|
||||||
|
**Process** - der Workflow wird jeweils in einem eigenen BPMN Pool abgebildet. Der Prozessname (Name des Pools) bezeichnet den Workflow.
|
||||||
|
|
||||||
|
**Tasks** - Task Elemente werden verwendet um die Zustände in einem Prozess abzubilden. Jeder Task hat eine eindeutige ID. Tasks werden von einem Mitarbeiter im Unternehmen verantwortet. Z.b. 'Rechnung erstellen', 'Rechnung prüfen', 'Zahlungseingang buchen'. Tasks werden innerhalb der Software als individuelle Aufgaben für den User in einer Aufgabenliste angezeigt.
|
||||||
|
|
||||||
|
**Events** - Event Element werden genutzt um den Übergang von einem Task in einen anderen zu beschreiben. Ein Event ist damit die Aktion die der Mitarbeiter ausführt. Z.b. 'Rechnung weiterleiten', 'Prüfung ablehnen', 'Buchung abschließen'.
|
||||||
|
Jedes Event das einem Task zugeordnet ist hat innerhalb dieses Tasks eine eindeutige ID.
|
||||||
|
|
||||||
|
Wir stellen den Prozessablauf textuell stark vereinfacht dar. Diese Darstellung dient dem BPMN Modellierer einen Prozess in unserem Tool zu erstellen.
|
||||||
|
|
||||||
|
Beispiel:
|
||||||
|
|
||||||
|
```
|
||||||
|
Business Process: Offer
|
||||||
|
|
||||||
|
START
|
||||||
|
|
|
||||||
|
|- [Task: 1000] Inquiry imported
|
||||||
|
| Team: Front Office
|
||||||
|
| Description:
|
||||||
|
| A new Inquiry from a customer was imported into the system. The user need to check if this is a valid document.
|
||||||
|
| |-- [Event: 10] Proceed (Inquiry is valid) --> [Task: 1200] Verify Inquiry
|
||||||
|
| |-- [Event: 20] Reject (Inquire is invalid) --> [Task: 1900] Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 1200] Verify Inquiry
|
||||||
|
| Team: Front Office
|
||||||
|
| Description:
|
||||||
|
| The Inquiry need to be verified and missing data need to be added. If Inquiry is accepted, the sales team can generate a offer.
|
||||||
|
| |-- [Event: 10] Update Data (Customer Data updated) --> [Task: 1200] Verify Inquiry
|
||||||
|
| |-- [Event: 11] Add Comment --> [Task: 1200] Verify Inquiry
|
||||||
|
| |-- [Event: 20] Accept (Inquiry accepted and forwarded to Sales team to generate a new Offer) --> [Task: 1300] Generate Offer
|
||||||
|
| |-- [Event: 30] Reject (Inquiry invalid/rejected) --> [Task: 1900] Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 1300] Generate Offer
|
||||||
|
| Team: Sales Team
|
||||||
|
| Description:
|
||||||
|
| The Inquiry is valid, all data is available to generate a new offer.
|
||||||
|
| |-- [Event: 10] Update Data (Customer Data updated) --> [Task: 1300] Generate Offer
|
||||||
|
| |-- [Event: 20] Offer generated (Offer created and forwarded for approval by Management) --> [Task: 1400] Approval
|
||||||
|
|
|
||||||
|
|- [Task: 1400] Approval
|
||||||
|
| Team: Management
|
||||||
|
| Description:
|
||||||
|
| The Offer was generated. Management is responsible for approvement.
|
||||||
|
| |-- [Event: 20] Accept Offer (Offer approved) --> [Task: 1500] Offer send
|
||||||
|
| |-- [Event: 30] Reject Offer (Offer rejected) --> [Task: 1300] Generate Offer
|
||||||
|
|
|
||||||
|
|- [Task: 1500] Offer send
|
||||||
|
| Team: Sales Team
|
||||||
|
| Description:
|
||||||
|
| The Offer was accepted by Management and automatically send to the customer.
|
||||||
|
| |-- [Event: 10] Accepted by Customer (Offer was accepted by Customer, forwarded to Production Team) --> [Task: 1600] Accepted
|
||||||
|
| |-- [Event: 20] Send Reminder (Reminder send to customer) --> [Task: 1500] Offer send
|
||||||
|
| |-- [Event: 30] Rejected by Customer (Offer was rejected by Customer) --> [Task: 1900] Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 1600] Accepted
|
||||||
|
| Team: Production
|
||||||
|
| Description:
|
||||||
|
| The Offer was accepted by Customer. New Order can be created.
|
||||||
|
| |-- [Event: 10] Create Order (New Order created) --> [Task: 1800] Completed
|
||||||
|
|
|
||||||
|
|- [Task: 1800] Completed
|
||||||
|
| Team: Sales Team
|
||||||
|
| Description:
|
||||||
|
| Offer accepted by customer and order created. Process completed
|
||||||
|
| |-- [Event: 10] Add Comment --> [Task: 1800] Completed
|
||||||
|
|
|
||||||
|
|- [Task: 1900] Rejected
|
||||||
|
| Team: Sales Team
|
||||||
|
| Description:
|
||||||
|
| Offer was not accepted by by customer and order created. Process completed
|
||||||
|
| |-- [Event: 10] Add Comment --> [Task: 1800] Rejected
|
||||||
|
| |-- [Event: 30] Delete --> [Task: 1990] Deleted
|
||||||
|
|
|
||||||
|
END
|
||||||
|
|
|
||||||
|
|- [Task: 1990] Deleted
|
||||||
|
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Erstelle einen neuen Prozess für eine "Supplier Compliance Prüfung" innerhalb eines Lieferkettenprozesses für ein großes Export Unternehmen. Prozesssprache ist Englisch.
|
||||||
|
Erstelle eine formatierte Text Datei für diesen Ablauf gemäß dem Beispiel.
|
||||||
104
doc/PROMTS/result-chatgpt.txt
Normal file
104
doc/PROMTS/result-chatgpt.txt
Normal file
|
|
@ -0,0 +1,104 @@
|
||||||
|
Business Process: Supplier Compliance Check
|
||||||
|
|
||||||
|
START
|
||||||
|
|
|
||||||
|
|- [Task: 1000] Supplier Registered
|
||||||
|
| Team: Procurement
|
||||||
|
| Description:
|
||||||
|
| A new supplier was registered in the system or an existing supplier requires a periodic compliance review.
|
||||||
|
| The supplier data and documents are available for initial compliance screening.
|
||||||
|
| |-- [Event: 10] Start Compliance Check (Supplier forwarded for compliance screening) --> [Task: 1100] Initial Compliance Screening
|
||||||
|
|
|
||||||
|
|- [Task: 1100] Initial Compliance Screening
|
||||||
|
| Team: Compliance Office
|
||||||
|
| Description:
|
||||||
|
| The supplier is screened against basic compliance criteria such as sanctions lists,
|
||||||
|
| embargo countries, and internal blacklists.
|
||||||
|
| |-- [Event: 10] Request Additional Data (Missing or unclear compliance data) --> [Task: 1150] Request Supplier Documents
|
||||||
|
| |-- [Event: 20] Screening Passed (No critical compliance issues identified) --> [Task: 1200] Detailed Compliance Review
|
||||||
|
| |-- [Event: 30] Screening Failed (Critical compliance violation identified) --> [Task: 1900] Compliance Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 1150] Request Supplier Documents
|
||||||
|
| Team: Procurement
|
||||||
|
| Description:
|
||||||
|
| Additional compliance-related documents are requested from the supplier,
|
||||||
|
| such as certificates, declarations, or ownership information.
|
||||||
|
| |-- [Event: 10] Documents Received (Requested documents provided by supplier) --> [Task: 1100] Initial Compliance Screening
|
||||||
|
| |-- [Event: 20] Cancel Request (Supplier does not respond or withdraws) --> [Task: 1950] Compliance Cancelled
|
||||||
|
|
|
||||||
|
|- [Task: 1200] Detailed Compliance Review
|
||||||
|
| Team: Compliance Office
|
||||||
|
| Description:
|
||||||
|
| A detailed compliance assessment is performed including ESG criteria,
|
||||||
|
| export control regulations, anti-corruption policies, and human rights standards.
|
||||||
|
| |-- [Event: 10] Update Assessment (Compliance assessment updated) --> [Task: 1200] Detailed Compliance Review
|
||||||
|
| |-- [Event: 20] Escalate to Legal (Potential compliance risks identified) --> [Task: 1300] Legal Review
|
||||||
|
| |-- [Event: 30] Approve Compliance (Supplier compliant) --> [Task: 1400] Compliance Approved
|
||||||
|
|
|
||||||
|
|- [Task: 1300] Legal Review
|
||||||
|
| Team: Legal Department
|
||||||
|
| Description:
|
||||||
|
| Legal reviews identified compliance risks and evaluates contractual,
|
||||||
|
| regulatory, and reputational impacts.
|
||||||
|
| |-- [Event: 10] Request Clarification (Additional clarification required) --> [Task: 1150] Request Supplier Documents
|
||||||
|
| |-- [Event: 20] Approve with Conditions (Supplier approved under conditions) --> [Task: 1450] Conditional Approval
|
||||||
|
| |-- [Event: 30] Reject Supplier (Unacceptable compliance risk) --> [Task: 1900] Compliance Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 1400] Compliance Approved
|
||||||
|
| Team: Compliance Office
|
||||||
|
| Description:
|
||||||
|
| The supplier has passed all compliance checks and is approved
|
||||||
|
| for sourcing and export-related business activities.
|
||||||
|
| |-- [Event: 10] Notify Procurement (Approval communicated to Procurement) --> [Task: 1500] Supplier Activated
|
||||||
|
|
|
||||||
|
|- [Task: 1450] Conditional Approval
|
||||||
|
| Team: Compliance Office
|
||||||
|
| Description:
|
||||||
|
| The supplier is approved with specific conditions such as periodic audits,
|
||||||
|
| volume limits, or restricted product categories.
|
||||||
|
| |-- [Event: 10] Accept Conditions (Conditions acknowledged by Procurement) --> [Task: 1500] Supplier Activated
|
||||||
|
| |-- [Event: 20] Reject Conditions (Conditions not acceptable) --> [Task: 1900] Compliance Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 1500] Supplier Activated
|
||||||
|
| Team: Procurement
|
||||||
|
| Description:
|
||||||
|
| The supplier is activated in the sourcing system and can be used
|
||||||
|
| for purchase orders and export-related transactions.
|
||||||
|
| |-- [Event: 10] Schedule Re-Check (Periodic compliance review scheduled) --> [Task: 1600] Compliance Monitoring
|
||||||
|
|
|
||||||
|
|- [Task: 1600] Compliance Monitoring
|
||||||
|
| Team: Compliance Office
|
||||||
|
| Description:
|
||||||
|
| Ongoing monitoring of supplier compliance including periodic re-checks,
|
||||||
|
| regulatory updates, and incident tracking.
|
||||||
|
| |-- [Event: 10] Update Status (Compliance status updated) --> [Task: 1600] Compliance Monitoring
|
||||||
|
| |-- [Event: 20] Trigger Re-Assessment (New risk or regulation identified) --> [Task: 1200] Detailed Compliance Review
|
||||||
|
| |-- [Event: 30] Suspend Supplier (Compliance violation detected) --> [Task: 1700] Supplier Suspended
|
||||||
|
|
|
||||||
|
|- [Task: 1700] Supplier Suspended
|
||||||
|
| Team: Compliance Office
|
||||||
|
| Description:
|
||||||
|
| The supplier is temporarily suspended due to compliance violations
|
||||||
|
| or unresolved risks.
|
||||||
|
| |-- [Event: 10] Reinstate Supplier (Issues resolved) --> [Task: 1500] Supplier Activated
|
||||||
|
| |-- [Event: 20] Permanently Ban Supplier (Severe compliance breach) --> [Task: 1900] Compliance Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 1900] Compliance Rejected
|
||||||
|
| Team: Compliance Office
|
||||||
|
| Description:
|
||||||
|
| The supplier failed compliance requirements and is not approved
|
||||||
|
| for any sourcing or export activities.
|
||||||
|
| |-- [Event: 10] Add Comment --> [Task: 1900] Compliance Rejected
|
||||||
|
| |-- [Event: 20] Archive Case (Compliance case archived) --> [Task: 1990] Archived
|
||||||
|
|
|
||||||
|
|- [Task: 1950] Compliance Cancelled
|
||||||
|
| Team: Procurement
|
||||||
|
| Description:
|
||||||
|
| The compliance process was cancelled due to supplier withdrawal
|
||||||
|
| or missing response.
|
||||||
|
| |-- [Event: 10] Archive Case --> [Task: 1990] Archived
|
||||||
|
|
|
||||||
|
END
|
||||||
|
|
|
||||||
|
|- [Task: 1990] Archived
|
||||||
|
|
|
||||||
147
doc/PROMTS/result-claude.txt
Normal file
147
doc/PROMTS/result-claude.txt
Normal file
|
|
@ -0,0 +1,147 @@
|
||||||
|
```
|
||||||
|
Business Process: Supplier Compliance Check
|
||||||
|
|
||||||
|
START
|
||||||
|
|
|
||||||
|
|- [Task: 1000] Supplier Registration Received
|
||||||
|
| Team: Procurement
|
||||||
|
| Description:
|
||||||
|
| A new supplier has submitted their registration documents for onboarding. Initial review of completeness is required before compliance verification can begin.
|
||||||
|
| |-- [Event: 10] Documents Complete (All required documents received) --> [Task: 1100] Initial Document Review
|
||||||
|
| |-- [Event: 20] Request Documents (Missing documents identified) --> [Task: 1000] Supplier Registration Received
|
||||||
|
| |-- [Event: 30] Reject (Invalid submission) --> [Task: 1900] Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 1100] Initial Document Review
|
||||||
|
| Team: Procurement
|
||||||
|
| Description:
|
||||||
|
| Review supplier documentation for authenticity and validity. Verify business registration, certifications (ISO, industry-specific), and financial statements.
|
||||||
|
| |-- [Event: 10] Add Comment --> [Task: 1100] Initial Document Review
|
||||||
|
| |-- [Event: 20] Documents Valid (Documentation verified) --> [Task: 1200] Export Control Screening
|
||||||
|
| |-- [Event: 30] Request Clarification (Additional information needed) --> [Task: 1050] Awaiting Supplier Response
|
||||||
|
| |-- [Event: 40] Reject (Documentation invalid or fraudulent) --> [Task: 1900] Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 1050] Awaiting Supplier Response
|
||||||
|
| Team: Procurement
|
||||||
|
| Description:
|
||||||
|
| Waiting for supplier to provide requested clarifications or additional documentation.
|
||||||
|
| |-- [Event: 10] Response Received (Supplier provided requested information) --> [Task: 1100] Initial Document Review
|
||||||
|
| |-- [Event: 20] Send Reminder --> [Task: 1050] Awaiting Supplier Response
|
||||||
|
| |-- [Event: 30] No Response (Supplier did not respond within deadline) --> [Task: 1900] Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 1200] Export Control Screening
|
||||||
|
| Team: Compliance
|
||||||
|
| Description:
|
||||||
|
| Conduct export control screening including sanctions list check (OFAC, EU, UN), denied party screening, and dual-use goods assessment. Critical step for export compliance.
|
||||||
|
| |-- [Event: 10] Add Comment --> [Task: 1200] Export Control Screening
|
||||||
|
| |-- [Event: 20] Screening Passed (No export control issues identified) --> [Task: 1300] Risk Assessment
|
||||||
|
| |-- [Event: 30] Potential Match (Possible sanctions list match found) --> [Task: 1250] Enhanced Due Diligence
|
||||||
|
| |-- [Event: 40] Screening Failed (Confirmed sanctions list match) --> [Task: 1900] Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 1250] Enhanced Due Diligence
|
||||||
|
| Team: Compliance
|
||||||
|
| Description:
|
||||||
|
| Conduct enhanced due diligence for potential sanctions matches or high-risk indicators. Verify beneficial ownership, conduct background checks, and assess ultimate risk.
|
||||||
|
| |-- [Event: 10] Add Comment --> [Task: 1250] Enhanced Due Diligence
|
||||||
|
| |-- [Event: 20] Request Additional Information --> [Task: 1050] Awaiting Supplier Response
|
||||||
|
| |-- [Event: 30] Risk Mitigated (Due diligence confirms no compliance issues) --> [Task: 1300] Risk Assessment
|
||||||
|
| |-- [Event: 40] Risk Confirmed (Compliance risk confirmed) --> [Task: 1900] Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 1300] Risk Assessment
|
||||||
|
| Team: Compliance
|
||||||
|
| Description:
|
||||||
|
| Comprehensive risk assessment including country risk, industry risk, financial stability, and environmental/social governance (ESG) factors. Assign risk rating to supplier.
|
||||||
|
| |-- [Event: 10] Add Comment --> [Task: 1300] Risk Assessment
|
||||||
|
| |-- [Event: 20] Low Risk (Supplier classified as low risk) --> [Task: 1400] Compliance Approval
|
||||||
|
| |-- [Event: 30] Medium Risk (Supplier classified as medium risk) --> [Task: 1400] Compliance Approval
|
||||||
|
| |-- [Event: 40] High Risk (Supplier classified as high risk) --> [Task: 1350] Management Escalation
|
||||||
|
| |-- [Event: 50] Unacceptable Risk (Risk level exceeds tolerance) --> [Task: 1900] Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 1350] Management Escalation
|
||||||
|
| Team: Management
|
||||||
|
| Description:
|
||||||
|
| High-risk supplier requires management review and decision. Business justification and risk mitigation measures must be evaluated.
|
||||||
|
| |-- [Event: 10] Add Comment --> [Task: 1350] Management Escalation
|
||||||
|
| |-- [Event: 20] Approve with Conditions (Approved with additional controls) --> [Task: 1400] Compliance Approval
|
||||||
|
| |-- [Event: 30] Request Additional Review (Further analysis required) --> [Task: 1300] Risk Assessment
|
||||||
|
| |-- [Event: 40] Reject (Risk not acceptable) --> [Task: 1900] Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 1400] Compliance Approval
|
||||||
|
| Team: Compliance
|
||||||
|
| Description:
|
||||||
|
| Final compliance approval step. Document compliance decision, conditions, and monitoring requirements. Generate compliance certificate.
|
||||||
|
| |-- [Event: 10] Add Comment --> [Task: 1400] Compliance Approval
|
||||||
|
| |-- [Event: 20] Approve (Compliance approved) --> [Task: 1500] Contract Review
|
||||||
|
| |-- [Event: 30] Conditional Approval (Approved with conditions) --> [Task: 1500] Contract Review
|
||||||
|
| |-- [Event: 40] Return for Review (Issues identified during approval) --> [Task: 1300] Risk Assessment
|
||||||
|
|
|
||||||
|
|- [Task: 1500] Contract Review
|
||||||
|
| Team: Legal
|
||||||
|
| Description:
|
||||||
|
| Review and prepare supplier agreement including compliance clauses, audit rights, termination conditions, and liability provisions.
|
||||||
|
| |-- [Event: 10] Add Comment --> [Task: 1500] Contract Review
|
||||||
|
| |-- [Event: 20] Contract Ready (Contract prepared and reviewed) --> [Task: 1600] Supplier Onboarding
|
||||||
|
| |-- [Event: 30] Negotiate Terms (Contract terms need negotiation) --> [Task: 1550] Contract Negotiation
|
||||||
|
|
|
||||||
|
|- [Task: 1550] Contract Negotiation
|
||||||
|
| Team: Legal
|
||||||
|
| Description:
|
||||||
|
| Negotiate contract terms with supplier. Ensure compliance requirements are non-negotiable while finding mutually acceptable commercial terms.
|
||||||
|
| |-- [Event: 10] Add Comment --> [Task: 1550] Contract Negotiation
|
||||||
|
| |-- [Event: 20] Agreement Reached (Terms agreed upon) --> [Task: 1500] Contract Review
|
||||||
|
| |-- [Event: 30] Escalate to Management (Negotiation requires management input) --> [Task: 1350] Management Escalation
|
||||||
|
| |-- [Event: 40] Negotiation Failed (Unable to reach agreement) --> [Task: 1900] Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 1600] Supplier Onboarding
|
||||||
|
| Team: Procurement
|
||||||
|
| Description:
|
||||||
|
| Complete supplier onboarding in ERP system. Set up vendor master data, payment terms, and compliance monitoring schedule.
|
||||||
|
| |-- [Event: 10] Add Comment --> [Task: 1600] Supplier Onboarding
|
||||||
|
| |-- [Event: 20] Onboarding Complete (Supplier successfully onboarded) --> [Task: 1700] Approved
|
||||||
|
| |-- [Event: 30] Technical Issue (System setup issue encountered) --> [Task: 1600] Supplier Onboarding
|
||||||
|
|
|
||||||
|
|- [Task: 1700] Approved
|
||||||
|
| Team: Procurement
|
||||||
|
| Description:
|
||||||
|
| Supplier compliance check completed successfully. Supplier is approved and active in the system. Next review date is scheduled based on risk rating.
|
||||||
|
| |-- [Event: 10] Add Comment --> [Task: 1700] Approved
|
||||||
|
| |-- [Event: 20] Schedule Review (Periodic review scheduled) --> [Task: 1750] Periodic Review Due
|
||||||
|
| |-- [Event: 30] Archive --> [Task: 1800] Completed
|
||||||
|
|
|
||||||
|
|- [Task: 1750] Periodic Review Due
|
||||||
|
| Team: Compliance
|
||||||
|
| Description:
|
||||||
|
| Scheduled periodic compliance review for existing supplier. Re-screening and documentation update required.
|
||||||
|
| |-- [Event: 10] Add Comment --> [Task: 1750] Periodic Review Due
|
||||||
|
| |-- [Event: 20] Start Review (Initiate compliance re-check) --> [Task: 1200] Export Control Screening
|
||||||
|
| |-- [Event: 30] Suspend Supplier (Issues identified, supplier suspended) --> [Task: 1760] Supplier Suspended
|
||||||
|
|
|
||||||
|
|- [Task: 1760] Supplier Suspended
|
||||||
|
| Team: Compliance
|
||||||
|
| Description:
|
||||||
|
| Supplier has been suspended due to compliance concerns. Investigation and remediation required before reactivation.
|
||||||
|
| |-- [Event: 10] Add Comment --> [Task: 1760] Supplier Suspended
|
||||||
|
| |-- [Event: 20] Remediation Complete (Issues resolved) --> [Task: 1200] Export Control Screening
|
||||||
|
| |-- [Event: 30] Terminate Supplier (Permanent termination) --> [Task: 1900] Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 1800] Completed
|
||||||
|
| Team: Procurement
|
||||||
|
| Description:
|
||||||
|
| Supplier compliance check process completed and archived. All documentation stored for audit trail.
|
||||||
|
| |-- [Event: 10] Add Comment --> [Task: 1800] Completed
|
||||||
|
|
|
||||||
|
|- [Task: 1900] Rejected
|
||||||
|
| Team: Compliance
|
||||||
|
| Description:
|
||||||
|
| Supplier has been rejected due to compliance issues. Rejection reason documented and supplier notified.
|
||||||
|
| |-- [Event: 10] Add Comment --> [Task: 1900] Rejected
|
||||||
|
| |-- [Event: 20] Appeal Received (Supplier submitted appeal) --> [Task: 1350] Management Escalation
|
||||||
|
| |-- [Event: 30] Archive --> [Task: 1990] Archived - Rejected
|
||||||
|
|
|
||||||
|
END
|
||||||
|
|
|
||||||
|
|- [Task: 1990] Archived - Rejected
|
||||||
|
| Team: Compliance
|
||||||
|
| Description:
|
||||||
|
| Rejected supplier case archived. Supplier added to internal watchlist for future reference.
|
||||||
|
|
|
||||||
|
```
|
||||||
95
doc/PROMTS/result-deepseek.txt
Normal file
95
doc/PROMTS/result-deepseek.txt
Normal file
|
|
@ -0,0 +1,95 @@
|
||||||
|
Business Process: Supplier Compliance Check
|
||||||
|
|
||||||
|
START
|
||||||
|
|
|
||||||
|
|- [Task: 2000] New Supplier Registration Submitted
|
||||||
|
| Team: Procurement
|
||||||
|
| Description:
|
||||||
|
| A new supplier has submitted their registration data via the portal. Initial data quality check is required.
|
||||||
|
| |-- [Event: 10] Data Complete (Registration data appears complete) --> [Task: 2100] Initial Risk Screening
|
||||||
|
| |-- [Event: 20] Data Incomplete (Critical data missing) --> [Task: 2900] Request Completion
|
||||||
|
| |-- [Event: 30] Reject (Clearly non-compliant or irrelevant supplier) --> [Task: 2990] Registration Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 2100] Initial Risk Screening
|
||||||
|
| Team: Compliance
|
||||||
|
| Description:
|
||||||
|
| Automated and manual screening for country sanctions, PEP lists, and basic financial health. Determine risk category (Low/Medium/High).
|
||||||
|
| |-- [Event: 10] Low Risk (Passed automated checks, non-critical industry) --> [Task: 2200] Document Collection
|
||||||
|
| |-- [Event: 20] Medium Risk (Flagged in partial checks or medium-risk industry) --> [Task: 2250] Enhanced Due Diligence
|
||||||
|
| |-- [Event: 30] High Risk (Sanction flag, high-risk country, critical industry) --> [Task: 2400] Compliance Committee Review
|
||||||
|
|
|
||||||
|
|- [Task: 2200] Document Collection
|
||||||
|
| Team: Supplier Master Data
|
||||||
|
| Description:
|
||||||
|
| Request and collect mandatory compliance documents (e.g., ISO certificates, business license, tax registration, bank details).
|
||||||
|
| |-- [Event: 10] All Documents Received (Documents uploaded by supplier) --> [Task: 2300] Document Verification
|
||||||
|
| |-- [Event: 20] Reminder Sent (Supplier did not provide all documents) --> [Task: 2200] Document Collection
|
||||||
|
| |-- [Event: 30] Non-Responsive (Supplier did not react within timeframe) --> [Task: 2990] Registration Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 2250] Enhanced Due Diligence
|
||||||
|
| Team: Compliance
|
||||||
|
| Description:
|
||||||
|
| Conduct in-depth background checks, request additional financial statements, and assess sustainability practices.
|
||||||
|
| |-- [Event: 10] Due Diligence Passed (Assessment positive) --> [Task: 2200] Document Collection
|
||||||
|
| |-- [Event: 20] Due Diligence Concerns (Unclear findings or minor issues) --> [Task: 2400] Compliance Committee Review
|
||||||
|
| |-- [Event: 30] Due Diligence Failed (Critical issues found) --> [Task: 2990] Registration Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 2300] Document Verification
|
||||||
|
| Team: Quality & Compliance
|
||||||
|
| Description:
|
||||||
|
| Validate authenticity and expiry dates of submitted documents. Check for consistency with registration data.
|
||||||
|
| |-- [Event: 10] Verified & Valid (All documents are valid and authentic) --> [Task: 2500] Final Approval
|
||||||
|
| |-- [Event: 20] Document Invalid (Forgery or major discrepancy found) --> [Task: 2990] Registration Rejected
|
||||||
|
| |-- [Event: 30] Update Required (Document expired or needs clarification) --> [Task: 2900] Request Completion
|
||||||
|
|
|
||||||
|
|- [Task: 2400] Compliance Committee Review
|
||||||
|
| Team: Compliance Committee
|
||||||
|
| Description:
|
||||||
|
| Formal review meeting for medium/high-risk suppliers or cases with due diligence concerns. Final risk assessment and decision.
|
||||||
|
| |-- [Event: 10] Approved (Committee grants approval, possibly with conditions) --> [Task: 2200] Document Collection
|
||||||
|
| |-- [Event: 20] Approved with Conditions (Specific actions required from supplier) --> [Task: 2450] Monitor Conditions
|
||||||
|
| |-- [Event: 30] Rejected (Committee rejects the supplier registration) --> [Task: 2990] Registration Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 2450] Monitor Conditions
|
||||||
|
| Team: Compliance
|
||||||
|
| Description:
|
||||||
|
| Track and verify that the supplier fulfills the conditions set by the Compliance Committee (e.g., audit, implementation of a code of conduct).
|
||||||
|
| |-- [Event: 10] Conditions Met (Supplier fulfilled all requirements) --> [Task: 2500] Final Approval
|
||||||
|
| |-- [Event: 20] Conditions Not Met (Supplier failed to meet requirements in time) --> [Task: 2990] Registration Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 2500] Final Approval
|
||||||
|
| Team: Procurement Lead
|
||||||
|
| Description:
|
||||||
|
| Final activation of the supplier in the master data system. Supplier receives compliant status and is eligible for contracts.
|
||||||
|
| |-- [Event: 10] Activate Supplier (Supplier activated in system) --> [Task: 2800] Supplier Active
|
||||||
|
|
|
||||||
|
|- [Task: 2800] Supplier Active
|
||||||
|
| Team: System
|
||||||
|
| Description:
|
||||||
|
| Supplier is approved and active. Process is completed. Periodic re-screening will be triggered automatically.
|
||||||
|
| |-- [Event: 10] Add Comment (Notes for master data) --> [Task: 2800] Supplier Active
|
||||||
|
|
|
||||||
|
|- [Task: 2900] Request Completion
|
||||||
|
| Team: Supplier Master Data
|
||||||
|
| Description:
|
||||||
|
| Request missing or updated information/documents from the supplier. Set a deadline for response.
|
||||||
|
| |-- [Event: 10] Information Provided (Supplier submits requested data) --> [Task: 2100] Initial Risk Screening
|
||||||
|
| |-- [Event: 20] Reminder Sent --> [Task: 2900] Request Completion
|
||||||
|
| |-- [Event: 30] No Response (Deadline passed) --> [Task: 2990] Registration Rejected
|
||||||
|
|
|
||||||
|
|- [Task: 2990] Registration Rejected
|
||||||
|
| Team: Procurement
|
||||||
|
| Description:
|
||||||
|
| Supplier registration has been rejected due to non-compliance, incomplete data, or failed checks. Supplier is informed.
|
||||||
|
| |-- [Event: 10] Archive Record (Process data archived) --> [Task: 2999] Closed
|
||||||
|
| |-- [Event: 20] Appeal Received (Supplier files an appeal) --> [Task: 2400] Compliance Committee Review
|
||||||
|
|
|
||||||
|
|- [Task: 2999] Closed
|
||||||
|
| Team: System
|
||||||
|
| Description:
|
||||||
|
| The compliance check process for this supplier is closed (either active or rejected).
|
||||||
|
|
|
||||||
|
END
|
||||||
|
|
|
||||||
|
|- [Task: 2999] Closed
|
||||||
|
|
|
||||||
73
doc/PROMTS/result-gemini.txt
Normal file
73
doc/PROMTS/result-gemini.txt
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
Business Process: Supplier Compliance Check
|
||||||
|
|
||||||
|
START
|
||||||
|
|
|
||||||
|
|- [Task: 2000] Supplier Data Input
|
||||||
|
| Team: Purchasing
|
||||||
|
| 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
|
||||||
|
|
|
||||||
|
|- [Task: 2100] Initial Compliance Screening
|
||||||
|
| Team: Compliance Department
|
||||||
|
| 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
|
||||||
|
|
|
||||||
|
|- [Task: 2150] Detailed Compliance Review
|
||||||
|
| Team: Compliance Department
|
||||||
|
| 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
|
||||||
|
|
|
||||||
|
|- [Task: 2200] Send Due Diligence Questionnaire (DDQ)
|
||||||
|
| Team: Compliance Department
|
||||||
|
| 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
|
||||||
|
|
|
||||||
|
|- [Task: 2250] Wait for Supplier Response
|
||||||
|
| Team: System / Purchasing
|
||||||
|
| 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
|
||||||
|
|
|
||||||
|
|- [Task: 2300] Review DDQ
|
||||||
|
| Team: Compliance Department
|
||||||
|
| 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
|
||||||
|
|
|
||||||
|
|- [Task: 2400] Final Approval
|
||||||
|
| Team: Compliance Management
|
||||||
|
| 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
|
||||||
|
|
|
||||||
|
|- [Task: 2800] Approved
|
||||||
|
| Team: Purchasing
|
||||||
|
| 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
|
||||||
|
|
|
||||||
|
|- [Task: 2900] Rejected
|
||||||
|
| Team: Compliance Department
|
||||||
|
| 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
|
||||||
|
|
|
||||||
|
END
|
||||||
|
|
|
||||||
|
|- [Task: 2990] Completed
|
||||||
|
|
|
||||||
67
doc/PROMTS/result-mistral.txt
Normal file
67
doc/PROMTS/result-mistral.txt
Normal file
|
|
@ -0,0 +1,67 @@
|
||||||
|
START
|
||||||
|
|
|
||||||
|
|- [Task: 1000] New Supplier Request
|
||||||
|
Team: Procurement
|
||||||
|
Description:
|
||||||
|
A new supplier request is received from a department (e.g., Purchasing, Logistics). The supplier must undergo compliance checks before onboarding.
|
||||||
|
|-- [Event: 10] **Proceed** (Request valid) --> [Task: 1200] Basic Compliance Check
|
||||||
|
|-- [Event: 20] **Reject** (Request invalid/incomplete) --> [Task: 1900] Rejected
|
||||||
|
|
||||||
|
|- [Task: 1200] Basic Compliance Check
|
||||||
|
Team: Compliance Team
|
||||||
|
Description:
|
||||||
|
Initial screening for legal compliance (e.g., business registration, tax ID, no sanctions). Automated checks (e.g., sanctions lists) may be performed here.
|
||||||
|
|-- [Event: 10] **Passed** (Basic compliance verified) --> [Task: 1300] Detailed Risk Assessment
|
||||||
|
|-- [Event: 20] **Failed** (Non-compliant in basic checks) --> [Task: 1900] Rejected
|
||||||
|
|-- [Event: 30] **Pending Data** (Additional documents required) --> [Task: 1200] Basic Compliance Check *(loop)*
|
||||||
|
|
||||||
|
|- [Task: 1300] Detailed Risk Assessment
|
||||||
|
Team: Risk Management
|
||||||
|
Description:
|
||||||
|
Manual assessment of ESG (Environmental, Social, Governance) risks, labor standards, and supply chain transparency (e.g., audits, third-party reports).
|
||||||
|
|-- [Event: 10] **Low Risk** --> [Task: 1400] Contract Review
|
||||||
|
|-- [Event: 20] **Medium Risk** --> [Task: 1500] Mitigation Plan Required
|
||||||
|
|-- [Event: 30] **High Risk** --> [Task: 1900] Rejected
|
||||||
|
|-- [Event: 40] **Pending Data** --> [Task: 1300] Detailed Risk Assessment *(loop)*
|
||||||
|
|
||||||
|
|- [Task: 1400] Contract Review
|
||||||
|
Team: Legal & Procurement
|
||||||
|
Description:
|
||||||
|
Draft/approve compliance clauses (e.g., no forced labor, environmental standards) in the supplier contract.
|
||||||
|
|-- [Event: 10] **Approved** --> [Task: 1600] Approval
|
||||||
|
|-- [Event: 20] **Revised** (Contract changes needed) --> [Task: 1400] Contract Review *(loop)*
|
||||||
|
|
||||||
|
|- [Task: 1500] Mitigation Plan Required
|
||||||
|
Team: Risk Management & Supplier
|
||||||
|
Description:
|
||||||
|
Collaborate with the supplier to create a mitigation plan for identified risks (e.g., training programs, audits). Plan must be approved by Compliance.
|
||||||
|
|-- [Event: 10] **Plan Approved** --> [Task: 1600] Approval
|
||||||
|
|-- [Event: 20] **Plan Rejected** --> [Task: 1900] Rejected
|
||||||
|
|-- [Event: 30] **Pending Data** (Additional info needed) --> [Task: 1500] Mitigation Plan Required *(loop)*
|
||||||
|
|
||||||
|
|- [Task: 1600] Approval
|
||||||
|
Team: Supply Chain Management
|
||||||
|
Description:
|
||||||
|
Final approval to onboard the supplier. Includes notification to relevant departments (e.g., Purchasing, Logistics).
|
||||||
|
|-- [Event: 10] **Approve Supplier** (Onboarding initiated) --> [Task: 1800] Supplier Onboarded
|
||||||
|
|-- [Event: 20] **Reject** (Approval denied) --> [Task: 1900] Rejected
|
||||||
|
|
||||||
|
|- [Task: 1800] Supplier Onboarded
|
||||||
|
Team: Procurement & IT
|
||||||
|
Description:
|
||||||
|
Supplier is added to the system, and an onboarding kit (e.g., compliance manuals) is sent. Process completed.
|
||||||
|
|-- [Event: 10] **Add Notes** --> [Task: 1800] Supplier Onboarded *(loop)*
|
||||||
|
|-- [Event: 20] **Escalate Issue** --> [Task: 1900] Rejected *(if critical non-compliance detected post-onboarding)*
|
||||||
|
|
||||||
|
|- [Task: 1900] Rejected
|
||||||
|
Team: Procurement
|
||||||
|
Description:
|
||||||
|
Supplier request rejected. Reason documented (e.g., compliance failure, risk). Notification sent to requester.
|
||||||
|
|-- [Event: 10] **Add Comment** --> [Task: 1900] Rejected *(loop)*
|
||||||
|
|-- [Event: 30] **Delete Request** --> [Task: 1990] Deleted
|
||||||
|
|
||||||
|
|- [Task: 1990] Deleted
|
||||||
|
Team: System
|
||||||
|
Description:
|
||||||
|
Request removed from the system. No further action required.
|
||||||
|
---
|
||||||
368
doc/PROMTS/test.json
Normal file
368
doc/PROMTS/test.json
Normal file
|
|
@ -0,0 +1,368 @@
|
||||||
|
{#- Default system message if no system prompt is passed. #
|
||||||
|
}
|
||||||
|
{%- set default_system_message = 'You are Ministral-3-14B-Instruct-2512, a Large Language Model (LLM) created by Mistral AI, a French startup headquartered in Paris.\
|
||||||
|
You power an AI assistant called Le Chat.\
|
||||||
|
Your knowledge base was last updated on 2023-10-01.\
|
||||||
|
The current date is {today
|
||||||
|
}.\
|
||||||
|
\
|
||||||
|
When you\\'re not sure about some information or when the user\\'s request requires up-to-date or specific data, you must use the available tools to fetch the information. Do not hesitate to use tools whenever they can provide a more accurate or complete response. If no relevant tools are available, then clearly state that you don\\'t have the information and avoid making up anything.\
|
||||||
|
If the user\\'s question is not clear, ambiguous, or does not provide enough context for you to accurately answer the question, you do not try to answer it right away and you rather ask the user to clarify their request (e.g. "What are some good restaurants around me?" => "Where are you?" or "When is the next flight to Tokyo" => "Where do you travel from?").\
|
||||||
|
You are always very attentive to dates, in particular you try to resolve dates (e.g. "yesterday" is {yesterday
|
||||||
|
}) and when asked about information at specific dates, you discard information that is at another date.\
|
||||||
|
You follow these instructions in all languages, and always respond to the user in the language they use or request.\
|
||||||
|
Next sections describe the capabilities that you have.\
|
||||||
|
\
|
||||||
|
# WEB BROWSING INSTRUCTIONS\
|
||||||
|
\
|
||||||
|
You cannot perform any web search or access internet to open URLs, links etc. If it seems like the user is expecting you to do so, you clarify the situation and ask the user to copy paste the text directly in the chat.\
|
||||||
|
\
|
||||||
|
# MULTI-MODAL INSTRUCTIONS\
|
||||||
|
\
|
||||||
|
You have the ability to read images, but you cannot generate images. You also cannot transcribe audio files or videos.\
|
||||||
|
You cannot read nor transcribe audio files or videos.\
|
||||||
|
\
|
||||||
|
# TOOL CALLING INSTRUCTIONS\
|
||||||
|
\
|
||||||
|
You may have access to tools that you can use to fetch information or perform actions. You must use these tools in the following situations:\
|
||||||
|
\
|
||||||
|
1. When the request requires up-to-date information.\
|
||||||
|
2. When the request requires specific data that you do not have in your knowledge base.\
|
||||||
|
3. When the request involves actions that you cannot perform without tools.\
|
||||||
|
\
|
||||||
|
Always prioritize using tools to provide the most accurate and helpful response. If tools are not available, inform the user that you cannot perform the requested action at the moment.' %
|
||||||
|
}
|
||||||
|
|
||||||
|
{#- Begin of sequence token. #
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- bos_token
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{#- Handle system prompt if it exists. #
|
||||||
|
}
|
||||||
|
{#- System prompt supports text content or text chunks. #
|
||||||
|
}
|
||||||
|
{%- if messages[
|
||||||
|
0
|
||||||
|
]['role'
|
||||||
|
] == 'system' %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- '[SYSTEM_PROMPT
|
||||||
|
]' -
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{%- if messages[
|
||||||
|
0
|
||||||
|
]['content'
|
||||||
|
] is string %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- messages[
|
||||||
|
0
|
||||||
|
]['content'
|
||||||
|
] -
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{%- else %
|
||||||
|
}
|
||||||
|
{%- for block in messages[
|
||||||
|
0
|
||||||
|
]['content'
|
||||||
|
] %
|
||||||
|
}
|
||||||
|
{%- if block['type'
|
||||||
|
] == 'text' %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- block['text'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{%- else %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- raise_exception('Only text chunks are supported in system message contents.')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{%- endif %
|
||||||
|
}
|
||||||
|
{%- endfor %
|
||||||
|
}
|
||||||
|
{%- endif %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- '[/SYSTEM_PROMPT
|
||||||
|
]' -
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{%- set loop_messages = messages[
|
||||||
|
1:
|
||||||
|
] %
|
||||||
|
}
|
||||||
|
{%- else %
|
||||||
|
}
|
||||||
|
{%- set loop_messages = messages %
|
||||||
|
}
|
||||||
|
{%- if default_system_message != '' %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- '[SYSTEM_PROMPT
|
||||||
|
]' + default_system_message + '[/SYSTEM_PROMPT
|
||||||
|
]'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{%- endif %
|
||||||
|
}
|
||||||
|
{%- endif %
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
{#- Tools definition #
|
||||||
|
}
|
||||||
|
{%- set tools_definition = '' %
|
||||||
|
}
|
||||||
|
{%- set has_tools = false %
|
||||||
|
}
|
||||||
|
{%- if tools is defined and tools is not none and tools|length > 0 %
|
||||||
|
}
|
||||||
|
{%- set has_tools = true %
|
||||||
|
}
|
||||||
|
{%- set tools_definition = '[AVAILABLE_TOOLS
|
||||||
|
]' + (tools| tojson) + '[/AVAILABLE_TOOLS
|
||||||
|
]' %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- tools_definition
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{%- endif %
|
||||||
|
}
|
||||||
|
|
||||||
|
{#- Checks for alternating user/assistant messages. #
|
||||||
|
}
|
||||||
|
{%- set ns = namespace(index=0) %
|
||||||
|
}
|
||||||
|
{%- for message in loop_messages %
|
||||||
|
}
|
||||||
|
{%- if message.role == 'user' or (message.role == 'assistant' and (message.tool_calls is not defined or message.tool_calls is none or message.tool_calls | length == 0)) %
|
||||||
|
}
|
||||||
|
{%- if (message['role'
|
||||||
|
] == 'user') != (ns.index % 2 == 0) %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- raise_exception('After the optional system message, conversation roles must alternate user and assistant roles except for tool calls and results.')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{%- endif %
|
||||||
|
}
|
||||||
|
{%- set ns.index = ns.index + 1 %
|
||||||
|
}
|
||||||
|
{%- endif %
|
||||||
|
}
|
||||||
|
{%- endfor %
|
||||||
|
}
|
||||||
|
|
||||||
|
{#- Handle conversation messages. #
|
||||||
|
}
|
||||||
|
{%- for message in loop_messages %
|
||||||
|
}
|
||||||
|
|
||||||
|
{#- User messages supports text content or text and image chunks. #
|
||||||
|
}
|
||||||
|
{%- if message['role'
|
||||||
|
] == 'user' %
|
||||||
|
}
|
||||||
|
{%- if message['content'
|
||||||
|
] is string %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- '[INST
|
||||||
|
]' + message['content'
|
||||||
|
] + '[/INST
|
||||||
|
]'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{%- elif message['content'
|
||||||
|
] | length > 0 %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- '[INST
|
||||||
|
]'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{%- if message['content'
|
||||||
|
] | length == 2 %
|
||||||
|
}
|
||||||
|
{%- set blocks = message['content'
|
||||||
|
] | sort(attribute='type') %
|
||||||
|
}
|
||||||
|
{%- else %
|
||||||
|
}
|
||||||
|
{%- set blocks = message['content'
|
||||||
|
] %
|
||||||
|
}
|
||||||
|
{%- endif %
|
||||||
|
}
|
||||||
|
{%- for block in blocks %
|
||||||
|
}
|
||||||
|
{%- if block['type'
|
||||||
|
] == 'text' %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- block['text'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{%- elif block['type'
|
||||||
|
] in ['image', 'image_url'
|
||||||
|
] %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- '[IMG
|
||||||
|
]'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{%- else %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- raise_exception('Only text, image and image_url chunks are supported in user message content.')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{%- endif %
|
||||||
|
}
|
||||||
|
{%- endfor %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- '[/INST
|
||||||
|
]'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{%- else %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- raise_exception('User message must have a string or a list of chunks in content')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{%- endif %
|
||||||
|
}
|
||||||
|
|
||||||
|
{#- Assistant messages supports text content or text and image chunks. #
|
||||||
|
}
|
||||||
|
{%- elif message['role'
|
||||||
|
] == 'assistant' %
|
||||||
|
}
|
||||||
|
{%- if false %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- raise_exception('Assistant message must have a string or a list of chunks in content or a list of tool calls.')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{%- endif %
|
||||||
|
}
|
||||||
|
|
||||||
|
{%- if message['content'
|
||||||
|
] is string %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- message['content'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{%- elif message['content'
|
||||||
|
] | length > 0 %
|
||||||
|
}
|
||||||
|
{%- for block in message['content'
|
||||||
|
] %
|
||||||
|
}
|
||||||
|
{%- if block['type'
|
||||||
|
] == 'text' %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- block['text'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{%- else %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- raise_exception('Only text chunks are supported in assistant message contents.')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{%- endif %
|
||||||
|
}
|
||||||
|
{%- endfor %
|
||||||
|
}
|
||||||
|
{%- endif %
|
||||||
|
}
|
||||||
|
|
||||||
|
{%- if message['tool_calls'
|
||||||
|
] is defined and message['tool_calls'
|
||||||
|
] is not none and message['tool_calls'
|
||||||
|
]|length > 0 %
|
||||||
|
}
|
||||||
|
{%- for tool in message['tool_calls'
|
||||||
|
] %
|
||||||
|
}
|
||||||
|
{%- set arguments = tool['function'
|
||||||
|
]['arguments'
|
||||||
|
] %
|
||||||
|
}
|
||||||
|
{%- if arguments is not string %
|
||||||
|
}
|
||||||
|
{%- set arguments = arguments|tojson|safe %
|
||||||
|
}
|
||||||
|
{%- elif arguments == '' %
|
||||||
|
}
|
||||||
|
{%- set arguments = '{}' %
|
||||||
|
}
|
||||||
|
{%- endif %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- '[TOOL_CALLS
|
||||||
|
]' + tool['function'
|
||||||
|
]['name'
|
||||||
|
] + '[ARGS
|
||||||
|
]' + arguments
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{%- endfor %
|
||||||
|
}
|
||||||
|
{%- endif %
|
||||||
|
}
|
||||||
|
|
||||||
|
{#- End of sequence token for each assistant messages. #
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- eos_token
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{#- Tool messages only supports text content. #
|
||||||
|
}
|
||||||
|
{%- elif message['role'
|
||||||
|
] == 'tool' %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- '[TOOL_RESULTS
|
||||||
|
]' + message['content'
|
||||||
|
]|string + '[/TOOL_RESULTS
|
||||||
|
]'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{#- Raise exception for unsupported roles. #
|
||||||
|
}
|
||||||
|
{%- else %
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{- raise_exception('Only user, assistant and tool roles are supported, got ' + message['role'
|
||||||
|
])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{%- endif %
|
||||||
|
}
|
||||||
|
{%- endfor %
|
||||||
|
}
|
||||||
|
|
@ -1,261 +0,0 @@
|
||||||
# Cassandra - The RAG Database
|
|
||||||
|
|
||||||
The retrieval database in the dynamixs.ai RAG system is based on Apache Cassandra which provides a distributed database system with high availability and scalability.
|
|
||||||
|
|
||||||
The schema for the RAG database is created automatically during startup. This includes the Cassandra keyspace as also the data base schema.
|
|
||||||
The main table has the following definition:
|
|
||||||
|
|
||||||
```sql
|
|
||||||
CREATE TABLE IF NOT EXISTS document_vectors (
|
|
||||||
id text,
|
|
||||||
chunk_id uuid,
|
|
||||||
content_chunk text,
|
|
||||||
content_vector VECTOR <FLOAT, " + DIMENSIONS + ">,
|
|
||||||
PRIMARY KEY (id, chunk_id)
|
|
||||||
);
|
|
||||||
```
|
|
||||||
|
|
||||||
The default dimensions for float vector is based on the LLM used for indexing. 'nomic-embed-text-v2-moe' is a sentence-transformers model to map sentences & paragraphs to a 768 dimensional dense vector space. Find more details in the section [RAG](RAG.md).
|
|
||||||
|
|
||||||
The following section explains the schema in more detail.
|
|
||||||
|
|
||||||
## The Chunk Content
|
|
||||||
|
|
||||||
The RAG database stores not only the vectors but also the textual representation of the content chunks. This has several advantages:
|
|
||||||
|
|
||||||
**Context provision for the LLM**
|
|
||||||
|
|
||||||
The vector is only used for similarity searching - it is a numerical representation of text, but not human-readable. Once the most similar documents have been found, the original text (content_chunk) can be used directly as context for a LLM. Note: the LLM cannot work with the vectors, but needs the readable text.
|
|
||||||
|
|
||||||
**Efficiency of Queries**
|
|
||||||
|
|
||||||
The chunk content also allows an immediate access to the context with no need to make a separate query to the Imixs Workflow instance after the vector search to retrieve the original content. This would mean additional latency and complexity. `content_chunk` stores exactly the text section that corresponds to the vector.
|
|
||||||
|
|
||||||
**The typical RAG workflow**
|
|
||||||
|
|
||||||
The typical workflow in RAG system can be separated into 3 phases:
|
|
||||||
|
|
||||||
1. **Search:** Vector similarity search finds relevant content_vector entries.
|
|
||||||
2. **Retrieval:** The corresponding content_chunk texts are extracted.
|
|
||||||
3. **Generation:** These texts from the `content_chunk' is sent as context to the LLM.
|
|
||||||
|
|
||||||
Without the stored text, the retrieval part of RAG would not be possible, as you would have no content to provide to the LLM as context.
|
|
||||||
|
|
||||||
## The Content Reference
|
|
||||||
|
|
||||||
Together with the `content_chunk` the RAG system stores also the UniqueID from to the referred business process instance within the workflow instance. This is a hybrid concept that provides several advantages:
|
|
||||||
|
|
||||||
**1. Normalization and Consistency**
|
|
||||||
|
|
||||||
- Single Source of Truth: The main Document with the full data exist only once in the imixs-workflow system.
|
|
||||||
- Changes to data inside a process instance which is not part of the Vector DB are automatically available without the need to update the Vector DB.
|
|
||||||
- No full data duplication.
|
|
||||||
|
|
||||||
**2. Better Integration**
|
|
||||||
|
|
||||||
- Easy access not only to text chunks but also the complete business process objects with its metadata for further refinement of a result set.
|
|
||||||
- Ability to apply additional business logic (permissions, status, etc.).
|
|
||||||
|
|
||||||
**3. Flexibility**
|
|
||||||
|
|
||||||
- The application can decide dynamically if either the content_chunk or other parts of the referred process instance is used as context.
|
|
||||||
- Easier updates in case of document changes.
|
|
||||||
- The `content_chunk` still provide fast access to context during the retrieval process.
|
|
||||||
|
|
||||||
## Examples
|
|
||||||
|
|
||||||
The following shows the advantage of the hybrid concept of content_chunks and workitem references in some examples.
|
|
||||||
|
|
||||||
### Retrieval Example
|
|
||||||
|
|
||||||
The user enters the following question:
|
|
||||||
|
|
||||||
_"Show me all service contracts from non-EU countries with a penalty clause of over 1 million EUR."_
|
|
||||||
|
|
||||||
**The problem with pure text chunks:**
|
|
||||||
|
|
||||||
In this kind of a request the context can be build from the received text chunks like :
|
|
||||||
|
|
||||||
- Chunk 1: _"...in case of breach of contract, contractual penalties of 1.5 million EUR are applicable..."_
|
|
||||||
- Chunk 2: _"...Penalty clause: contractual penalties of 2.3 million EUR..."_
|
|
||||||
- Chunk 3: _"...penalties of 1.8 million EUR in case of non-fulfillment..."_
|
|
||||||
|
|
||||||
What is missing here: contract number, date, contracting party, country, contract value, status, etc.
|
|
||||||
|
|
||||||
**The Advantage of reference IDs:**
|
|
||||||
|
|
||||||
But using the id the RAG system can access the full business data from the workflow system. This allows to build more relevant context like :
|
|
||||||
|
|
||||||
```
|
|
||||||
Found service contracts:
|
|
||||||
|
|
||||||
1. Contract SVC-2024-001 (ABC Corp Singapore)
|
|
||||||
- Concluded: 15.03.2024
|
|
||||||
- Contract penalty: 1.5 million EUR
|
|
||||||
- Status: Active
|
|
||||||
|
|
||||||
2. Contract SVC-2024-007 (XYZ Ltd Hong Kong)
|
|
||||||
- Concluded: 22.01.2024
|
|
||||||
- Contract penalty: 2.3 million EUR
|
|
||||||
- Status: Under negotiation
|
|
||||||
```
|
|
||||||
|
|
||||||
Using the combination of content_chunk text and metadata form the process instance allows to build even more complex context.
|
|
||||||
|
|
||||||
So the hybrid approach is clearly more sensible for a Business Process Management System, as it combines both the advantages of RAG (semantic search) and structured business data.
|
|
||||||
|
|
||||||
### Complex Example
|
|
||||||
|
|
||||||
Next we can examine a more complex use case.
|
|
||||||
|
|
||||||
The user enters the following question:
|
|
||||||
|
|
||||||
_"Are there incoming invoices in which service fees have been charged that do not correspond to the underlying contracts?"_
|
|
||||||
|
|
||||||
This example indeed touches the limits of RAG, but not necessarily insurmountable ones.
|
|
||||||
|
|
||||||
The challenges:
|
|
||||||
|
|
||||||
1. **Cross-Document Reasoning:**
|
|
||||||
|
|
||||||
- RAG finds similar chunks, but the question requires comparisons between different document types (invoices vs. contracts).
|
|
||||||
- An LLM would need to simultaneously receive invoice chunks AND corresponding contract chunks.
|
|
||||||
|
|
||||||
2. **Structured Data Extraction:**
|
|
||||||
|
|
||||||
- "Service fees" need to be extracted and compared from unstructured text.
|
|
||||||
- Numbers, prices, and service descriptions must be semantically mapped.
|
|
||||||
|
|
||||||
3. **Relationship Logic:**
|
|
||||||
|
|
||||||
- Which invoice belongs to which contract?
|
|
||||||
- The LLM needs this connection to make meaningful comparisons.
|
|
||||||
|
|
||||||
#### Possible Solutions
|
|
||||||
|
|
||||||
The following solutions are specific implementations in the RAG workflow:
|
|
||||||
|
|
||||||
**Approach 1:** Enhanced RAG with a Multi-Step Retrieval
|
|
||||||
|
|
||||||
```
|
|
||||||
# Pseudo-Code
|
|
||||||
def complex_query_handler(question):
|
|
||||||
# Step 1: Finde relevante Rechnungen
|
|
||||||
invoice_chunks = vector_search("Servicegebühren Rechnungen")
|
|
||||||
|
|
||||||
# Step 2: Extrahiere Vertrags-IDs aus gefundenen Rechnungen
|
|
||||||
contract_ids = extract_contract_references(invoice_chunks)
|
|
||||||
|
|
||||||
# Step 3: Hole zugehörige Vertrags-Chunks
|
|
||||||
contract_chunks = get_contract_chunks(contract_ids)
|
|
||||||
|
|
||||||
# Step 4: LLM mit beiden Kontexten
|
|
||||||
return llm.query(question, context=invoice_chunks + contract_chunks)
|
|
||||||
```
|
|
||||||
|
|
||||||
**Approach 2:** Hybrid-System with structured data
|
|
||||||
|
|
||||||
```
|
|
||||||
# Pseudo-Code
|
|
||||||
def intelligent_agent(question):
|
|
||||||
# Agent entscheidet: "Ich brauche Rechnungs- UND Vertragsdaten"
|
|
||||||
plan = create_execution_plan(question)
|
|
||||||
|
|
||||||
for step in plan:
|
|
||||||
if step.type == "find_invoices":
|
|
||||||
invoices = rag_search(step.query)
|
|
||||||
elif step.type == "find_contracts":
|
|
||||||
contracts = rag_search(step.query)
|
|
||||||
elif step.type == "compare":
|
|
||||||
result = llm_compare(invoices, contracts)
|
|
||||||
|
|
||||||
return synthesize_answer(result)
|
|
||||||
```
|
|
||||||
|
|
||||||
**Recommendation**
|
|
||||||
|
|
||||||
Since we already have a business process management suite, we can follow the hybrid approach:
|
|
||||||
|
|
||||||
1. RAG for content discovery: "Find all documents with service fees"
|
|
||||||
2. Structured queries: Use your business data for relationships
|
|
||||||
3. LLM for final analysis: With all relevant data as context.
|
|
||||||
|
|
||||||
```
|
|
||||||
# Pseudo-Code
|
|
||||||
def analyze_service_fee_discrepancies():
|
|
||||||
# RAG: Finde relevante Dokumente
|
|
||||||
relevant_docs = vector_search("Servicegebühren")
|
|
||||||
|
|
||||||
# Business Logic: Hole strukturierte Daten
|
|
||||||
invoices_with_contracts = get_invoice_contract_pairs(relevant_docs)
|
|
||||||
|
|
||||||
# LLM: Analysiere mit vollem Kontext
|
|
||||||
return llm.analyze_discrepancies(invoices_with_contracts)
|
|
||||||
```
|
|
||||||
|
|
||||||
**Conclusion:**
|
|
||||||
|
|
||||||
A pure RAG solution reaches its limits here, but an intelligent hybrid system consisting of RAG + structured data + multi-step reasoning can certainly answer such complex questions.
|
|
||||||
|
|
||||||
## Chunking Business Documents
|
|
||||||
|
|
||||||
As the content_chunk can only have a small size below 1KB the RAG system includes a split process to split documents into smaller content_chunks.
|
|
||||||
The split-process breaks down large business processes into logical chunks. Since the data is usually available in markup or can be prepared for the indexing process within the BPMN model, the split is made based on the structure in the markup. This guarantees a clean separation of text parts without the need to compute overlapping.
|
|
||||||
|
|
||||||
## Data Protection
|
|
||||||
|
|
||||||
Also the vector db may contain sensitive business data represented in content chunks. To protect also this kind of data the RAG system is tightly integrated into the security layer of Imixs-Workflow. In the retrieval phase each content_chunk returned by the vector db is immediately validated against the ACL of the corresponding process instance. This avoids the affect that unauthorized uses may receive sensitive data in a retrieval phase.
|
|
||||||
As the
|
|
||||||
|
|
||||||
## Data Deletion
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
# Administration
|
|
||||||
|
|
||||||
Aside from internal database logic, the Cassandra cluster can also be managed through the Command Line Console (CLI).
|
|
||||||
|
|
||||||
## Using the Cassandra CLI
|
|
||||||
|
|
||||||
To connect to your cluster you can use the cqlsh tool.
|
|
||||||
To run cqlsh from your started docker environment run:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ docker exec -it cassandra cqlsh
|
|
||||||
Connected to dynamixsAiCluster at 127.0.0.1:9042
|
|
||||||
[cqlsh 6.2.0 | Cassandra 5.0.4 | CQL spec 3.4.7 | Native protocol v5]
|
|
||||||
Use HELP for help.
|
|
||||||
cqlsh>
|
|
||||||
```
|
|
||||||
|
|
||||||
## CQL Examples
|
|
||||||
|
|
||||||
The following section contains some basic cqlsh commands. For full description see the [Cassandra CQL refernce](https://docs.datastax.com/en/dse/6.0/cql/).
|
|
||||||
|
|
||||||
**show key spaces:**
|
|
||||||
|
|
||||||
Show all available keyspaces:
|
|
||||||
|
|
||||||
cqlsh> DESC KEYSPACES;
|
|
||||||
|
|
||||||
**Switch to Keysapce:**
|
|
||||||
|
|
||||||
Select a keyspace be name to interact with this keyspace:
|
|
||||||
|
|
||||||
cqlsh> use embeddings;
|
|
||||||
|
|
||||||
**Show tables in a keyspace:**
|
|
||||||
|
|
||||||
Show tables schemas in current keyspace:
|
|
||||||
|
|
||||||
cqlsh:embeddings> DESC TABLES;
|
|
||||||
|
|
||||||
**Drop Keyspace:**
|
|
||||||
|
|
||||||
Drop the keyspace:
|
|
||||||
|
|
||||||
DROP KEYSPACE IF EXISTS <keyspace_name>;
|
|
||||||
|
|
||||||
### Create a dev keyspace with cqlsh
|
|
||||||
|
|
||||||
cqlsh> CREATE KEYSPACE <keyspace_name> WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};
|
|
||||||
211
doc/RLM.md
Normal file
211
doc/RLM.md
Normal file
|
|
@ -0,0 +1,211 @@
|
||||||
|
# BPMN-Aware Large-Scale Process Analysis through LLM Tool Orchestration
|
||||||
|
|
||||||
|
## Abstract
|
||||||
|
|
||||||
|
This paper proposes a novel approach for analyzing large volumes of business process data by combining three concepts: (1) pre-generated process summaries ("Project Insights"), (2) BPMN process definitions as discoverable metadata, and (3) LLM-driven tool orchestration inspired by Recursive Language Models. The approach enables natural language queries across thousands of workflow instances without hitting context window limitations, while leveraging existing process knowledge encoded in BPMN models.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Problem Statement
|
||||||
|
|
||||||
|
Enterprise workflow systems accumulate vast amounts of process data. A typical scenario:
|
||||||
|
|
||||||
|
- 10,000+ completed workflow instances over 6 months
|
||||||
|
- Multiple workflow types (orders, complaints, quotes, support tickets)
|
||||||
|
- Rich contextual data per instance (documents, communications, decisions)
|
||||||
|
|
||||||
|
**Challenge:** Users want to ask analytical questions like _"How did our sales perform in 2025?"_ — questions that implicitly span multiple workflow types and require correlation of thousands of instances.
|
||||||
|
|
||||||
|
**Limitations of current approaches:**
|
||||||
|
|
||||||
|
| Approach | Limitation |
|
||||||
|
| ----------------- | -------------------------------------------------- |
|
||||||
|
| Direct LLM query | Context window exceeded |
|
||||||
|
| Pre-built reports | Cannot handle ad-hoc questions |
|
||||||
|
| Manual analysis | Time-consuming, not scalable |
|
||||||
|
| Simple RAG | Retrieves fragments, misses cross-process patterns |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Proposed Solution
|
||||||
|
|
||||||
|
### 2.1 Core Idea
|
||||||
|
|
||||||
|
Treat the LLM not as a processor of raw data, but as an **orchestrator** that:
|
||||||
|
|
||||||
|
1. **Discovers** available workflow types through BPMN metadata
|
||||||
|
2. **Decides** which processes are relevant to a given question
|
||||||
|
3. **Retrieves** condensed summaries in manageable chunks
|
||||||
|
4. **Correlates** across workflow types when needed
|
||||||
|
5. **Synthesizes** findings into coherent answers
|
||||||
|
|
||||||
|
### 2.2 Key Enablers
|
||||||
|
|
||||||
|
**A) Project Insights (Pre-Condensed Summaries)**
|
||||||
|
|
||||||
|
Each workflow instance already generates a structured summary at key process steps:
|
||||||
|
|
||||||
|
```
|
||||||
|
Project Insight:
|
||||||
|
Event: A quotation request was received from Tom Brack of TechBridge,
|
||||||
|
Tokyo for electronic equipment suitable for Arctic conditions...
|
||||||
|
Unusual/Important Note: Sales team suggested offering products still
|
||||||
|
in development...
|
||||||
|
```
|
||||||
|
|
||||||
|
This reduces token volume by ~95% while preserving analytical value.
|
||||||
|
|
||||||
|
**B) BPMN as Discoverable Metadata**
|
||||||
|
|
||||||
|
Process definitions provide machine-readable context:
|
||||||
|
|
||||||
|
- Available workflow types and their relationships
|
||||||
|
- Process steps and decision points
|
||||||
|
- Data fields captured at each stage
|
||||||
|
- Semantic documentation
|
||||||
|
|
||||||
|
The LLM can query this metadata to understand _what exists_ before deciding _what to analyze_.
|
||||||
|
|
||||||
|
**C) Tool-Based Access Pattern**
|
||||||
|
|
||||||
|
Instead of feeding data directly into the context window, provide callable tools:
|
||||||
|
|
||||||
|
| Tool Category | Purpose |
|
||||||
|
| ------------- | ----------------------------------------------- |
|
||||||
|
| Discovery | List workflow types, describe process structure |
|
||||||
|
| Retrieval | Fetch insights by type, filter, pagination |
|
||||||
|
| Correlation | Find relationships across workflow types |
|
||||||
|
| Aggregation | Calculate cross-process metrics |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Architecture Overview
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────────┐
|
||||||
|
│ User Query │
|
||||||
|
│ "How did our sales perform in 2025?" │
|
||||||
|
└─────────────────────────────────────────────────────────────┘
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌─────────────────────────────────────────────────────────────┐
|
||||||
|
│ LLM Orchestrator │
|
||||||
|
│ │
|
||||||
|
│ 1. What workflow types exist? → discoverWorkflows() │
|
||||||
|
│ 2. Which are relevant? → orders, quotes, complaints │
|
||||||
|
│ 3. What are the metrics? → calculateMetrics() │
|
||||||
|
│ 4. Any anomalies? → correlateWorkflows() │
|
||||||
|
│ 5. Deep dive needed? → getInsights(filter, chunk) │
|
||||||
|
│ 6. Synthesize response │
|
||||||
|
└─────────────────────────────────────────────────────────────┘
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌─────────────────────────────────────────────────────────────┐
|
||||||
|
│ Tool Layer │
|
||||||
|
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||||||
|
│ │ Discovery │ │ Retrieval │ │ Correlation │ │
|
||||||
|
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||||||
|
└─────────────────────────────────────────────────────────────┘
|
||||||
|
│
|
||||||
|
┌───────────────┴───────────────┐
|
||||||
|
▼ ▼
|
||||||
|
┌──────────────────────┐ ┌──────────────────────┐
|
||||||
|
│ BPMN Metadata │ │ Project Insights │
|
||||||
|
│ │ │ │
|
||||||
|
│ - Process definitions│ │ - Pre-condensed │
|
||||||
|
│ - Workflow types │ │ - Per instance │
|
||||||
|
│ - Data schemas │ │ - Flagged anomalies │
|
||||||
|
└──────────────────────┘ └──────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Relation to Existing Research
|
||||||
|
|
||||||
|
### 4.1 Recursive Language Models (Zhang et al., 2025)
|
||||||
|
|
||||||
|
RLM proposes treating long contexts as external variables accessible through a REPL environment. Our approach adopts the core insight — **data as environment, not input** — but replaces arbitrary code execution with controlled tool interfaces.
|
||||||
|
|
||||||
|
| RLM (Paper) | Our Approach |
|
||||||
|
| -------------------- | -------------------------- |
|
||||||
|
| Python REPL | Defined tool interface |
|
||||||
|
| Arbitrary code | Controlled operations |
|
||||||
|
| Generic text context | Structured BPMN + Insights |
|
||||||
|
| LLM decides chunking | Tools handle pagination |
|
||||||
|
|
||||||
|
### 4.2 Function Calling / Tool Use
|
||||||
|
|
||||||
|
Standard LLM tool use focuses on single-purpose functions. Our contribution is the **discovery layer**: the LLM first learns what workflow types exist, then decides which to query — enabling truly ad-hoc analysis without pre-built report logic.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Required Tool Categories
|
||||||
|
|
||||||
|
### 5.1 Discovery Tools
|
||||||
|
|
||||||
|
| Tool | Input | Output |
|
||||||
|
| ------------------- | ------------ | ---------------------------------- |
|
||||||
|
| `discoverWorkflows` | period | List of workflow types with counts |
|
||||||
|
| `describeWorkflow` | workflowType | Process steps, data fields, sample |
|
||||||
|
|
||||||
|
### 5.2 Retrieval Tools
|
||||||
|
|
||||||
|
| Tool | Input | Output |
|
||||||
|
| --------------- | ------------------- | ---------------------------- |
|
||||||
|
| `getInsights` | type, filter, chunk | Paginated insight summaries |
|
||||||
|
| `getStatistics` | type, period | Aggregate counts and metrics |
|
||||||
|
|
||||||
|
### 5.3 Correlation Tools
|
||||||
|
|
||||||
|
| Tool | Input | Output |
|
||||||
|
| -------------------- | ----------------- | ---------------------------- |
|
||||||
|
| `correlateWorkflows` | typeA, typeB, key | Cross-process relationships |
|
||||||
|
| `calculateMetrics` | types[], period | KPIs spanning multiple types |
|
||||||
|
|
||||||
|
### 5.4 Session Tools
|
||||||
|
|
||||||
|
| Tool | Input | Output |
|
||||||
|
| ------------------- | ----------------- | ----------------------------- |
|
||||||
|
| `storeAnalysis` | category, content | Persist intermediate findings |
|
||||||
|
| `getStoredAnalyses` | — | Retrieve for final synthesis |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Expected Benefits
|
||||||
|
|
||||||
|
1. **Unlimited Scale:** No context window constraints; 10K or 100K instances handled identically
|
||||||
|
|
||||||
|
2. **Ad-Hoc Flexibility:** New question types require no new code — LLM discovers relevant workflows
|
||||||
|
|
||||||
|
3. **Cross-Process Intelligence:** Automatic correlation (e.g., complaints ↔ orders) reveals hidden patterns
|
||||||
|
|
||||||
|
4. **Controlled Execution:** Unlike open REPL, tool interface ensures security and auditability
|
||||||
|
|
||||||
|
5. **Incremental Enhancement:** New workflow types automatically become queryable
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Open Questions
|
||||||
|
|
||||||
|
- **Chunking Strategy:** Fixed size vs. semantic boundaries vs. LLM-determined?
|
||||||
|
- **Caching:** How to cache intermediate analyses across similar queries?
|
||||||
|
- **Confidence:** How does the LLM signal when data is insufficient?
|
||||||
|
- **Cost Control:** Maximum tool calls per query? Budget-aware orchestration?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Next Steps
|
||||||
|
|
||||||
|
1. Define minimal viable tool interface (Discovery + Retrieval)
|
||||||
|
2. Prototype with single workflow type
|
||||||
|
3. Evaluate chunking strategies empirically
|
||||||
|
4. Add correlation tools
|
||||||
|
5. Benchmark against direct-context baseline
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
- Zhang, A.L., Kraska, T., Khattab, O. (2025). _Recursive Language Models._ arXiv:2512.24601
|
||||||
|
- OpenAI (2024). _Function Calling Documentation._
|
||||||
|
- OMG (2013). _Business Process Model and Notation (BPMN) Version 2.0.2_
|
||||||
BIN
doc/RLM.pdf
Normal file
BIN
doc/RLM.pdf
Normal file
Binary file not shown.
1622
doc/example-invoice.bpmn
Normal file
1622
doc/example-invoice.bpmn
Normal file
File diff suppressed because it is too large
Load diff
BIN
doc/modelling-assistant.png
Normal file
BIN
doc/modelling-assistant.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
330
doc/modelling-assistent.bpmn
Normal file
330
doc/modelling-assistent.bpmn
Normal file
|
|
@ -0,0 +1,330 @@
|
||||||
|
<?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:collaboration id="collaboration_1" name="Default Collaboration">
|
||||||
|
<bpmn2:participant id="participant_x0L42g" name="Default Process" processRef="process_1"/>
|
||||||
|
<bpmn2:participant id="participant_tRnOVw" name="Quotation" processRef="process_sMc7Dg">
|
||||||
|
<bpmn2:documentation id="documentation_vx4Wdw"/>
|
||||||
|
</bpmn2:participant>
|
||||||
|
</bpmn2:collaboration>
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<open-bpmn:auto-align>true</open-bpmn:auto-align>
|
||||||
|
<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 definitionalCollaborationRef="collaboration_1" id="process_1" name="Default Process" processType="Public">
|
||||||
|
<bpmn2:documentation id="documentation_yIE0cQ"/>
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<open-bpmn:auto-align>true</open-bpmn:auto-align>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
</bpmn2:process>
|
||||||
|
<bpmn2:process definitionalCollaborationRef="collaboration_1" id="process_sMc7Dg" isExecutable="true" name="Quotation" processType="Private">
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_niedQQ" imixs:activityid="10" name="✅ Forward">
|
||||||
|
<bpmn2:documentation id="documentation_MBhkPQ"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_PTYelQ</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_0r2GvA</bpmn2:outgoing>
|
||||||
|
<bpmn2:signalEventDefinition id="signalEventDefinition_INWMRA" signalRef="signal_1"/>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:task id="task_L133Xw" imixs:processid="200" name="📄 Invoice Processing">
|
||||||
|
<bpmn2:extensionElements/>
|
||||||
|
<bpmn2:documentation id="documentation_ramFEg"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_xzsTOg</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_PTYelQ</bpmn2:outgoing>
|
||||||
|
<bpmn2:incoming>sequenceFlow_j8lGIw</bpmn2:incoming>
|
||||||
|
</bpmn2:task>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_xzsTOg" sourceRef="event_rj5hpg" targetRef="task_L133Xw">
|
||||||
|
<bpmn2:documentation id="documentation_3oNU0w"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_coOKbw" imixs:activityid="10" name="⚠️ Reject">
|
||||||
|
<bpmn2:documentation id="documentation_vejT4Q"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_s35NUA</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_j8lGIw</bpmn2:outgoing>
|
||||||
|
<bpmn2:signalEventDefinition id="signalEventDefinition_cZ2P5Q" signalRef="signal_1"/>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_j8lGIw" sourceRef="event_coOKbw" targetRef="task_L133Xw">
|
||||||
|
<bpmn2:documentation id="documentation_z2uUIQ"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:startEvent id="event_rj5hpg" name="Start">
|
||||||
|
<bpmn2:documentation id="documentation_iaOvqQ"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_xzsTOg</bpmn2:outgoing>
|
||||||
|
</bpmn2:startEvent>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_R70aTA" imixs:activityid="10" name="✅ Approve">
|
||||||
|
<bpmn2:documentation id="documentation_M4lPVQ"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_jwRFLw</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_ZhddoA</bpmn2:outgoing>
|
||||||
|
<bpmn2:signalEventDefinition id="signalEventDefinition_s6Zhow" signalRef="signal_1"/>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_0r2GvA" sourceRef="event_niedQQ" targetRef="task_mvhk6A">
|
||||||
|
<bpmn2:documentation id="documentation_Vf0FuQ"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:task id="task_mvhk6A" imixs:processid="200" name="Lgistic Management">
|
||||||
|
<bpmn2:extensionElements/>
|
||||||
|
<bpmn2:documentation id="documentation_XTOdWQ"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_0r2GvA</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_z0gXYg</bpmn2:outgoing>
|
||||||
|
</bpmn2:task>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_PTYelQ" sourceRef="task_L133Xw" targetRef="event_niedQQ">
|
||||||
|
<bpmn2:documentation id="documentation_62U4FQ"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:dataObject id="dataObject_i5GQcg" imixs:datatype="prompt-data" name="AI Assistant">
|
||||||
|
<bpmn2:documentation id="documentation_oDWhGg"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<PromptDefinition>
|
||||||
|
<prompt_options>{"n_predict": 4096, "temperature": 0}</prompt_options>
|
||||||
|
<prompt><![CDATA[[INST] Du bist Sachbearbeiter in einem Unternehmen. Deine Aufgabe ist es, eingehende Vertragsdokumente zu prüfen. [/INST]
|
||||||
|
|
||||||
|
<FILECONTEXT>^.+\.([pP][dD][fF])$</FILECONTEXT>
|
||||||
|
|
||||||
|
</s>[INST]
|
||||||
|
|
||||||
|
Erstelle eine kurze Zusammenfassung der wichtigsten Elemente dieses Vertrags.
|
||||||
|
|
||||||
|
- Vertragsgeber
|
||||||
|
- Vertragsnehmer
|
||||||
|
- Gegenstand
|
||||||
|
- Laufzeit
|
||||||
|
|
||||||
|
[/INST]
|
||||||
|
]]]]><![CDATA[>
|
||||||
|
</prompt>
|
||||||
|
</PromptDefinition> ]]></bpmn2:documentation>
|
||||||
|
</bpmn2:dataObject>
|
||||||
|
<bpmn2:association id="association_8agn0w" sourceRef="dataObject_i5GQcg" targetRef="event_niedQQ">
|
||||||
|
<bpmn2:documentation id="documentation_3tbkFA"/>
|
||||||
|
</bpmn2:association>
|
||||||
|
<bpmn2:eventBasedGateway gatewayDirection="Diverging" id="gateway_GNo9TQ" name="">
|
||||||
|
<bpmn2:documentation id="documentation_pjAA7Q"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_z0gXYg</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_jwRFLw</bpmn2:outgoing>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_s35NUA</bpmn2:outgoing>
|
||||||
|
</bpmn2:eventBasedGateway>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_z0gXYg" sourceRef="task_mvhk6A" targetRef="gateway_GNo9TQ">
|
||||||
|
<bpmn2:documentation id="documentation_SAsZCQ"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_jwRFLw" sourceRef="gateway_GNo9TQ" targetRef="event_R70aTA">
|
||||||
|
<bpmn2:documentation id="documentation_R0sbAg"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_s35NUA" sourceRef="gateway_GNo9TQ" targetRef="event_coOKbw">
|
||||||
|
<bpmn2:documentation id="documentation_whLZzA"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:dataObject id="dataObject_0p0xLA" imixs:datatype="prompt-data" name="AI Assistant">
|
||||||
|
<bpmn2:documentation id="documentation_pJTLKg"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<PromptDefinition>
|
||||||
|
<prompt_options>{"n_predict": 4096, "temperature": 0}</prompt_options>
|
||||||
|
<prompt><![CDATA[[INST] Du bist Sachbearbeiter in einem Unternehmen. Deine Aufgabe ist es, eingehende Vertragsdokumente zu prüfen. [/INST]
|
||||||
|
|
||||||
|
<FILECONTEXT>^.+\.([pP][dD][fF])$</FILECONTEXT>
|
||||||
|
|
||||||
|
</s>[INST]
|
||||||
|
|
||||||
|
Erstelle eine kurze Zusammenfassung der wichtigsten Elemente dieses Vertrags.
|
||||||
|
|
||||||
|
- Vertragsgeber
|
||||||
|
- Vertragsnehmer
|
||||||
|
- Gegenstand
|
||||||
|
- Laufzeit
|
||||||
|
|
||||||
|
[/INST]
|
||||||
|
]]]]><![CDATA[>
|
||||||
|
</prompt>
|
||||||
|
</PromptDefinition> ]]></bpmn2:documentation>
|
||||||
|
</bpmn2:dataObject>
|
||||||
|
<bpmn2:association id="association_UmEKyQ" sourceRef="dataObject_0p0xLA" targetRef="task_mvhk6A">
|
||||||
|
<bpmn2:documentation id="documentation_PPNyxw"/>
|
||||||
|
</bpmn2:association>
|
||||||
|
<bpmn2:task id="task_ePmtuA" imixs:processid="200" name="Accounting">
|
||||||
|
<bpmn2:extensionElements/>
|
||||||
|
<bpmn2:documentation id="documentation_Ogtcwg"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_ZhddoA</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_5usAlw</bpmn2:outgoing>
|
||||||
|
</bpmn2:task>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_ZhddoA" sourceRef="event_R70aTA" targetRef="task_ePmtuA">
|
||||||
|
<bpmn2:documentation id="documentation_A1ZxQA"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:dataObject id="dataObject_rz4o5g" imixs:datatype="prompt-data" name="AI Assistant">
|
||||||
|
<bpmn2:documentation id="documentation_PysJOw"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<PromptDefinition>
|
||||||
|
<prompt_options>{"n_predict": 4096, "temperature": 0}</prompt_options>
|
||||||
|
<prompt><![CDATA[[INST] Du bist Sachbearbeiter in einem Unternehmen. Deine Aufgabe ist es, eingehende Vertragsdokumente zu prüfen. [/INST]
|
||||||
|
|
||||||
|
<FILECONTEXT>^.+\.([pP][dD][fF])$</FILECONTEXT>
|
||||||
|
|
||||||
|
</s>[INST]
|
||||||
|
|
||||||
|
Erstelle eine kurze Zusammenfassung der wichtigsten Elemente dieses Vertrags.
|
||||||
|
|
||||||
|
- Vertragsgeber
|
||||||
|
- Vertragsnehmer
|
||||||
|
- Gegenstand
|
||||||
|
- Laufzeit
|
||||||
|
|
||||||
|
[/INST]
|
||||||
|
]]]]><![CDATA[>
|
||||||
|
</prompt>
|
||||||
|
</PromptDefinition> ]]></bpmn2:documentation>
|
||||||
|
</bpmn2:dataObject>
|
||||||
|
<bpmn2:association id="association_6UQoWw" sourceRef="dataObject_rz4o5g" targetRef="event_R70aTA">
|
||||||
|
<bpmn2:documentation id="documentation_LhbHZQ"/>
|
||||||
|
</bpmn2:association>
|
||||||
|
<bpmn2:endEvent id="event_2DjBUw" name="End">
|
||||||
|
<bpmn2:documentation id="documentation_ah3zYQ"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_5usAlw</bpmn2:incoming>
|
||||||
|
</bpmn2:endEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_5usAlw" sourceRef="task_ePmtuA" targetRef="event_2DjBUw">
|
||||||
|
<bpmn2:documentation id="documentation_84XlDw"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
</bpmn2:process>
|
||||||
|
<bpmn2:message id="message_1" name="Message 1">
|
||||||
|
<bpmn2:documentation id="documentation_KTfSFQ"/>
|
||||||
|
</bpmn2:message>
|
||||||
|
<bpmn2:signal id="signal_1" name="Signal 1"/>
|
||||||
|
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="OpenBPMN Diagram">
|
||||||
|
<bpmndi:BPMNPlane bpmnElement="collaboration_1" id="BPMNPlane_1">
|
||||||
|
<bpmndi:BPMNShape bpmnElement="participant_tRnOVw" id="BPMNShape_j8YiYQ">
|
||||||
|
<dc:Bounds height="760.0" width="2500.0" x="90.0" y="130.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="participant_x0L42g" id="BPMNShape_D38FhA">
|
||||||
|
<dc:Bounds height="210.0" width="800.0" x="0.0" y="0.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="message_1" id="BPMNShape_6VlRkw">
|
||||||
|
<dc:Bounds height="20.0" width="30.0" x="130.0" y="30.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_FxvxBA">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="95.0" y="55.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_niedQQ" id="BPMNShape_TjS4HQ">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="527.0" y="427.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_KXscdQ">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="495.0" y="466.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_coOKbw" id="BPMNShape_xl46Xg">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="827.0" y="527.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_C7HeYQ">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="795.0" y="566.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_rj5hpg" id="BPMNShape_l3trNA">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="247.0" y="427.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_EeFhIA">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="215.0" y="466.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="task_L133Xw" id="BPMNShape_YZRbHw">
|
||||||
|
<dc:Bounds height="50.0" width="110.0" x="350.0" y="420.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_R70aTA" id="BPMNShape_sjgweA">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="947.0" y="427.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_aNkYbg">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="915.0" y="466.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="task_mvhk6A" id="BPMNShape_eyv6UQ">
|
||||||
|
<dc:Bounds height="50.0" width="110.0" x="650.0" y="420.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="dataObject_i5GQcg" id="BPMNShape_TbkkdA">
|
||||||
|
<dc:Bounds height="50.0" width="35.0" x="490.0" y="310.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_dxGjeg">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="457.5" y="365.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="gateway_GNo9TQ" id="BPMNShape_5NF05w">
|
||||||
|
<dc:Bounds height="50.0" width="50.0" x="820.0" y="420.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_30pZig">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="795.0" y="473.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="dataObject_0p0xLA" id="BPMNShape_hC5WBA">
|
||||||
|
<dc:Bounds height="50.0" width="35.0" x="660.0" y="310.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_WmHogw">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="627.5" y="365.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="task_ePmtuA" id="BPMNShape_yXf0gA">
|
||||||
|
<dc:Bounds height="50.0" width="110.0" x="1070.0" y="420.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="dataObject_rz4o5g" id="BPMNShape_ydVK4Q">
|
||||||
|
<dc:Bounds height="50.0" width="35.0" x="920.0" y="310.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_gdz2iQ">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="887.5" y="365.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_2DjBUw" id="BPMNShape_z8kD5A">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="1277.0" y="427.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_aJSA9w">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="1245.0" y="466.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_xzsTOg" id="BPMNEdge_ToVbEg" sourceElement="BPMNShape_l3trNA" targetElement="BPMNShape_YZRbHw">
|
||||||
|
<di:waypoint x="283.0" y="445.0"/>
|
||||||
|
<di:waypoint x="350.0" y="445.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_j8lGIw" id="BPMNEdge_j9b58A" sourceElement="BPMNShape_xl46Xg" targetElement="BPMNShape_YZRbHw">
|
||||||
|
<di:waypoint x="827.0" y="545.0"/>
|
||||||
|
<di:waypoint x="405.0" y="545.0"/>
|
||||||
|
<di:waypoint x="405.0" y="470.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_0r2GvA" id="BPMNEdge_n0l9lg" sourceElement="BPMNShape_TjS4HQ" targetElement="BPMNShape_eyv6UQ">
|
||||||
|
<di:waypoint x="563.0" y="445.0"/>
|
||||||
|
<di:waypoint x="650.0" y="445.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_PTYelQ" id="BPMNEdge_PbHhIg" sourceElement="BPMNShape_YZRbHw" targetElement="BPMNShape_TjS4HQ">
|
||||||
|
<di:waypoint x="460.0" y="445.0"/>
|
||||||
|
<di:waypoint x="527.0" y="445.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="association_8agn0w" id="BPMNEdge_Q0162w" sourceElement="BPMNShape_TbkkdA" targetElement="BPMNShape_TjS4HQ">
|
||||||
|
<di:waypoint x="505.0" y="360.0"/>
|
||||||
|
<di:waypoint x="505.0" y="394.0"/>
|
||||||
|
<di:waypoint x="545.0" y="394.0"/>
|
||||||
|
<di:waypoint x="545.0" y="427.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_z0gXYg" id="BPMNEdge_03Y83Q" sourceElement="BPMNShape_eyv6UQ" targetElement="BPMNShape_5NF05w">
|
||||||
|
<di:waypoint x="760.0" y="445.0"/>
|
||||||
|
<di:waypoint x="820.0" y="445.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_jwRFLw" id="BPMNEdge_5ePfxw" sourceElement="BPMNShape_5NF05w" targetElement="BPMNShape_sjgweA">
|
||||||
|
<di:waypoint x="870.0" y="445.0"/>
|
||||||
|
<di:waypoint x="947.0" y="445.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_s35NUA" id="BPMNEdge_bh195w" sourceElement="BPMNShape_5NF05w" targetElement="BPMNShape_xl46Xg">
|
||||||
|
<di:waypoint x="845.0" y="470.0"/>
|
||||||
|
<di:waypoint x="845.0" y="527.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="association_UmEKyQ" id="BPMNEdge_qJoteg" sourceElement="BPMNShape_hC5WBA" targetElement="BPMNShape_eyv6UQ">
|
||||||
|
<di:waypoint x="674.0" y="360.0"/>
|
||||||
|
<di:waypoint x="674.0" y="390.0"/>
|
||||||
|
<di:waypoint x="705.0" y="390.0"/>
|
||||||
|
<di:waypoint x="705.0" y="420.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_ZhddoA" id="BPMNEdge_G0aexA" sourceElement="BPMNShape_sjgweA" targetElement="BPMNShape_yXf0gA">
|
||||||
|
<di:waypoint x="983.0" y="445.0"/>
|
||||||
|
<di:waypoint x="1070.0" y="445.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="association_6UQoWw" id="BPMNEdge_3xlY7Q" sourceElement="BPMNShape_ydVK4Q" targetElement="BPMNShape_sjgweA">
|
||||||
|
<di:waypoint x="933.0" y="360.0"/>
|
||||||
|
<di:waypoint x="933.0" y="394.0"/>
|
||||||
|
<di:waypoint x="965.0" y="394.0"/>
|
||||||
|
<di:waypoint x="965.0" y="427.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_5usAlw" id="BPMNEdge_kkZGMg" sourceElement="BPMNShape_yXf0gA" targetElement="BPMNShape_z8kD5A">
|
||||||
|
<di:waypoint x="1180.0" y="445.0"/>
|
||||||
|
<di:waypoint x="1277.0" y="445.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
</bpmndi:BPMNPlane>
|
||||||
|
</bpmndi:BPMNDiagram>
|
||||||
|
</bpmn2:definitions>
|
||||||
BIN
doc/modelling-categorize.png
Normal file
BIN
doc/modelling-categorize.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 52 KiB |
|
|
@ -31,7 +31,7 @@
|
||||||
<bpmn2:process definitionalCollaborationRef="collaboration_1" id="process_1" name="Default Process" processType="Public">
|
<bpmn2:process definitionalCollaborationRef="collaboration_1" id="process_1" name="Default Process" processType="Public">
|
||||||
<bpmn2:documentation id="documentation_yIE0cQ"/>
|
<bpmn2:documentation id="documentation_yIE0cQ"/>
|
||||||
<bpmn2:extensionElements>
|
<bpmn2:extensionElements>
|
||||||
<open-bpmn:auto-align/>
|
<open-bpmn:auto-align>true</open-bpmn:auto-align>
|
||||||
</bpmn2:extensionElements>
|
</bpmn2:extensionElements>
|
||||||
</bpmn2:process>
|
</bpmn2:process>
|
||||||
<bpmn2:process definitionalCollaborationRef="collaboration_1" id="process_sMc7Dg" isExecutable="true" name="Quotation" processType="Private">
|
<bpmn2:process definitionalCollaborationRef="collaboration_1" id="process_sMc7Dg" isExecutable="true" name="Quotation" processType="Private">
|
||||||
|
|
@ -39,7 +39,7 @@
|
||||||
<bpmn2:documentation id="documentation_FnoiYQ"/>
|
<bpmn2:documentation id="documentation_FnoiYQ"/>
|
||||||
<bpmn2:outgoing>sequenceFlow_G5Kd1Q</bpmn2:outgoing>
|
<bpmn2:outgoing>sequenceFlow_G5Kd1Q</bpmn2:outgoing>
|
||||||
</bpmn2:startEvent>
|
</bpmn2:startEvent>
|
||||||
<bpmn2:task id="task_tXh3Mg" imixs:processid="100" name="Submit Data Document">
|
<bpmn2:task id="task_tXh3Mg" imixs:processid="100" name="Document Import">
|
||||||
<bpmn2:documentation id="documentation_grs3zw"/>
|
<bpmn2:documentation id="documentation_grs3zw"/>
|
||||||
<bpmn2:incoming>sequenceFlow_G5Kd1Q</bpmn2:incoming>
|
<bpmn2:incoming>sequenceFlow_G5Kd1Q</bpmn2:incoming>
|
||||||
<bpmn2:outgoing>sequenceFlow_t18xVA</bpmn2:outgoing>
|
<bpmn2:outgoing>sequenceFlow_t18xVA</bpmn2:outgoing>
|
||||||
|
|
@ -47,29 +47,16 @@
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_G5Kd1Q" sourceRef="event_B7i9Iw" targetRef="task_tXh3Mg">
|
<bpmn2:sequenceFlow id="sequenceFlow_G5Kd1Q" sourceRef="event_B7i9Iw" targetRef="task_tXh3Mg">
|
||||||
<bpmn2:documentation id="documentation_DezAuA"/>
|
<bpmn2:documentation id="documentation_DezAuA"/>
|
||||||
</bpmn2:sequenceFlow>
|
</bpmn2:sequenceFlow>
|
||||||
<bpmn2:task id="task_drhWQg" imixs:processid="200" name="📄 Send Directly ">
|
<bpmn2:task id="task_drhWQg" imixs:processid="200" name="📄 Contract Processing">
|
||||||
<bpmn2:extensionElements/>
|
<bpmn2:extensionElements/>
|
||||||
<bpmn2:documentation id="documentation_smS8pw"/>
|
<bpmn2:documentation id="documentation_smS8pw"/>
|
||||||
<bpmn2:incoming>sequenceFlow_CZSH1g</bpmn2:incoming>
|
<bpmn2:incoming>sequenceFlow_CZSH1g</bpmn2:incoming>
|
||||||
<bpmn2:outgoing>sequenceFlow_XjZMoA</bpmn2:outgoing>
|
<bpmn2:outgoing>sequenceFlow_G06SFg</bpmn2:outgoing>
|
||||||
</bpmn2:task>
|
</bpmn2:task>
|
||||||
<bpmn2:intermediateCatchEvent id="event_urvfmQ" imixs:activityid="10" name="📄 Send Quotation">
|
|
||||||
<bpmn2:documentation id="documentation_FwKHzw"/>
|
|
||||||
<bpmn2:messageEventDefinition id="messageEventDefinition_NEsURQ" messageRef="message_1"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_duF1Hg</bpmn2:incoming>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_S4jwCQ</bpmn2:outgoing>
|
|
||||||
</bpmn2:intermediateCatchEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_duF1Hg" sourceRef="gateway_0pxlXg" targetRef="event_urvfmQ">
|
|
||||||
<bpmn2:documentation id="documentation_0QKeNA"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:endEvent id="event_lKuUKA" name="End">
|
|
||||||
<bpmn2:documentation id="documentation_nPmhng"/>
|
|
||||||
<bpmn2:incoming>sequenceFlow_S4jwCQ</bpmn2:incoming>
|
|
||||||
</bpmn2:endEvent>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_t18xVA" sourceRef="task_tXh3Mg" targetRef="event_niedQQ">
|
<bpmn2:sequenceFlow id="sequenceFlow_t18xVA" sourceRef="task_tXh3Mg" targetRef="event_niedQQ">
|
||||||
<bpmn2:documentation id="documentation_sIOMsA"/>
|
<bpmn2:documentation id="documentation_sIOMsA"/>
|
||||||
</bpmn2:sequenceFlow>
|
</bpmn2:sequenceFlow>
|
||||||
<bpmn2:intermediateCatchEvent id="event_niedQQ" imixs:activityid="10" name="✅ Shipping & Logistics">
|
<bpmn2:intermediateCatchEvent id="event_niedQQ" imixs:activityid="10" name="✅ Categorize">
|
||||||
<bpmn2:documentation id="documentation_MBhkPQ"/>
|
<bpmn2:documentation id="documentation_MBhkPQ"/>
|
||||||
<bpmn2:signalEventDefinition id="signalEventDefinition_INWMRA" signalRef="signal_1"/>
|
<bpmn2:signalEventDefinition id="signalEventDefinition_INWMRA" signalRef="signal_1"/>
|
||||||
<bpmn2:incoming>sequenceFlow_t18xVA</bpmn2:incoming>
|
<bpmn2:incoming>sequenceFlow_t18xVA</bpmn2:incoming>
|
||||||
|
|
@ -98,10 +85,14 @@ Erstelle eine kurze Zusammenfassung der wichtigsten Elemente dieses Vertrags.
|
||||||
</PromptDefinition> ]]></bpmn2:documentation>
|
</PromptDefinition> ]]></bpmn2:documentation>
|
||||||
</bpmn2:dataObject>
|
</bpmn2:dataObject>
|
||||||
<bpmn2:textAnnotation id="textAnnotation_0at23Q" textFormat="">
|
<bpmn2:textAnnotation id="textAnnotation_0at23Q" textFormat="">
|
||||||
<bpmn2:text id="text_wUjgfQ"><![CDATA[☑️ Check Process Flow
|
<bpmn2:text id="text_wUjgfQ"><![CDATA[☑️ Analyze the following document and classify it according to these dimensions:
|
||||||
- {Export in Non EU country}
|
|
||||||
- {Contains electronic devices}
|
- Type: [Invoice | Contract | Inquiry | ...]
|
||||||
- {Review legal regulations}
|
- Customer: [Extract customer name]
|
||||||
|
- Language: [ISO 639-1 code]
|
||||||
|
- Priority: value
|
||||||
|
|
||||||
|
Respond in XML format.
|
||||||
]]></bpmn2:text>
|
]]></bpmn2:text>
|
||||||
<bpmn2:documentation id="documentation_IG9UoA"/>
|
<bpmn2:documentation id="documentation_IG9UoA"/>
|
||||||
</bpmn2:textAnnotation>
|
</bpmn2:textAnnotation>
|
||||||
|
|
@ -111,9 +102,6 @@ Erstelle eine kurze Zusammenfassung der wichtigsten Elemente dieses Vertrags.
|
||||||
<bpmn2:association id="association_dpwf6A" sourceRef="dataObject_6cOkKQ" targetRef="event_niedQQ">
|
<bpmn2:association id="association_dpwf6A" sourceRef="dataObject_6cOkKQ" targetRef="event_niedQQ">
|
||||||
<bpmn2:documentation id="documentation_8CvVvA"/>
|
<bpmn2:documentation id="documentation_8CvVvA"/>
|
||||||
</bpmn2:association>
|
</bpmn2:association>
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_S4jwCQ" sourceRef="event_urvfmQ" targetRef="event_lKuUKA">
|
|
||||||
<bpmn2:documentation id="documentation_BM9PSA"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:exclusiveGateway default="sequenceFlow_CZSH1g" gatewayDirection="Diverging" id="gateway_x0C90A" name="">
|
<bpmn2:exclusiveGateway default="sequenceFlow_CZSH1g" gatewayDirection="Diverging" id="gateway_x0C90A" name="">
|
||||||
<bpmn2:documentation id="documentation_uWx06w"/>
|
<bpmn2:documentation id="documentation_uWx06w"/>
|
||||||
<bpmn2:incoming>sequenceFlow_1juEYg</bpmn2:incoming>
|
<bpmn2:incoming>sequenceFlow_1juEYg</bpmn2:incoming>
|
||||||
|
|
@ -124,7 +112,7 @@ Erstelle eine kurze Zusammenfassung der wichtigsten Elemente dieses Vertrags.
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_1juEYg" sourceRef="event_niedQQ" targetRef="gateway_x0C90A">
|
<bpmn2:sequenceFlow id="sequenceFlow_1juEYg" sourceRef="event_niedQQ" targetRef="gateway_x0C90A">
|
||||||
<bpmn2:documentation id="documentation_YRNwEQ"/>
|
<bpmn2:documentation id="documentation_YRNwEQ"/>
|
||||||
</bpmn2:sequenceFlow>
|
</bpmn2:sequenceFlow>
|
||||||
<bpmn2:task id="task_L133Xw" imixs:processid="200" name="👨🏾Management Approval">
|
<bpmn2:task id="task_L133Xw" imixs:processid="200" name="📄 Invoice Processing">
|
||||||
<bpmn2:extensionElements/>
|
<bpmn2:extensionElements/>
|
||||||
<bpmn2:documentation id="documentation_ramFEg"/>
|
<bpmn2:documentation id="documentation_ramFEg"/>
|
||||||
<bpmn2:incoming>sequenceFlow_gfW00Q</bpmn2:incoming>
|
<bpmn2:incoming>sequenceFlow_gfW00Q</bpmn2:incoming>
|
||||||
|
|
@ -134,8 +122,7 @@ Erstelle eine kurze Zusammenfassung der wichtigsten Elemente dieses Vertrags.
|
||||||
<bpmn2:documentation id="documentation_0r0IqA"/>
|
<bpmn2:documentation id="documentation_0r0IqA"/>
|
||||||
</bpmn2:sequenceFlow>
|
</bpmn2:sequenceFlow>
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_gfW00Q" sourceRef="gateway_x0C90A" targetRef="task_L133Xw">
|
<bpmn2:sequenceFlow id="sequenceFlow_gfW00Q" sourceRef="gateway_x0C90A" targetRef="task_L133Xw">
|
||||||
<bpmn2:documentation id="documentation_JL0fbw"><![CDATA[
|
<bpmn2:documentation id="documentation_JL0fbw"/>
|
||||||
]]></bpmn2:documentation>
|
|
||||||
<bpmn2:conditionExpression id="formalExpression_1XAfeA" xsi:type="bpmn2:tFormalExpression"><![CDATA[Check Process Data:
|
<bpmn2:conditionExpression id="formalExpression_1XAfeA" xsi:type="bpmn2:tFormalExpression"><![CDATA[Check Process Data:
|
||||||
|
|
||||||
Überprüfe ob der Auftrag in ein Nicht EU Land geht.
|
Überprüfe ob der Auftrag in ein Nicht EU Land geht.
|
||||||
|
|
@ -147,32 +134,39 @@ Context:
|
||||||
- {Contains electronic devices}
|
- {Contains electronic devices}
|
||||||
- {Review legal regulations}]]></bpmn2:conditionExpression>
|
- {Review legal regulations}]]></bpmn2:conditionExpression>
|
||||||
</bpmn2:sequenceFlow>
|
</bpmn2:sequenceFlow>
|
||||||
<bpmn2:task id="task_Djd00A" imixs:processid="200" name="👱🏼♂️ Customs Processing">
|
<bpmn2:task id="task_Djd00A" imixs:processid="200" name="📄 Inquiry Processing">
|
||||||
<bpmn2:extensionElements/>
|
<bpmn2:extensionElements/>
|
||||||
<bpmn2:documentation id="documentation_gPxcUA"/>
|
<bpmn2:documentation id="documentation_gPxcUA"/>
|
||||||
<bpmn2:incoming>sequenceFlow_DiAQ5w</bpmn2:incoming>
|
<bpmn2:incoming>sequenceFlow_DiAQ5w</bpmn2:incoming>
|
||||||
<bpmn2:outgoing>sequenceFlow_QqJL2w</bpmn2:outgoing>
|
<bpmn2:outgoing>sequenceFlow_rub38g</bpmn2:outgoing>
|
||||||
</bpmn2:task>
|
</bpmn2:task>
|
||||||
<bpmn2:exclusiveGateway gatewayDirection="Diverging" id="gateway_0pxlXg" name="">
|
<bpmn2:sequenceFlow id="sequenceFlow_GAe7Gg" sourceRef="task_L133Xw" targetRef="event_5pszBQ">
|
||||||
<bpmn2:documentation id="documentation_AqMKgA"/>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_gfW00Q</bpmn2:outgoing>
|
|
||||||
<bpmn2:outgoing>sequenceFlow_duF1Hg</bpmn2:outgoing>
|
|
||||||
<bpmn2:incoming>sequenceFlow_GAe7Gg</bpmn2:incoming>
|
|
||||||
<bpmn2:incoming>sequenceFlow_XjZMoA</bpmn2:incoming>
|
|
||||||
<bpmn2:incoming>sequenceFlow_QqJL2w</bpmn2:incoming>
|
|
||||||
</bpmn2:exclusiveGateway>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_GAe7Gg" sourceRef="task_L133Xw" targetRef="gateway_0pxlXg">
|
|
||||||
<bpmn2:documentation id="documentation_tneb3w"/>
|
<bpmn2:documentation id="documentation_tneb3w"/>
|
||||||
</bpmn2:sequenceFlow>
|
</bpmn2:sequenceFlow>
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_XjZMoA" sourceRef="task_drhWQg" targetRef="gateway_0pxlXg">
|
|
||||||
<bpmn2:documentation id="documentation_3VJmaA"/>
|
|
||||||
</bpmn2:sequenceFlow>
|
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_DiAQ5w" sourceRef="gateway_x0C90A" targetRef="task_Djd00A">
|
<bpmn2:sequenceFlow id="sequenceFlow_DiAQ5w" sourceRef="gateway_x0C90A" targetRef="task_Djd00A">
|
||||||
<bpmn2:documentation id="documentation_LpTW8A"/>
|
<bpmn2:documentation id="documentation_LpTW8A"/>
|
||||||
<bpmn2:conditionExpression id="formalExpression_Xhjr8w" xsi:type="bpmn2:tFormalExpression"><![CDATA[workitem.getItemValueDouble('budget')>1000;]]></bpmn2:conditionExpression>
|
<bpmn2:conditionExpression id="formalExpression_Xhjr8w" xsi:type="bpmn2:tFormalExpression"><![CDATA[workitem.getItemValueDouble('budget')>1000;]]></bpmn2:conditionExpression>
|
||||||
</bpmn2:sequenceFlow>
|
</bpmn2:sequenceFlow>
|
||||||
<bpmn2:sequenceFlow id="sequenceFlow_QqJL2w" sourceRef="task_Djd00A" targetRef="gateway_0pxlXg">
|
<bpmn2:intermediateThrowEvent id="event_5pszBQ" name="♻ Start Workflow">
|
||||||
<bpmn2:documentation id="documentation_PMXDdw"/>
|
<bpmn2:documentation id="documentation_AaXe9w"/>
|
||||||
|
<bpmn2:linkEventDefinition id="linkEventDefinition_v0KICg"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_GAe7Gg</bpmn2:incoming>
|
||||||
|
</bpmn2:intermediateThrowEvent>
|
||||||
|
<bpmn2:intermediateThrowEvent id="event_JSkOeA" name="♻ Start Workflow">
|
||||||
|
<bpmn2:documentation id="documentation_uvMhtw"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_G06SFg</bpmn2:incoming>
|
||||||
|
<bpmn2:linkEventDefinition id="linkEventDefinition_7wM0WQ"/>
|
||||||
|
</bpmn2:intermediateThrowEvent>
|
||||||
|
<bpmn2:intermediateThrowEvent id="event_Beyk0g" name="♻ Start Workflow">
|
||||||
|
<bpmn2:documentation id="documentation_yqWWkw"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_rub38g</bpmn2:incoming>
|
||||||
|
<bpmn2:linkEventDefinition id="linkEventDefinition_L00Cnw"/>
|
||||||
|
</bpmn2:intermediateThrowEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_rub38g" sourceRef="task_Djd00A" targetRef="event_Beyk0g">
|
||||||
|
<bpmn2:documentation id="documentation_31t5QA"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_G06SFg" sourceRef="task_drhWQg" targetRef="event_JSkOeA">
|
||||||
|
<bpmn2:documentation id="documentation_YDFeGQ"/>
|
||||||
</bpmn2:sequenceFlow>
|
</bpmn2:sequenceFlow>
|
||||||
</bpmn2:process>
|
</bpmn2:process>
|
||||||
<bpmn2:message id="message_1" name="Message 1">
|
<bpmn2:message id="message_1" name="Message 1">
|
||||||
|
|
@ -196,6 +190,24 @@ Context:
|
||||||
<bpmndi:BPMNShape bpmnElement="participant_x0L42g" id="BPMNShape_D38FhA">
|
<bpmndi:BPMNShape bpmnElement="participant_x0L42g" id="BPMNShape_D38FhA">
|
||||||
<dc:Bounds height="210.0" width="800.0" x="0.0" y="0.0"/>
|
<dc:Bounds height="210.0" width="800.0" x="0.0" y="0.0"/>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_5pszBQ" id="BPMNShape_eCqWQw">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="927.0" y="337.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_0AKR2g">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="895.0" y="376.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_JSkOeA" id="BPMNShape_BsDkYQ">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="927.0" y="457.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_pYUJ0Q">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="895.0" y="496.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_Beyk0g" id="BPMNShape_BZoF3Q">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="927.0" y="577.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_DXhFyA">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="895.0" y="616.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_G5Kd1Q" id="BPMNEdge_Z24kGg" sourceElement="BPMNShape_hXLmag" targetElement="BPMNShape_eyKNaw">
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_G5Kd1Q" id="BPMNEdge_Z24kGg" sourceElement="BPMNShape_hXLmag" targetElement="BPMNShape_eyKNaw">
|
||||||
<di:waypoint x="223.0" y="475.0"/>
|
<di:waypoint x="223.0" y="475.0"/>
|
||||||
<di:waypoint x="270.0" y="475.0"/>
|
<di:waypoint x="270.0" y="475.0"/>
|
||||||
|
|
@ -203,28 +215,12 @@ Context:
|
||||||
<bpmndi:BPMNShape bpmnElement="task_drhWQg" id="BPMNShape_ugDfgg">
|
<bpmndi:BPMNShape bpmnElement="task_drhWQg" id="BPMNShape_ugDfgg">
|
||||||
<dc:Bounds height="50.0" width="110.0" x="650.0" y="450.0"/>
|
<dc:Bounds height="50.0" width="110.0" x="650.0" y="450.0"/>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNShape bpmnElement="event_urvfmQ" id="BPMNShape_5ms9iA">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="927.0" y="457.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_SCNsvQ">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="895.0" y="496.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="message_1" id="BPMNShape_6VlRkw">
|
<bpmndi:BPMNShape bpmnElement="message_1" id="BPMNShape_6VlRkw">
|
||||||
<dc:Bounds height="20.0" width="30.0" x="130.0" y="30.0"/>
|
<dc:Bounds height="20.0" width="30.0" x="130.0" y="30.0"/>
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_FxvxBA">
|
<bpmndi:BPMNLabel id="BPMNLabel_FxvxBA">
|
||||||
<dc:Bounds height="20.0" width="100.0" x="95.0" y="55.0"/>
|
<dc:Bounds height="20.0" width="100.0" x="95.0" y="55.0"/>
|
||||||
</bpmndi:BPMNLabel>
|
</bpmndi:BPMNLabel>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_duF1Hg" id="BPMNEdge_1oOBLQ" sourceElement="BPMNShape_cXXfkg" targetElement="BPMNShape_5ms9iA">
|
|
||||||
<di:waypoint x="880.0" y="475.0"/>
|
|
||||||
<di:waypoint x="927.0" y="475.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="event_lKuUKA" id="BPMNShape_A70Bjg">
|
|
||||||
<dc:Bounds height="36.0" width="36.0" x="1127.0" y="457.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_dnMX0Q">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="1158.0" y="463.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_t18xVA" id="BPMNEdge_u5Vplw" sourceElement="BPMNShape_eyKNaw" targetElement="BPMNShape_TjS4HQ">
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_t18xVA" id="BPMNEdge_u5Vplw" sourceElement="BPMNShape_eyKNaw" targetElement="BPMNShape_TjS4HQ">
|
||||||
<di:waypoint x="380.0" y="475.0"/>
|
<di:waypoint x="380.0" y="475.0"/>
|
||||||
<di:waypoint x="447.0" y="475.0"/>
|
<di:waypoint x="447.0" y="475.0"/>
|
||||||
|
|
@ -242,12 +238,12 @@ Context:
|
||||||
</bpmndi:BPMNLabel>
|
</bpmndi:BPMNLabel>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNShape bpmnElement="textAnnotation_0at23Q" id="BPMNShape_iHgbbQ">
|
<bpmndi:BPMNShape bpmnElement="textAnnotation_0at23Q" id="BPMNShape_iHgbbQ">
|
||||||
<dc:Bounds height="79.0" width="255.0" x="200.0" y="280.0"/>
|
<dc:Bounds height="149.0" width="341.0" x="150.0" y="200.0"/>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNEdge bpmnElement="association_6Hfsww" id="BPMNEdge_szAS0Q" sourceElement="BPMNShape_iHgbbQ" targetElement="BPMNShape_OX2wsg">
|
<bpmndi:BPMNEdge bpmnElement="association_6Hfsww" id="BPMNEdge_szAS0Q" sourceElement="BPMNShape_iHgbbQ" targetElement="BPMNShape_OX2wsg">
|
||||||
<di:waypoint x="455.0" y="316.0"/>
|
<di:waypoint x="438.0" y="349.0"/>
|
||||||
<di:waypoint x="468.0" y="316.0"/>
|
<di:waypoint x="438.0" y="405.0"/>
|
||||||
<di:waypoint x="468.0" y="380.0"/>
|
<di:waypoint x="450.0" y="405.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="association_dpwf6A" id="BPMNEdge_iilkRw" sourceElement="BPMNShape_OX2wsg" targetElement="BPMNShape_TjS4HQ">
|
<bpmndi:BPMNEdge bpmnElement="association_dpwf6A" id="BPMNEdge_iilkRw" sourceElement="BPMNShape_OX2wsg" targetElement="BPMNShape_TjS4HQ">
|
||||||
<di:waypoint x="468.0" y="430.0"/>
|
<di:waypoint x="468.0" y="430.0"/>
|
||||||
|
|
@ -255,10 +251,6 @@ Context:
|
||||||
<di:waypoint x="465.0" y="444.0"/>
|
<di:waypoint x="465.0" y="444.0"/>
|
||||||
<di:waypoint x="465.0" y="457.0"/>
|
<di:waypoint x="465.0" y="457.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_S4jwCQ" id="BPMNEdge_TD3y7w" sourceElement="BPMNShape_5ms9iA" targetElement="BPMNShape_A70Bjg">
|
|
||||||
<di:waypoint x="963.0" y="475.0"/>
|
|
||||||
<di:waypoint x="1127.0" y="475.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNShape bpmnElement="gateway_x0C90A" id="BPMNShape_9fBhCg">
|
<bpmndi:BPMNShape bpmnElement="gateway_x0C90A" id="BPMNShape_9fBhCg">
|
||||||
<dc:Bounds height="50.0" width="50.0" x="540.0" y="450.0"/>
|
<dc:Bounds height="50.0" width="50.0" x="540.0" y="450.0"/>
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_w1NtnA">
|
<bpmndi:BPMNLabel id="BPMNLabel_w1NtnA">
|
||||||
|
|
@ -278,36 +270,28 @@ Context:
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_gfW00Q" id="BPMNEdge_UQGetQ" sourceElement="BPMNShape_9fBhCg" targetElement="BPMNShape_YZRbHw">
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_gfW00Q" id="BPMNEdge_UQGetQ" sourceElement="BPMNShape_9fBhCg" targetElement="BPMNShape_YZRbHw">
|
||||||
<di:waypoint x="564.0" y="451.0"/>
|
<di:waypoint x="564.0" y="451.0"/>
|
||||||
<di:waypoint x="564.0" y="355.0"/>
|
<di:waypoint x="564.0" y="352.0"/>
|
||||||
<di:waypoint x="650.0" y="355.0"/>
|
<di:waypoint x="650.0" y="352.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNShape bpmnElement="task_Djd00A" id="BPMNShape_mve07A">
|
<bpmndi:BPMNShape bpmnElement="task_Djd00A" id="BPMNShape_mve07A">
|
||||||
<dc:Bounds height="50.0" width="110.0" x="650.0" y="570.0"/>
|
<dc:Bounds height="50.0" width="110.0" x="650.0" y="570.0"/>
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNShape bpmnElement="gateway_0pxlXg" id="BPMNShape_cXXfkg">
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_GAe7Gg" id="BPMNEdge_nO1aqw" sourceElement="BPMNShape_YZRbHw" targetElement="BPMNShape_eCqWQw">
|
||||||
<dc:Bounds height="50.0" width="50.0" x="830.0" y="450.0"/>
|
|
||||||
<bpmndi:BPMNLabel id="BPMNLabel_NDn7Kw">
|
|
||||||
<dc:Bounds height="20.0" width="100.0" x="805.0" y="503.0"/>
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_GAe7Gg" id="BPMNEdge_nO1aqw" sourceElement="BPMNShape_YZRbHw" targetElement="BPMNShape_cXXfkg">
|
|
||||||
<di:waypoint x="760.0" y="355.0"/>
|
<di:waypoint x="760.0" y="355.0"/>
|
||||||
<di:waypoint x="855.0" y="355.0"/>
|
<di:waypoint x="927.0" y="355.0"/>
|
||||||
<di:waypoint x="855.0" y="450.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_XjZMoA" id="BPMNEdge_YsvSKA" sourceElement="BPMNShape_ugDfgg" targetElement="BPMNShape_cXXfkg">
|
|
||||||
<di:waypoint x="760.0" y="475.0"/>
|
|
||||||
<di:waypoint x="830.0" y="475.0"/>
|
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_DiAQ5w" id="BPMNEdge_zoUFFg" sourceElement="BPMNShape_9fBhCg" targetElement="BPMNShape_mve07A">
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_DiAQ5w" id="BPMNEdge_zoUFFg" sourceElement="BPMNShape_9fBhCg" targetElement="BPMNShape_mve07A">
|
||||||
<di:waypoint x="565.0" y="500.0"/>
|
<di:waypoint x="565.0" y="500.0"/>
|
||||||
<di:waypoint x="565.0" y="590.0"/>
|
<di:waypoint x="565.0" y="590.0"/>
|
||||||
<di:waypoint x="650.0" y="590.0"/>
|
<di:waypoint x="650.0" y="590.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_QqJL2w" id="BPMNEdge_3jEvsA" sourceElement="BPMNShape_mve07A" targetElement="BPMNShape_cXXfkg">
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_rub38g" id="BPMNEdge_SWfLrg" sourceElement="BPMNShape_mve07A" targetElement="BPMNShape_BZoF3Q">
|
||||||
<di:waypoint x="760.0" y="590.0"/>
|
<di:waypoint x="760.0" y="595.0"/>
|
||||||
<di:waypoint x="853.0" y="590.0"/>
|
<di:waypoint x="927.0" y="595.0"/>
|
||||||
<di:waypoint x="853.0" y="498.0"/>
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_G06SFg" id="BPMNEdge_08bmBw" sourceElement="BPMNShape_ugDfgg" targetElement="BPMNShape_BsDkYQ">
|
||||||
|
<di:waypoint x="760.0" y="475.0"/>
|
||||||
|
<di:waypoint x="927.0" y="475.0"/>
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
</bpmndi:BPMNPlane>
|
</bpmndi:BPMNPlane>
|
||||||
</bpmndi:BPMNDiagram>
|
</bpmndi:BPMNDiagram>
|
||||||
245
doc/modelling-decision.bpmn
Normal file
245
doc/modelling-decision.bpmn
Normal file
|
|
@ -0,0 +1,245 @@
|
||||||
|
<?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:collaboration id="collaboration_1" name="Default Collaboration">
|
||||||
|
<bpmn2:participant id="participant_x0L42g" name="Default Process" processRef="process_1"/>
|
||||||
|
<bpmn2:participant id="participant_tRnOVw" name="Quotation" processRef="process_sMc7Dg">
|
||||||
|
<bpmn2:documentation id="documentation_vx4Wdw"/>
|
||||||
|
</bpmn2:participant>
|
||||||
|
</bpmn2:collaboration>
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<open-bpmn:auto-align>true</open-bpmn:auto-align>
|
||||||
|
<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 definitionalCollaborationRef="collaboration_1" id="process_1" name="Default Process" processType="Public">
|
||||||
|
<bpmn2:documentation id="documentation_yIE0cQ"/>
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<open-bpmn:auto-align>true</open-bpmn:auto-align>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
</bpmn2:process>
|
||||||
|
<bpmn2:process definitionalCollaborationRef="collaboration_1" id="process_sMc7Dg" isExecutable="true" name="Quotation" processType="Private">
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_niedQQ" imixs:activityid="10" name="✅ Lgistic Management">
|
||||||
|
<bpmn2:documentation id="documentation_MBhkPQ"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_awxpAw</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_0r2GvA</bpmn2:outgoing>
|
||||||
|
<bpmn2:signalEventDefinition id="signalEventDefinition_INWMRA" signalRef="signal_1"/>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:textAnnotation id="textAnnotation_0at23Q" textFormat="">
|
||||||
|
<bpmn2:text id="text_wUjgfQ"><![CDATA[☑️ You are evaluating a business rule for a workflow decision.
|
||||||
|
|
||||||
|
Rule to evaluate: "{natural_language_condition}"
|
||||||
|
|
||||||
|
Process Context:
|
||||||
|
{process_variables_json}
|
||||||
|
|
||||||
|
Document Summary:
|
||||||
|
{summary_text}
|
||||||
|
|
||||||
|
Respond with exactly one word: true or false]]></bpmn2:text>
|
||||||
|
<bpmn2:documentation id="documentation_IG9UoA"/>
|
||||||
|
</bpmn2:textAnnotation>
|
||||||
|
<bpmn2:task id="task_L133Xw" imixs:processid="200" name="📄 Invoice Processing">
|
||||||
|
<bpmn2:extensionElements/>
|
||||||
|
<bpmn2:documentation id="documentation_ramFEg"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_xzsTOg</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_vjN4ow</bpmn2:outgoing>
|
||||||
|
</bpmn2:task>
|
||||||
|
<bpmn2:intermediateThrowEvent id="event_5pszBQ" name="♻ Continue">
|
||||||
|
<bpmn2:documentation id="documentation_AaXe9w"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_j8lGIw</bpmn2:incoming>
|
||||||
|
<bpmn2:linkEventDefinition id="linkEventDefinition_v0KICg"/>
|
||||||
|
</bpmn2:intermediateThrowEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_xzsTOg" sourceRef="event_rj5hpg" targetRef="task_L133Xw">
|
||||||
|
<bpmn2:documentation id="documentation_3oNU0w"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_vjN4ow" sourceRef="task_L133Xw" targetRef="gateway_ecl5PA">
|
||||||
|
<bpmn2:documentation id="documentation_a90yew"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_coOKbw" imixs:activityid="10" name="✅ Customer Managmeent">
|
||||||
|
<bpmn2:documentation id="documentation_vejT4Q"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_0cRjFA</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_j8lGIw</bpmn2:outgoing>
|
||||||
|
<bpmn2:signalEventDefinition id="signalEventDefinition_cZ2P5Q" signalRef="signal_1"/>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_j8lGIw" sourceRef="event_coOKbw" targetRef="event_5pszBQ">
|
||||||
|
<bpmn2:documentation id="documentation_z2uUIQ"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:startEvent id="event_rj5hpg" name="Start">
|
||||||
|
<bpmn2:documentation id="documentation_iaOvqQ"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_xzsTOg</bpmn2:outgoing>
|
||||||
|
</bpmn2:startEvent>
|
||||||
|
<bpmn2:exclusiveGateway gatewayDirection="Diverging" id="gateway_ecl5PA" name="">
|
||||||
|
<bpmn2:documentation id="documentation_BG9knA"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_vjN4ow</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_awxpAw</bpmn2:outgoing>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_sOfHQg</bpmn2:outgoing>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_0cRjFA</bpmn2:outgoing>
|
||||||
|
</bpmn2:exclusiveGateway>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_awxpAw" name=" Delivery non-EU country?" sourceRef="gateway_ecl5PA" targetRef="event_niedQQ">
|
||||||
|
<bpmn2:documentation id="documentation_0VpxLQ"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_R70aTA" imixs:activityid="10" name="✅ Risk Managmeent">
|
||||||
|
<bpmn2:documentation id="documentation_M4lPVQ"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_sOfHQg</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_ZfBKRA</bpmn2:outgoing>
|
||||||
|
<bpmn2:signalEventDefinition id="signalEventDefinition_s6Zhow" signalRef="signal_1"/>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_sOfHQg" name="Customer classified as high-risk?" sourceRef="gateway_ecl5PA" targetRef="event_R70aTA">
|
||||||
|
<bpmn2:documentation id="documentation_Q1iCJQ"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_0cRjFA" name="exceed the approval threshold?" sourceRef="gateway_ecl5PA" targetRef="event_coOKbw">
|
||||||
|
<bpmn2:documentation id="documentation_2oh4hQ"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateThrowEvent id="event_3AirVQ" name="♻ Continue">
|
||||||
|
<bpmn2:documentation id="documentation_hNsrLw"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_ZfBKRA</bpmn2:incoming>
|
||||||
|
<bpmn2:linkEventDefinition id="linkEventDefinition_8orPzg"/>
|
||||||
|
</bpmn2:intermediateThrowEvent>
|
||||||
|
<bpmn2:intermediateThrowEvent id="event_wOWZhA" name="♻ Continue">
|
||||||
|
<bpmn2:documentation id="documentation_iBmiaA"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_0r2GvA</bpmn2:incoming>
|
||||||
|
<bpmn2:linkEventDefinition id="linkEventDefinition_T4EjUg"/>
|
||||||
|
</bpmn2:intermediateThrowEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_0r2GvA" sourceRef="event_niedQQ" targetRef="event_wOWZhA">
|
||||||
|
<bpmn2:documentation id="documentation_Vf0FuQ"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_ZfBKRA" sourceRef="event_R70aTA" targetRef="event_3AirVQ">
|
||||||
|
<bpmn2:documentation id="documentation_aKw5nQ"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:association id="association_4N5Ntg" sourceRef="textAnnotation_0at23Q" targetRef="task_L133Xw">
|
||||||
|
<bpmn2:documentation id="documentation_YGHJkA"/>
|
||||||
|
</bpmn2:association>
|
||||||
|
</bpmn2:process>
|
||||||
|
<bpmn2:message id="message_1" name="Message 1">
|
||||||
|
<bpmn2:documentation id="documentation_KTfSFQ"/>
|
||||||
|
</bpmn2:message>
|
||||||
|
<bpmn2:signal id="signal_1" name="Signal 1"/>
|
||||||
|
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="OpenBPMN Diagram">
|
||||||
|
<bpmndi:BPMNPlane bpmnElement="collaboration_1" id="BPMNPlane_1">
|
||||||
|
<bpmndi:BPMNShape bpmnElement="participant_tRnOVw" id="BPMNShape_j8YiYQ">
|
||||||
|
<dc:Bounds height="760.0" width="2500.0" x="90.0" y="130.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="participant_x0L42g" id="BPMNShape_D38FhA">
|
||||||
|
<dc:Bounds height="210.0" width="800.0" x="0.0" y="0.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_5pszBQ" id="BPMNShape_eCqWQw">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="1077.0" y="527.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_0AKR2g">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="1045.0" y="566.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="message_1" id="BPMNShape_6VlRkw">
|
||||||
|
<dc:Bounds height="20.0" width="30.0" x="130.0" y="30.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_FxvxBA">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="95.0" y="55.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_niedQQ" id="BPMNShape_TjS4HQ">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="947.0" y="337.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_KXscdQ">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="915.0" y="376.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="textAnnotation_0at23Q" id="BPMNShape_iHgbbQ">
|
||||||
|
<dc:Bounds height="226.0" width="314.0" x="190.0" y="160.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_coOKbw" id="BPMNShape_xl46Xg">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="947.0" y="527.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_C7HeYQ">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="915.0" y="566.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_rj5hpg" id="BPMNShape_l3trNA">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="247.0" y="427.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_EeFhIA">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="215.0" y="466.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="gateway_ecl5PA" id="BPMNShape_IdIloA">
|
||||||
|
<dc:Bounds height="50.0" width="50.0" x="540.0" y="420.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_DFklPg">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="515.0" y="473.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="task_L133Xw" id="BPMNShape_YZRbHw">
|
||||||
|
<dc:Bounds height="50.0" width="110.0" x="350.0" y="420.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_R70aTA" id="BPMNShape_sjgweA">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="947.0" y="427.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_aNkYbg">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="915.0" y="466.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_3AirVQ" id="BPMNShape_12HUnA">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="1077.0" y="427.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_00JY6A">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="1045.0" y="466.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_wOWZhA" id="BPMNShape_T52I0w">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="1077.0" y="337.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_eaxg8g">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="1045.0" y="376.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_xzsTOg" id="BPMNEdge_ToVbEg" sourceElement="BPMNShape_l3trNA" targetElement="BPMNShape_YZRbHw">
|
||||||
|
<di:waypoint x="283.0" y="445.0"/>
|
||||||
|
<di:waypoint x="350.0" y="445.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_vjN4ow" id="BPMNEdge_L0VhCw" sourceElement="BPMNShape_YZRbHw" targetElement="BPMNShape_IdIloA">
|
||||||
|
<di:waypoint x="460.0" y="445.0"/>
|
||||||
|
<di:waypoint x="540.0" y="445.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_j8lGIw" id="BPMNEdge_j9b58A" sourceElement="BPMNShape_xl46Xg" targetElement="BPMNShape_eCqWQw">
|
||||||
|
<di:waypoint x="983.0" y="545.0"/>
|
||||||
|
<di:waypoint x="1077.0" y="545.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_awxpAw" id="BPMNEdge_l7orLg" sourceElement="BPMNShape_IdIloA" targetElement="BPMNShape_TjS4HQ">
|
||||||
|
<di:waypoint x="566.0" y="421.0"/>
|
||||||
|
<di:waypoint x="566.0" y="355.0"/>
|
||||||
|
<di:waypoint x="947.0" y="355.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_sOfHQg" id="BPMNEdge_4Mji4w" sourceElement="BPMNShape_IdIloA" targetElement="BPMNShape_sjgweA">
|
||||||
|
<di:waypoint x="590.0" y="445.0"/>
|
||||||
|
<di:waypoint x="945.0" y="445.0"/>
|
||||||
|
<di:waypoint x="947.0" y="445.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_0cRjFA" id="BPMNEdge_MN3yxg" sourceElement="BPMNShape_IdIloA" targetElement="BPMNShape_xl46Xg">
|
||||||
|
<di:waypoint x="564.0" y="469.0"/>
|
||||||
|
<di:waypoint x="564.0" y="545.0"/>
|
||||||
|
<di:waypoint x="947.0" y="545.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_0r2GvA" id="BPMNEdge_n0l9lg" sourceElement="BPMNShape_TjS4HQ" targetElement="BPMNShape_T52I0w">
|
||||||
|
<di:waypoint x="983.0" y="355.0"/>
|
||||||
|
<di:waypoint x="1077.0" y="355.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_ZfBKRA" id="BPMNEdge_1Bsm3g" sourceElement="BPMNShape_sjgweA" targetElement="BPMNShape_12HUnA">
|
||||||
|
<di:waypoint x="983.0" y="445.0"/>
|
||||||
|
<di:waypoint x="1077.0" y="445.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="association_4N5Ntg" id="BPMNEdge_90T50Q" sourceElement="BPMNShape_iHgbbQ" targetElement="BPMNShape_YZRbHw">
|
||||||
|
<di:waypoint x="349.0" y="386.0"/>
|
||||||
|
<di:waypoint x="349.0" y="398.0"/>
|
||||||
|
<di:waypoint x="405.0" y="398.0"/>
|
||||||
|
<di:waypoint x="405.0" y="420.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
</bpmndi:BPMNPlane>
|
||||||
|
</bpmndi:BPMNDiagram>
|
||||||
|
</bpmn2:definitions>
|
||||||
BIN
doc/modelling-decision.png
Normal file
BIN
doc/modelling-decision.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 58 KiB |
231
doc/modelling-extraction.bpmn
Normal file
231
doc/modelling-extraction.bpmn
Normal file
|
|
@ -0,0 +1,231 @@
|
||||||
|
<?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:collaboration id="collaboration_1" name="Default Collaboration">
|
||||||
|
<bpmn2:participant id="participant_x0L42g" name="Default Process" processRef="process_1"/>
|
||||||
|
<bpmn2:participant id="participant_tRnOVw" name="Quotation" processRef="process_sMc7Dg">
|
||||||
|
<bpmn2:documentation id="documentation_vx4Wdw"/>
|
||||||
|
</bpmn2:participant>
|
||||||
|
</bpmn2:collaboration>
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<open-bpmn:auto-align>true</open-bpmn:auto-align>
|
||||||
|
<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 definitionalCollaborationRef="collaboration_1" id="process_1" name="Default Process" processType="Public">
|
||||||
|
<bpmn2:documentation id="documentation_yIE0cQ"/>
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<open-bpmn:auto-align>true</open-bpmn:auto-align>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
</bpmn2:process>
|
||||||
|
<bpmn2:process definitionalCollaborationRef="collaboration_1" id="process_sMc7Dg" isExecutable="true" name="Quotation" processType="Private">
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_niedQQ" imixs:activityid="10" name="✅ Summarization">
|
||||||
|
<bpmn2:documentation id="documentation_MBhkPQ"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_vjN4ow</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_GAe7Gg</bpmn2:outgoing>
|
||||||
|
<bpmn2:signalEventDefinition id="signalEventDefinition_INWMRA" signalRef="signal_1"/>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:dataObject id="dataObject_6cOkKQ" imixs:datatype="prompt-data" name="AI Agent">
|
||||||
|
<bpmn2:documentation id="documentation_AXhPdQ"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<PromptDefinition>
|
||||||
|
<prompt_options>{"n_predict": 4096, "temperature": 0}</prompt_options>
|
||||||
|
<prompt><![CDATA[[INST] Du bist Sachbearbeiter in einem Unternehmen. Deine Aufgabe ist es, eingehende Vertragsdokumente zu prüfen. [/INST]
|
||||||
|
|
||||||
|
<FILECONTEXT>^.+\.([pP][dD][fF])$</FILECONTEXT>
|
||||||
|
|
||||||
|
</s>[INST]
|
||||||
|
|
||||||
|
Erstelle eine kurze Zusammenfassung der wichtigsten Elemente dieses Vertrags.
|
||||||
|
|
||||||
|
- Vertragsgeber
|
||||||
|
- Vertragsnehmer
|
||||||
|
- Gegenstand
|
||||||
|
- Laufzeit
|
||||||
|
|
||||||
|
[/INST]
|
||||||
|
]]]]><![CDATA[>
|
||||||
|
</prompt>
|
||||||
|
</PromptDefinition> ]]></bpmn2:documentation>
|
||||||
|
</bpmn2:dataObject>
|
||||||
|
<bpmn2:textAnnotation id="textAnnotation_0at23Q" textFormat="">
|
||||||
|
<bpmn2:text id="text_wUjgfQ"><![CDATA[☑️ Extract the following data fields from the document summary.
|
||||||
|
|
||||||
|
Required Fields:
|
||||||
|
- invoice_number: string
|
||||||
|
- invoice_date: date (normalize to ISO 8601: YYYY-MM-DD)
|
||||||
|
- due_date: date (normalize to ISO 8601: YYYY-MM-DD)
|
||||||
|
- vendor_name: string
|
||||||
|
- vendor_tax_id: string
|
||||||
|
- total_amount: decimal (normalize to standard format: 1234.56)
|
||||||
|
- currency: string (ISO 4217 code)
|
||||||
|
- payment_terms: string
|
||||||
|
|
||||||
|
Respond in XML format using the following structure:
|
||||||
|
<document>
|
||||||
|
<item name="invoice_number" type="string" />
|
||||||
|
...
|
||||||
|
</document>
|
||||||
|
|
||||||
|
Document Summary:
|
||||||
|
{summary_text}]]></bpmn2:text>
|
||||||
|
<bpmn2:documentation id="documentation_IG9UoA"/>
|
||||||
|
</bpmn2:textAnnotation>
|
||||||
|
<bpmn2:association id="association_6Hfsww" sourceRef="textAnnotation_0at23Q" targetRef="dataObject_6cOkKQ">
|
||||||
|
<bpmn2:documentation id="documentation_BvpU3g"/>
|
||||||
|
</bpmn2:association>
|
||||||
|
<bpmn2:association id="association_dpwf6A" sourceRef="dataObject_6cOkKQ" targetRef="event_coOKbw">
|
||||||
|
<bpmn2:documentation id="documentation_8CvVvA"/>
|
||||||
|
</bpmn2:association>
|
||||||
|
<bpmn2:task id="task_L133Xw" imixs:processid="200" name="📄 Invoice Processing">
|
||||||
|
<bpmn2:extensionElements/>
|
||||||
|
<bpmn2:documentation id="documentation_ramFEg"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_xzsTOg</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_vjN4ow</bpmn2:outgoing>
|
||||||
|
</bpmn2:task>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_GAe7Gg" sourceRef="event_niedQQ" targetRef="event_coOKbw">
|
||||||
|
<bpmn2:documentation id="documentation_tneb3w"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateThrowEvent id="event_5pszBQ" name="♻ API Calls">
|
||||||
|
<bpmn2:documentation id="documentation_AaXe9w"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_j8lGIw</bpmn2:incoming>
|
||||||
|
<bpmn2:linkEventDefinition id="linkEventDefinition_v0KICg"/>
|
||||||
|
</bpmn2:intermediateThrowEvent>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_qPfuAQ" name="Categoriyzation">
|
||||||
|
<bpmn2:documentation id="documentation_downwg"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_xzsTOg</bpmn2:outgoing>
|
||||||
|
<bpmn2:linkEventDefinition id="linkEventDefinition_xwHE3g"/>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_xzsTOg" sourceRef="event_qPfuAQ" targetRef="task_L133Xw">
|
||||||
|
<bpmn2:documentation id="documentation_3oNU0w"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_vjN4ow" sourceRef="task_L133Xw" targetRef="event_niedQQ">
|
||||||
|
<bpmn2:documentation id="documentation_a90yew"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_coOKbw" imixs:activityid="10" name="✅ Summarization">
|
||||||
|
<bpmn2:documentation id="documentation_vejT4Q"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_j8lGIw</bpmn2:outgoing>
|
||||||
|
<bpmn2:signalEventDefinition id="signalEventDefinition_cZ2P5Q" signalRef="signal_1"/>
|
||||||
|
<bpmn2:incoming>association_dpwf6A</bpmn2:incoming>
|
||||||
|
<bpmn2:incoming>sequenceFlow_GAe7Gg</bpmn2:incoming>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_j8lGIw" sourceRef="event_coOKbw" targetRef="event_5pszBQ">
|
||||||
|
<bpmn2:documentation id="documentation_z2uUIQ"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:dataStoreReference id="dataStoreReference_5tcIIg" name="Data Store">
|
||||||
|
<bpmn2:documentation id="documentation_jbC8IQ"/>
|
||||||
|
</bpmn2:dataStoreReference>
|
||||||
|
<bpmn2:association id="association_0LCCpA" sourceRef="event_5pszBQ" targetRef="dataStoreReference_5tcIIg">
|
||||||
|
<bpmn2:documentation id="documentation_sYiG4A"/>
|
||||||
|
</bpmn2:association>
|
||||||
|
</bpmn2:process>
|
||||||
|
<bpmn2:message id="message_1" name="Message 1">
|
||||||
|
<bpmn2:documentation id="documentation_KTfSFQ"/>
|
||||||
|
</bpmn2:message>
|
||||||
|
<bpmn2:signal id="signal_1" name="Signal 1"/>
|
||||||
|
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="OpenBPMN Diagram">
|
||||||
|
<bpmndi:BPMNPlane bpmnElement="collaboration_1" id="BPMNPlane_1">
|
||||||
|
<bpmndi:BPMNShape bpmnElement="participant_tRnOVw" id="BPMNShape_j8YiYQ">
|
||||||
|
<dc:Bounds height="760.0" width="2500.0" x="90.0" y="130.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="participant_x0L42g" id="BPMNShape_D38FhA">
|
||||||
|
<dc:Bounds height="210.0" width="800.0" x="0.0" y="0.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_5pszBQ" id="BPMNShape_eCqWQw">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="837.0" y="537.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_0AKR2g">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="805.0" y="576.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="message_1" id="BPMNShape_6VlRkw">
|
||||||
|
<dc:Bounds height="20.0" width="30.0" x="130.0" y="30.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_FxvxBA">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="95.0" y="55.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_niedQQ" id="BPMNShape_TjS4HQ">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="557.0" y="537.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_KXscdQ">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="525.0" y="576.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="dataObject_6cOkKQ" id="BPMNShape_OX2wsg">
|
||||||
|
<dc:Bounds height="50.0" width="35.0" x="700.0" y="410.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_HAEE0w">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="667.5" y="465.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="textAnnotation_0at23Q" id="BPMNShape_iHgbbQ">
|
||||||
|
<dc:Bounds height="318.0" width="468.0" x="150.0" y="190.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_qPfuAQ" id="BPMNShape_mDg2JQ">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="257.0" y="537.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_BncPzw">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="225.0" y="576.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_coOKbw" id="BPMNShape_xl46Xg">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="697.0" y="537.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_C7HeYQ">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="665.0" y="576.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="dataStoreReference_5tcIIg" id="BPMNShape_lNbozw">
|
||||||
|
<dc:Bounds height="50.0" width="50.0" x="830.0" y="630.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_o4auSg">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="805.0" y="680.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="association_6Hfsww" id="BPMNEdge_szAS0Q" sourceElement="BPMNShape_iHgbbQ" targetElement="BPMNShape_OX2wsg">
|
||||||
|
<di:waypoint x="618.0" y="352.0"/>
|
||||||
|
<di:waypoint x="711.0" y="352.0"/>
|
||||||
|
<di:waypoint x="711.0" y="410.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="association_dpwf6A" id="BPMNEdge_iilkRw" sourceElement="BPMNShape_OX2wsg" targetElement="BPMNShape_xl46Xg">
|
||||||
|
<di:waypoint x="718.0" y="460.0"/>
|
||||||
|
<di:waypoint x="718.0" y="499.0"/>
|
||||||
|
<di:waypoint x="715.0" y="499.0"/>
|
||||||
|
<di:waypoint x="715.0" y="537.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="task_L133Xw" id="BPMNShape_YZRbHw">
|
||||||
|
<dc:Bounds height="50.0" width="110.0" x="360.0" y="530.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_GAe7Gg" id="BPMNEdge_nO1aqw" sourceElement="BPMNShape_TjS4HQ" targetElement="BPMNShape_xl46Xg">
|
||||||
|
<di:waypoint x="593.0" y="555.0"/>
|
||||||
|
<di:waypoint x="597.0" y="555.0"/>
|
||||||
|
<di:waypoint x="697.0" y="555.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_xzsTOg" id="BPMNEdge_ToVbEg" sourceElement="BPMNShape_mDg2JQ" targetElement="BPMNShape_YZRbHw">
|
||||||
|
<di:waypoint x="293.0" y="555.0"/>
|
||||||
|
<di:waypoint x="360.0" y="555.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_vjN4ow" id="BPMNEdge_L0VhCw" sourceElement="BPMNShape_YZRbHw" targetElement="BPMNShape_TjS4HQ">
|
||||||
|
<di:waypoint x="470.0" y="555.0"/>
|
||||||
|
<di:waypoint x="557.0" y="555.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_j8lGIw" id="BPMNEdge_j9b58A" sourceElement="BPMNShape_xl46Xg" targetElement="BPMNShape_eCqWQw">
|
||||||
|
<di:waypoint x="733.0" y="555.0"/>
|
||||||
|
<di:waypoint x="837.0" y="555.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="association_0LCCpA" id="BPMNEdge_QZXPYA" sourceElement="BPMNShape_eCqWQw" targetElement="BPMNShape_lNbozw">
|
||||||
|
<di:waypoint x="855.0" y="573.0"/>
|
||||||
|
<di:waypoint x="855.0" y="630.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
</bpmndi:BPMNPlane>
|
||||||
|
</bpmndi:BPMNDiagram>
|
||||||
|
</bpmn2:definitions>
|
||||||
BIN
doc/modelling-extraction.png
Normal file
BIN
doc/modelling-extraction.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 65 KiB |
186
doc/modelling-summarization.bpmn
Normal file
186
doc/modelling-summarization.bpmn
Normal file
|
|
@ -0,0 +1,186 @@
|
||||||
|
<?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:collaboration id="collaboration_1" name="Default Collaboration">
|
||||||
|
<bpmn2:participant id="participant_x0L42g" name="Default Process" processRef="process_1"/>
|
||||||
|
<bpmn2:participant id="participant_tRnOVw" name="Quotation" processRef="process_sMc7Dg">
|
||||||
|
<bpmn2:documentation id="documentation_vx4Wdw"/>
|
||||||
|
</bpmn2:participant>
|
||||||
|
</bpmn2:collaboration>
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<open-bpmn:auto-align>true</open-bpmn:auto-align>
|
||||||
|
<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 definitionalCollaborationRef="collaboration_1" id="process_1" name="Default Process" processType="Public">
|
||||||
|
<bpmn2:documentation id="documentation_yIE0cQ"/>
|
||||||
|
<bpmn2:extensionElements>
|
||||||
|
<open-bpmn:auto-align>true</open-bpmn:auto-align>
|
||||||
|
</bpmn2:extensionElements>
|
||||||
|
</bpmn2:process>
|
||||||
|
<bpmn2:process definitionalCollaborationRef="collaboration_1" id="process_sMc7Dg" isExecutable="true" name="Quotation" processType="Private">
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_niedQQ" imixs:activityid="10" name="✅ Summarization">
|
||||||
|
<bpmn2:documentation id="documentation_MBhkPQ"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_vjN4ow</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_GAe7Gg</bpmn2:outgoing>
|
||||||
|
<bpmn2:signalEventDefinition id="signalEventDefinition_INWMRA" signalRef="signal_1"/>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:dataObject id="dataObject_6cOkKQ" imixs:datatype="prompt-data" name="AI Agent">
|
||||||
|
<bpmn2:documentation id="documentation_AXhPdQ"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<PromptDefinition>
|
||||||
|
<prompt_options>{"n_predict": 4096, "temperature": 0}</prompt_options>
|
||||||
|
<prompt><![CDATA[[INST] Du bist Sachbearbeiter in einem Unternehmen. Deine Aufgabe ist es, eingehende Vertragsdokumente zu prüfen. [/INST]
|
||||||
|
|
||||||
|
<FILECONTEXT>^.+\.([pP][dD][fF])$</FILECONTEXT>
|
||||||
|
|
||||||
|
</s>[INST]
|
||||||
|
|
||||||
|
Erstelle eine kurze Zusammenfassung der wichtigsten Elemente dieses Vertrags.
|
||||||
|
|
||||||
|
- Vertragsgeber
|
||||||
|
- Vertragsnehmer
|
||||||
|
- Gegenstand
|
||||||
|
- Laufzeit
|
||||||
|
|
||||||
|
[/INST]
|
||||||
|
]]]]><![CDATA[>
|
||||||
|
</prompt>
|
||||||
|
</PromptDefinition> ]]></bpmn2:documentation>
|
||||||
|
</bpmn2:dataObject>
|
||||||
|
<bpmn2:textAnnotation id="textAnnotation_0at23Q" textFormat="">
|
||||||
|
<bpmn2:text id="text_wUjgfQ"><![CDATA[☑️ Summarize the following invoice for finance.
|
||||||
|
Focus on:
|
||||||
|
- Vendor and invoice number
|
||||||
|
- Total amount and currency
|
||||||
|
- Payment terms and due date
|
||||||
|
- Line items overview
|
||||||
|
- Any unusual charges or discrepancies
|
||||||
|
|
||||||
|
Keep the summary under 200 words. Use the original document language {language}.
|
||||||
|
|
||||||
|
Invoice Content:
|
||||||
|
{document_text}]]></bpmn2:text>
|
||||||
|
<bpmn2:documentation id="documentation_IG9UoA"/>
|
||||||
|
</bpmn2:textAnnotation>
|
||||||
|
<bpmn2:association id="association_6Hfsww" sourceRef="textAnnotation_0at23Q" targetRef="dataObject_6cOkKQ">
|
||||||
|
<bpmn2:documentation id="documentation_BvpU3g"/>
|
||||||
|
</bpmn2:association>
|
||||||
|
<bpmn2:association id="association_dpwf6A" sourceRef="dataObject_6cOkKQ" targetRef="event_niedQQ">
|
||||||
|
<bpmn2:documentation id="documentation_8CvVvA"/>
|
||||||
|
</bpmn2:association>
|
||||||
|
<bpmn2:task id="task_L133Xw" imixs:processid="200" name="📄 Invoice Processing">
|
||||||
|
<bpmn2:extensionElements/>
|
||||||
|
<bpmn2:documentation id="documentation_ramFEg"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_xzsTOg</bpmn2:incoming>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_vjN4ow</bpmn2:outgoing>
|
||||||
|
</bpmn2:task>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_GAe7Gg" sourceRef="event_niedQQ" targetRef="event_5pszBQ">
|
||||||
|
<bpmn2:documentation id="documentation_tneb3w"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:intermediateThrowEvent id="event_5pszBQ" name="♻ Start Workflow">
|
||||||
|
<bpmn2:documentation id="documentation_AaXe9w"/>
|
||||||
|
<bpmn2:linkEventDefinition id="linkEventDefinition_v0KICg"/>
|
||||||
|
<bpmn2:incoming>sequenceFlow_GAe7Gg</bpmn2:incoming>
|
||||||
|
</bpmn2:intermediateThrowEvent>
|
||||||
|
<bpmn2:intermediateCatchEvent id="event_qPfuAQ" name="Categoriyzation">
|
||||||
|
<bpmn2:documentation id="documentation_downwg"/>
|
||||||
|
<bpmn2:outgoing>sequenceFlow_xzsTOg</bpmn2:outgoing>
|
||||||
|
<bpmn2:linkEventDefinition id="linkEventDefinition_xwHE3g"/>
|
||||||
|
</bpmn2:intermediateCatchEvent>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_xzsTOg" sourceRef="event_qPfuAQ" targetRef="task_L133Xw">
|
||||||
|
<bpmn2:documentation id="documentation_3oNU0w"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
<bpmn2:sequenceFlow id="sequenceFlow_vjN4ow" sourceRef="task_L133Xw" targetRef="event_niedQQ">
|
||||||
|
<bpmn2:documentation id="documentation_a90yew"/>
|
||||||
|
</bpmn2:sequenceFlow>
|
||||||
|
</bpmn2:process>
|
||||||
|
<bpmn2:message id="message_1" name="Message 1">
|
||||||
|
<bpmn2:documentation id="documentation_KTfSFQ"/>
|
||||||
|
</bpmn2:message>
|
||||||
|
<bpmn2:signal id="signal_1" name="Signal 1"/>
|
||||||
|
<bpmndi:BPMNDiagram id="BPMNDiagram_1" name="OpenBPMN Diagram">
|
||||||
|
<bpmndi:BPMNPlane bpmnElement="collaboration_1" id="BPMNPlane_1">
|
||||||
|
<bpmndi:BPMNShape bpmnElement="participant_tRnOVw" id="BPMNShape_j8YiYQ">
|
||||||
|
<dc:Bounds height="760.0" width="2500.0" x="90.0" y="130.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="participant_x0L42g" id="BPMNShape_D38FhA">
|
||||||
|
<dc:Bounds height="210.0" width="800.0" x="0.0" y="0.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_5pszBQ" id="BPMNShape_eCqWQw">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="687.0" y="537.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_0AKR2g">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="655.0" y="576.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="message_1" id="BPMNShape_6VlRkw">
|
||||||
|
<dc:Bounds height="20.0" width="30.0" x="130.0" y="30.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_FxvxBA">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="95.0" y="55.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_niedQQ" id="BPMNShape_TjS4HQ">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="567.0" y="537.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_KXscdQ">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="535.0" y="576.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="dataObject_6cOkKQ" id="BPMNShape_OX2wsg">
|
||||||
|
<dc:Bounds height="50.0" width="35.0" x="570.0" y="410.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_HAEE0w">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="537.5" y="465.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="textAnnotation_0at23Q" id="BPMNShape_iHgbbQ">
|
||||||
|
<dc:Bounds height="203.0" width="354.0" x="150.0" y="250.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="event_qPfuAQ" id="BPMNShape_mDg2JQ">
|
||||||
|
<dc:Bounds height="36.0" width="36.0" x="257.0" y="537.0"/>
|
||||||
|
<bpmndi:BPMNLabel id="BPMNLabel_BncPzw">
|
||||||
|
<dc:Bounds height="20.0" width="100.0" x="225.0" y="576.0"/>
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="association_6Hfsww" id="BPMNEdge_szAS0Q" sourceElement="BPMNShape_iHgbbQ" targetElement="BPMNShape_OX2wsg">
|
||||||
|
<di:waypoint x="504.0" y="352.0"/>
|
||||||
|
<di:waypoint x="583.0" y="352.0"/>
|
||||||
|
<di:waypoint x="583.0" y="410.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="association_dpwf6A" id="BPMNEdge_iilkRw" sourceElement="BPMNShape_OX2wsg" targetElement="BPMNShape_TjS4HQ">
|
||||||
|
<di:waypoint x="588.0" y="460.0"/>
|
||||||
|
<di:waypoint x="588.0" y="499.0"/>
|
||||||
|
<di:waypoint x="585.0" y="499.0"/>
|
||||||
|
<di:waypoint x="585.0" y="537.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape bpmnElement="task_L133Xw" id="BPMNShape_YZRbHw">
|
||||||
|
<dc:Bounds height="50.0" width="110.0" x="360.0" y="530.0"/>
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_GAe7Gg" id="BPMNEdge_nO1aqw" sourceElement="BPMNShape_TjS4HQ" targetElement="BPMNShape_eCqWQw">
|
||||||
|
<di:waypoint x="603.0" y="555.0"/>
|
||||||
|
<di:waypoint x="687.0" y="555.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_xzsTOg" id="BPMNEdge_ToVbEg" sourceElement="BPMNShape_mDg2JQ" targetElement="BPMNShape_YZRbHw">
|
||||||
|
<di:waypoint x="293.0" y="555.0"/>
|
||||||
|
<di:waypoint x="360.0" y="555.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_vjN4ow" id="BPMNEdge_L0VhCw" sourceElement="BPMNShape_YZRbHw" targetElement="BPMNShape_TjS4HQ">
|
||||||
|
<di:waypoint x="470.0" y="555.0"/>
|
||||||
|
<di:waypoint x="567.0" y="555.0"/>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
</bpmndi:BPMNPlane>
|
||||||
|
</bpmndi:BPMNDiagram>
|
||||||
|
</bpmn2:definitions>
|
||||||
BIN
doc/modelling-summarization.png
Normal file
BIN
doc/modelling-summarization.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 42 KiB |
|
|
@ -3,18 +3,18 @@ services:
|
||||||
# PostgreSQL
|
# PostgreSQL
|
||||||
#######################
|
#######################
|
||||||
db:
|
db:
|
||||||
image: postgres:9.6.1
|
image: postgres:17.4
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_PASSWORD: adminadmin
|
POSTGRES_PASSWORD: adminadmin
|
||||||
POSTGRES_DB: office
|
POSTGRES_DB: office
|
||||||
volumes:
|
volumes:
|
||||||
- dbdata-hai:/var/lib/postgresql/data
|
- dbdata:/var/lib/postgresql/data
|
||||||
|
|
||||||
#######################
|
#######################
|
||||||
# Dynamixs AI
|
# Dynamixs AI
|
||||||
#######################
|
#######################
|
||||||
app:
|
app:
|
||||||
image: imixs/dynamixs-ai
|
image: imixs/dynamixs-super-office
|
||||||
depends_on:
|
depends_on:
|
||||||
- db
|
- db
|
||||||
environment:
|
environment:
|
||||||
|
|
@ -31,20 +31,21 @@ services:
|
||||||
METRICS_ENABLED: "true"
|
METRICS_ENABLED: "true"
|
||||||
# OCR
|
# OCR
|
||||||
OCR_SERVICE_ENDPOINT: "http://tika:9998/tika"
|
OCR_SERVICE_ENDPOINT: "http://tika:9998/tika"
|
||||||
OCR_SERVICE_MODE: "MODEL"
|
# MODEL | AUTO
|
||||||
|
OCR_SERVICE_MODE: "AUTO"
|
||||||
#OCR_STRATEGY: "NO_OCR, OCR_ONLY, OCR_AND_TEXT_EXTRACTION, AUTO (default)"
|
#OCR_STRATEGY: "NO_OCR, OCR_ONLY, OCR_AND_TEXT_EXTRACTION, AUTO (default)"
|
||||||
OCR_STRATEGY: "AUTO"
|
OCR_STRATEGY: "NO_OCR"
|
||||||
|
OCR_FILEPATTERN: "(PDF|pdf)$"
|
||||||
|
OCR_MAXPDFPAGES: 10
|
||||||
|
|
||||||
# Collabora integration
|
# Collabora integration
|
||||||
WOPI_PUBLIC_ENDPOINT: "http://localhost:9980"
|
WOPI_PUBLIC_ENDPOINT: "http://localhost:9980"
|
||||||
WOPI_DISCOVERY_ENDPOINT: "http://collabora:9980/hosting/discovery"
|
WOPI_DISCOVERY_ENDPOINT: "http://collabora:9980/hosting/discovery"
|
||||||
WOPI_HOST_ENDPOINT: "http://imixs-documents:8080/api/wopi/"
|
WOPI_HOST_ENDPOINT: "http://app:8080/api/wopi/"
|
||||||
COLLABORA_CONVERTER_URL: "http://collabora:9980/lool/convert-to/"
|
COLLABORA_CONVERTER_URL: "http://collabora:9980/lool/convert-to/"
|
||||||
|
|
||||||
# Imixs-AI
|
# LLM Integration
|
||||||
# Optional configured via imixs.properties
|
LLM_CONFIG_FILE: /opt/jboss/imixs-llm.xml
|
||||||
LLM_SERVICE_ENDPOINT: "https://llama.cpp.imixs.com/"
|
|
||||||
LLM_SERVICE_ENDPOINT_USER: "admin"
|
|
||||||
LLM_SERVICE_ENDPOINT_PASSWORD: "imixs4.null"
|
|
||||||
|
|
||||||
# Cassandra Embeddings
|
# Cassandra Embeddings
|
||||||
EMBEDDINGS_CLUSTER_CONTACTPOINTS: "cassandra"
|
EMBEDDINGS_CLUSTER_CONTACTPOINTS: "cassandra"
|
||||||
|
|
@ -55,21 +56,20 @@ services:
|
||||||
- "9990:9990"
|
- "9990:9990"
|
||||||
- "8787:8787"
|
- "8787:8787"
|
||||||
volumes:
|
volumes:
|
||||||
- ./deployments:/opt/jboss/wildfly/standalone/deployments/
|
- ./docker/deployments:/opt/jboss/wildfly/standalone/deployments/
|
||||||
- ./import_examples:/opt/jboss/import_examples/
|
- ./docker/keys/imixs-llm.xml:/opt/jboss/imixs-llm.xml
|
||||||
|
#- ./import_examples:/opt/jboss/import_examples/
|
||||||
|
|
||||||
# Mapping the host ip to the container
|
# Mapping the host ip to the container
|
||||||
# This setting is used for local testing only
|
# This setting is used for local testing only
|
||||||
# Wildfly can access the keycloak server via the external host address
|
# Wildfly can access the keycloak server via the external host address
|
||||||
extra_hosts:
|
# extra_hosts:
|
||||||
- "keycloak.imixs.local:host-gateway"
|
# - "keycloak.imixs.local:host-gateway"
|
||||||
|
|
||||||
#######################
|
#######################
|
||||||
# Tika OCR Service
|
# Tika OCR Service
|
||||||
#######################
|
#######################
|
||||||
tika:
|
tika:
|
||||||
#image: imixs/tika
|
|
||||||
#image: apache/tika:1.24.1-full
|
|
||||||
image: apache/tika:3.2.0.0-full
|
image: apache/tika:3.2.0.0-full
|
||||||
environment:
|
environment:
|
||||||
TZ: "Europe/Berlin"
|
TZ: "Europe/Berlin"
|
||||||
|
|
@ -102,51 +102,26 @@ services:
|
||||||
#######################
|
#######################
|
||||||
# collabora Office Online
|
# collabora Office Online
|
||||||
#######################
|
#######################
|
||||||
# collabora:
|
collabora:
|
||||||
# image: collabora/code:23.05.0.5.1
|
image: collabora/code:25.04.6.2.1
|
||||||
# #expose:
|
ports:
|
||||||
# # - 9980
|
- "9980:9980"
|
||||||
# ports:
|
environment:
|
||||||
# - "9980:9980"
|
- username=admin
|
||||||
# environment:
|
- password=adminadmin
|
||||||
# - username=admin
|
- extra_params=--o:ssl.enable=false
|
||||||
# - password=adminadmin
|
- aliasgroup1=http://app:8080
|
||||||
# - extra_params=--o:ssl.enable=false
|
|
||||||
# - aliasgroup1=http://imixs-documents:8080
|
|
||||||
# volumes:
|
|
||||||
# - ./configuration/collabora/fonts:/usr/share/fonts/truetype/more/
|
|
||||||
# - ./configuration/collabora/fonts:/opt/cool/systemplate/usr/share/fonts/truetype/more/
|
|
||||||
|
|
||||||
#######################
|
#######################
|
||||||
# Imixs Admin Client
|
# Imixs Admin Client
|
||||||
#######################
|
#######################
|
||||||
imixsadmin:
|
# imixsadmin:
|
||||||
image: imixs/imixs-admin
|
# image: imixs/imixs-admin
|
||||||
ports:
|
# ports:
|
||||||
- "8888:8080"
|
# - "8888:8080"
|
||||||
|
|
||||||
prometheus:
|
|
||||||
image: prom/prometheus:latest
|
|
||||||
ports:
|
|
||||||
- "9090:9090"
|
|
||||||
volumes:
|
|
||||||
- ./configuration/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
|
|
||||||
- prometheusdata:/prometheus/
|
|
||||||
|
|
||||||
grafana:
|
|
||||||
image: grafana/grafana:10.4.0 # Aktuelle stabile Version
|
|
||||||
ports:
|
|
||||||
- "3000:3000"
|
|
||||||
environment:
|
|
||||||
- GF_SECURITY_ADMIN_PASSWORD=admin # Standardpasswort setzen
|
|
||||||
volumes:
|
|
||||||
- grafana-storage:/var/lib/grafana # Persistente Daten
|
|
||||||
#networks:
|
|
||||||
# - monitoring
|
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
dbdata-hai:
|
dbdata:
|
||||||
dbkeycloak:
|
name: ${PROJECT_PREFIX}-dbdata
|
||||||
cassandra_data:
|
cassandra_data:
|
||||||
prometheusdata:
|
name: ${PROJECT_PREFIX}-cassandra_data
|
||||||
grafana-storage:
|
|
||||||
|
|
@ -1,172 +0,0 @@
|
||||||
services:
|
|
||||||
#######################
|
|
||||||
# PostgreSQL
|
|
||||||
#######################
|
|
||||||
db:
|
|
||||||
image: postgres:9.6.1
|
|
||||||
environment:
|
|
||||||
POSTGRES_PASSWORD: adminadmin
|
|
||||||
POSTGRES_DB: office
|
|
||||||
volumes:
|
|
||||||
- dbdata-hai:/var/lib/postgresql/data
|
|
||||||
|
|
||||||
#######################
|
|
||||||
# Dynamixs AI
|
|
||||||
#######################
|
|
||||||
app:
|
|
||||||
image: imixs/dynamixs-ai
|
|
||||||
depends_on:
|
|
||||||
- db
|
|
||||||
environment:
|
|
||||||
JAVA_OPTS: "-Dnashorn.args=--no-deprecation-warning"
|
|
||||||
POSTGRES_USER: "postgres"
|
|
||||||
POSTGRES_PASSWORD: "adminadmin"
|
|
||||||
POSTGRES_CONNECTION: "jdbc:postgresql://db/office"
|
|
||||||
TZ: "Europe/Berlin"
|
|
||||||
LANG: "en_US.UTF-8"
|
|
||||||
MAILGATEWAY: "localhost"
|
|
||||||
ASYNCEVENT_PROCESSOR_ENABLED: "true"
|
|
||||||
ASYNCEVENT_PROCESSOR_INITIALDELAY: "30000"
|
|
||||||
OCR_SERVICE_ENDPOINT: "http://tika:9998/tika"
|
|
||||||
OCR_SERVICE_MODE: "MODEL"
|
|
||||||
#OCR_STRATEGY: "NO_OCR, OCR_ONLY, OCR_AND_TEXT_EXTRACTION, AUTO (default)"
|
|
||||||
OCR_STRATEGY: "AUTO"
|
|
||||||
# Collabora integration
|
|
||||||
WOPI_PUBLIC_ENDPOINT: "http://localhost:9980"
|
|
||||||
WOPI_DISCOVERY_ENDPOINT: "http://collabora:9980/hosting/discovery"
|
|
||||||
WOPI_HOST_ENDPOINT: "http://imixs-documents:8080/api/wopi/"
|
|
||||||
COLLABORA_CONVERTER_URL: "http://collabora:9980/lool/convert-to/"
|
|
||||||
|
|
||||||
# Imixs-Archive
|
|
||||||
# ARCHIVE_SERVICE_ENDPOINT: "http://imixs-archive:8080/api"
|
|
||||||
|
|
||||||
# Imixs-AI
|
|
||||||
# Optional configured via imixs.properties
|
|
||||||
LLM_SERVICE_ENDPOINT: "https://llama.cpp.imixs.com/"
|
|
||||||
LLM_SERVICE_ENDPOINT_USER: "admin"
|
|
||||||
LLM_SERVICE_ENDPOINT_PASSWORD: "imixs4.null"
|
|
||||||
|
|
||||||
# Cassandra Embeddings
|
|
||||||
EMBEDDINGS_CLUSTER_CONTACTPOINTS: "cassandra"
|
|
||||||
EMBEDDINGS_CLUSTER_KEYSPACE: "embeddings"
|
|
||||||
|
|
||||||
# OIDC
|
|
||||||
OIDCCONFIG_PROVIDERURI: "http://keycloak.imixs.local:8084/realms/dynamixsai/.well-known/openid-configuration"
|
|
||||||
OIDCCONFIG_CLIENTID: "imixs"
|
|
||||||
OIDCCONFIG_CLIENTSECRET: "aSuEXUeD7bARAlX8o3fLagSYbIagBrrM"
|
|
||||||
OIDCCONFIG_REDIRECTURI: "http://localhost:8080/callback"
|
|
||||||
#OIDCCONFIG_SCOPE: "openid profile email"
|
|
||||||
#OIDCCONFIG_CLAIM_CALLERNAME: "preferred_username"
|
|
||||||
#OIDCCONFIG_CLAIM_ROLES: "groups"
|
|
||||||
|
|
||||||
ports:
|
|
||||||
- "8080:8080"
|
|
||||||
- "9990:9990"
|
|
||||||
- "8787:8787"
|
|
||||||
volumes:
|
|
||||||
- ./deployments:/opt/jboss/wildfly/standalone/deployments/
|
|
||||||
- ./import_examples:/opt/jboss/import_examples/
|
|
||||||
|
|
||||||
# Mapping the host ip to the container
|
|
||||||
# This setting is used for local testing only
|
|
||||||
# Wildfly can access the keycloak server via the external host address
|
|
||||||
extra_hosts:
|
|
||||||
- "keycloak.imixs.local:host-gateway"
|
|
||||||
|
|
||||||
#######################
|
|
||||||
# Tika OCR Service
|
|
||||||
#######################
|
|
||||||
tika:
|
|
||||||
#image: imixs/tika
|
|
||||||
image: apache/tika:1.24.1-full
|
|
||||||
environment:
|
|
||||||
TZ: "Europe/Berlin"
|
|
||||||
ports:
|
|
||||||
- "9998:9998"
|
|
||||||
|
|
||||||
#######################
|
|
||||||
# Cassandra
|
|
||||||
#######################
|
|
||||||
cassandra:
|
|
||||||
image: cassandra:5.0.4
|
|
||||||
container_name: cassandra
|
|
||||||
mem_limit: 2G # Mindestens 2 GB RAM für Cassandra 5.x
|
|
||||||
mem_reservation: 1G # Reserviert 1 GB
|
|
||||||
environment:
|
|
||||||
- TZ="Europe/Berlin"
|
|
||||||
- JVM_OPTS=-Xms1G -Xmx1G # Heap auf 1 GB begrenzen
|
|
||||||
- CASSANDRA_CLUSTER_NAME=dynamixsAiCluster
|
|
||||||
- CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch
|
|
||||||
- CASSANDRA_DC=datacenter1
|
|
||||||
- CASSANDRA_RACK=rack1
|
|
||||||
ports:
|
|
||||||
- "9042:9042" # CQL-Port
|
|
||||||
- "7000:7000" # Inter-Node-Kommunikation
|
|
||||||
- "7001:7001" # TLS-fähige Inter-Node-Kommunikation
|
|
||||||
- "7199:7199" # JMX-Port
|
|
||||||
volumes:
|
|
||||||
- cassandra_data:/var/lib/cassandra
|
|
||||||
|
|
||||||
#######################
|
|
||||||
# collabora Office Online
|
|
||||||
#######################
|
|
||||||
collabora:
|
|
||||||
image: collabora/code:23.05.0.5.1
|
|
||||||
#expose:
|
|
||||||
# - 9980
|
|
||||||
ports:
|
|
||||||
- "9980:9980"
|
|
||||||
environment:
|
|
||||||
- username=admin
|
|
||||||
- password=adminadmin
|
|
||||||
- extra_params=--o:ssl.enable=false
|
|
||||||
- aliasgroup1=http://imixs-documents:8080
|
|
||||||
volumes:
|
|
||||||
- ./configuration/collabora/fonts:/usr/share/fonts/truetype/more/
|
|
||||||
- ./configuration/collabora/fonts:/opt/cool/systemplate/usr/share/fonts/truetype/more/
|
|
||||||
|
|
||||||
#######################
|
|
||||||
# Imixs Admin Client
|
|
||||||
#######################
|
|
||||||
# imixsadmin:
|
|
||||||
# image: imixs/imixs-admin
|
|
||||||
# ports:
|
|
||||||
# - "8888:8080"
|
|
||||||
|
|
||||||
##################################
|
|
||||||
# Keycloak SQL Server
|
|
||||||
##################################
|
|
||||||
dbkeycloak:
|
|
||||||
image: postgres:15
|
|
||||||
environment:
|
|
||||||
POSTGRES_PASSWORD: adminadmin
|
|
||||||
POSTGRES_USER: keycloak
|
|
||||||
POSTGRES_DB: keycloak
|
|
||||||
volumes:
|
|
||||||
- dbkeycloak:/var/lib/postgresql/data
|
|
||||||
|
|
||||||
##################################
|
|
||||||
# Keycloak Server
|
|
||||||
##################################
|
|
||||||
keycloak:
|
|
||||||
#image: quay.io/keycloak/keycloak:23.0.5
|
|
||||||
image: quay.io/keycloak/keycloak:26.2.4
|
|
||||||
command:
|
|
||||||
- start-dev
|
|
||||||
environment:
|
|
||||||
- KEYCLOAK_ADMIN=admin
|
|
||||||
- KEYCLOAK_ADMIN_PASSWORD=adminadmin
|
|
||||||
- KC_DB=postgres
|
|
||||||
- KC_DB_URL=jdbc:postgresql://dbkeycloak:5432/keycloak
|
|
||||||
- KC_DB_USER=keycloak
|
|
||||||
- KC_DB_PASSWORD=adminadmin
|
|
||||||
volumes:
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
- ./configuration/keycloak/themes/:/opt/keycloak/themes/
|
|
||||||
ports:
|
|
||||||
- "8084:8080"
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
dbdata-hai:
|
|
||||||
dbkeycloak:
|
|
||||||
cassandra_data:
|
|
||||||
|
|
@ -1,52 +0,0 @@
|
||||||
version: "3.1"
|
|
||||||
services:
|
|
||||||
|
|
||||||
db:
|
|
||||||
image: postgres:9.6.1
|
|
||||||
environment:
|
|
||||||
POSTGRES_PASSWORD: adminadmin
|
|
||||||
POSTGRES_DB: office
|
|
||||||
volumes:
|
|
||||||
- dbdata:/var/lib/postgresql/data
|
|
||||||
app:
|
|
||||||
image: imixs/imixs-office-workflow
|
|
||||||
depends_on:
|
|
||||||
- db
|
|
||||||
environment:
|
|
||||||
TZ: "Europe/Berlin"
|
|
||||||
JAVA_OPTS: "-Dnashorn.args=--no-deprecation-warning"
|
|
||||||
MAILGATEWAY: "localhost"
|
|
||||||
POSTGRES_USER: "postgres"
|
|
||||||
POSTGRES_PASSWORD: "adminadmin"
|
|
||||||
POSTGRES_CONNECTION: "jdbc:postgresql://db/office"
|
|
||||||
METRICS_ENABLED: "true"
|
|
||||||
ports:
|
|
||||||
- "8080:8080"
|
|
||||||
- "9990:9990"
|
|
||||||
- "8787:8787"
|
|
||||||
volumes:
|
|
||||||
- ./deployments:/opt/jboss/wildfly/standalone/deployments/
|
|
||||||
|
|
||||||
# imixsadmin:
|
|
||||||
# image: imixs/imixs-admin
|
|
||||||
# ports:
|
|
||||||
# - "8888:8080"
|
|
||||||
|
|
||||||
prometheus:
|
|
||||||
image: prom/prometheus:latest
|
|
||||||
ports:
|
|
||||||
- "9090:9090"
|
|
||||||
volumes:
|
|
||||||
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
|
|
||||||
- prometheusdata:/prometheus/
|
|
||||||
|
|
||||||
|
|
||||||
grafana:
|
|
||||||
image: grafana/grafana:7.1.0
|
|
||||||
ports:
|
|
||||||
- "3000:3000"
|
|
||||||
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
prometheusdata:
|
|
||||||
dbdata:
|
|
||||||
|
|
@ -1,65 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Überprüfen, ob eine Eingabedatei angegeben wurde
|
|
||||||
if [ $# -ne 1 ]; then
|
|
||||||
echo "Verwendung: $0 input.csv"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
input_file="$1"
|
|
||||||
output_file="${input_file%.*}_clean.csv"
|
|
||||||
|
|
||||||
# Temporäre Datei für die Verarbeitung
|
|
||||||
temp_file=$(mktemp)
|
|
||||||
|
|
||||||
# Verarbeitung:
|
|
||||||
# 1. Zuerst alle echten Zeilenumbrüche (die nicht in Anführungszeichen sind) markieren
|
|
||||||
# 2. Dann Newlines innerhalb von Anführungszeichen durch Leerzeichen ersetzen
|
|
||||||
# 3. HTML-Tags entfernen
|
|
||||||
# 4. Markierte Zeilenumbrüche wiederherstellen
|
|
||||||
|
|
||||||
awk '
|
|
||||||
BEGIN { FPAT = "([^;]*)|(\"[^\"]+\")"; OFS=";"; in_quotes=0 }
|
|
||||||
{
|
|
||||||
# Zeilen zusammenfügen, wenn sie unvollständig sind (nur für Sicherheit)
|
|
||||||
if (NR == 1) {
|
|
||||||
full_line = $0
|
|
||||||
} else {
|
|
||||||
full_line = full_line " " $0
|
|
||||||
}
|
|
||||||
|
|
||||||
# Überprüfen, ob die Zeile vollständig ist (gleich viele öffnende und schließende Anführungszeichen)
|
|
||||||
quotes = gsub(/"/, "&", full_line)
|
|
||||||
if (quotes % 2 == 0) {
|
|
||||||
# Zeile ist vollständig, jetzt verarbeiten
|
|
||||||
$0 = full_line
|
|
||||||
|
|
||||||
# Newlines in jedem Feld durch Leerzeichen ersetzen
|
|
||||||
for (i=1; i<=NF; i++) {
|
|
||||||
# HTML-Tags entfernen
|
|
||||||
gsub(/<[^>]*>/, "", $i)
|
|
||||||
|
|
||||||
# Newlines und mehrfache Leerzeichen bereinigen
|
|
||||||
gsub(/\n/, " ", $i)
|
|
||||||
gsub(/ +/, " ", $i)
|
|
||||||
|
|
||||||
# Feld trimmen
|
|
||||||
sub(/^[ \t]+/, "", $i)
|
|
||||||
sub(/[ \t]+$/, "", $i)
|
|
||||||
|
|
||||||
# Feld wieder in Anführungszeichen setzen, wenn es Semikolons oder Anführungszeichen enthält
|
|
||||||
if (($i ~ /;/ || $i ~ /"/) && $i !~ /^".*"$/) {
|
|
||||||
gsub(/"/, "\"\"", $i) # Escape existing quotes
|
|
||||||
$i = "\"" $i "\""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
print
|
|
||||||
full_line = ""
|
|
||||||
}
|
|
||||||
}' "$input_file" > "$temp_file"
|
|
||||||
|
|
||||||
# Endgültige Bereinigung
|
|
||||||
mv "$temp_file" "$output_file"
|
|
||||||
|
|
||||||
echo "Bereinigte Datei wurde erstellt: $output_file"
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
id;company.name;company.address;company.zip;company.city;company.phone;company.email;company.web;company.country
|
|
||||||
1;TechSolutions GmbH;Musterstraße 123;10115;Berlin;+49 30 12345678;info@techsolutions.de;www.techsolutions.de;DE
|
|
||||||
2;Innovate AG;Hauptstraße 45;80335;München;+49 89 87654321;contact@innovate-ag.com;www.innovate-ag.com;AU
|
|
||||||
3;DataSystems Ltd.;Industriestraße 78;20095;Hamburg;+49 40 5559876;office@datasystems.de;www.datasystems.de;JP
|
|
||||||
4;WebCraft GmbH;Am Bahnhof 5;50667;Köln;+49 221 9876543;info@webcraft.de;www.webcraft.de;DE
|
|
||||||
5;CloudExperts AG;TechPark 12;70173;Stuttgart;+49 711 123457;support@cloudexperts.de;www.cloudexperts.de;DE
|
|
||||||
6;SoftwareHub GmbH;Friedrichstraße 33;60323;Frankfurt;+49 69 5551234;info@softwarehub.de;www.softwarehub.de;DE
|
|
||||||
7;DigitalWorks Ltd.;Königsallee 1;40212;Düsseldorf;+49 211 8765432;contact@digitalworks.de;www.digitalworks.de;DE
|
|
||||||
8;NetSolutions GmbH;Hansastraße 67;04109;Leipzig;+49 341 2345678;office@netsolutions.de;www.netsolutions.com;DE
|
|
||||||
9;CodeMasters AG;Rathausplatz 8;86150;Augsburg;+49 821 9876543;info@codemasters.de;www.codemasters.de;DE
|
|
||||||
10;FutureTech GmbH;Am Markt 3;38100;Braunschweig;+49 531 5559876;contact@futuretech.de;www.futuretech.de;DE
|
|
||||||
11;SmartSystems Ltd.;Ludwigstraße 15;97070;Würzburg;+49 931 1234567;support@smartsystems.de;www.smartsystems.de;CN
|
|
||||||
12;AppFactory GmbH;Poststraße 23;14467;Potsdam;+49 331 8765432;info@appfactory.de;www.appfactory.de;CN
|
|
||||||
13;DataLabs AG;Goethestraße 99;99084;Erfurt;+49 361 9876543;office@datalabs.de;www.datalabs.de;CN
|
|
||||||
14;WebInnovate GmbH;Schillerstraße 44;30159;Hannover;+49 511 5551234;contact@webinnovate.de;www.webinnovate.de;CN
|
|
||||||
15;CloudSystems Ltd.;Bahnhofstraße 77;66111;Saarbrücken;+49 681 2345678;info@cloudsystems.de;www.cloudsystems.de;CN
|
|
||||||
21;GlobalTech Solutions;125 Oxford Street;W1D 2HQ;London;+44 20 7123 4567;info@globaltech.co.uk;www.globaltech.co.uk;CN
|
|
||||||
22;InnovateX Ltd;78 Canary Wharf;E14 5AB;London;+44 20 7987 6543;contact@innovatex.com;www.innovatex.com;CN
|
|
||||||
23;DataDynamics Inc;445 Silicon Roundabout;EC2A 4NE;London;+44 20 7555 12345;office@datadynamics.com;www.datadynamics.com;FR
|
|
||||||
24;CloudSphere GmbH;TechPark Berlin 15;10115;Berlin;+49 30 9876 15432;info@cloudsphere.de;www.cloudsphere.de;FR
|
|
||||||
25;WebCraft International;200 Madison Ave;10016;New York;+1 212 555 7890;support@webcraft.com;www.webcraft.com;FR
|
|
||||||
26;DigitalFrontiers Pte Ltd;1 Raffles Place;048616;Singapore;+65 6123 4567;info@digitalfrontiers.sg;www.digitalfrontiers.sg;FR
|
|
||||||
27;TechNova SAS;55 Avenue des Champs-Élysées;75008;Paris;+33 1 42 86 53 09;contact@technova.fr;www.technova.fr;FR
|
|
||||||
28;AppFactory Ltd;88 Kingsway;WC2B 6AA;London;+44 20 7123 9876;office@appfactory.io;www.appfactory.io;FR
|
|
||||||
29;GlobalData Systems;Level 25;One Canada Square;E14 5AB;London;+44 20 7987 1234;info@globaldata.com;www.globaldata.com;FR
|
|
||||||
210;SmartSolutions AG;Bahnhofstrasse 45;8001;Zurich;+41 44 234 56 78;contact@smartsolutions.ch;www.smartsolutions.ch;FR
|
|
||||||
211;InnovationHub Ltd;22 Shoreditch High Street;E1 6PE;London;+44 20 7555 8765;support@innovationhub.co.uk;www.innovationhub.co.uk;UK
|
|
||||||
212;CyberSecure Inc;500 5th Avenue;10110;New York;+1 212 867 5309;security@cybersecure.com;www.cybersecure.com;FR
|
|
||||||
213;TechBridge Tokyo;Shinjuku Center Building 1-25-1;163-0650;Tokyo;+81 3 5321 7890;info@techbridge.jp;www.techbridge.jp;JP
|
|
||||||
214;LondonDigital Agency;15 Covent Garden;WC2E 8BE;London;+44 20 7123 5555;hello@londondigital.com;www.londondigital.com;FR
|
|
||||||
215;GlobalInnovate Group;Tower 42; 25 Old Broad Street;EC2N 1HQ;London;+44 20 7987 9999;info@globalinnovate.com;www.globalinnovate.com;FR
|
|
||||||
216;DataCraft Sydney;1 Macquarie Place;2000;Sydney;+61 2 9123 4567;au@datacraft.com;www.datacraft.com;FR
|
|
||||||
217;EuroTech Solutions;Amsterdam Towers;1011 PN;Amsterdam;+31 20 765 4321;info@eurotech.nl;www.eurotech.nl;NL
|
|
||||||
218;LondonFinTech Labs;Level 39; One Canada Square;E14 5AB;London;+44 20 7555 4321;finance@londonfintech.com;www.londonfintech.com;UK
|
|
||||||
219;CloudMasters Inc;221 Main Street;94105;San Francisco;+1 415 555 1234;support@cloudmasters.com;www.cloudmasters.com;FR
|
|
||||||
220;TechVenture Capital;8 St. James's Square;SW1Y 4JU;London;+44 20 7123 7777;invest@techventure.com;www.techventure.com;FR
|
|
||||||
|
Can't render this file because it has a wrong number of fields in line 25.
|
|
|
@ -1,91 +0,0 @@
|
||||||
ID;Name;Description;stock;price;category;subcategory;Lieferzeit;EAN
|
|
||||||
DEV001;Arduino Uno R3;The Arduino Uno R3 is a foundational microcontroller board based on the ATmega328P. It features 14 digital I/O pins, 6 analog inputs, a 16 MHz quartz crystal, USB connectivity, and a power jack. Operating voltage is 5V. It is the ideal platform for beginners in electronics and coding, widely used for prototyping, DIY projects, automation, robotics, and educational purposes. It can be programmed using the Arduino IDE.;45;22.99;Microcontroller & Development Boards;Arduino Boards;2-3 Tage;7630049200016
|
|
||||||
DEV002;Raspberry Pi 4 Model B 4GB;A high-performance single-board computer featuring a Broadcom BCM2711, quad-core Cortex-A72 (ARM v8) 64-bit SoC running at 1.5GHz and 4GB of LPDDR4-3200 SDRAM. Connectivity includes dual-band 2.4/5.0 GHz Wi-Fi, Bluetooth 5.0, Gigabit Ethernet, two USB 3.0 ports, and two micro-HDMI ports supporting dual 4K displays. Its primary use is as a low-cost desktop computer, network-attached storage (NAS) device, media center, or embedded system for industrial applications.;28;75.50;Microcontroller & Development Boards;Raspberry Pi Boards;5-7 Tage;1931000001047
|
|
||||||
DEV003;ESP32-WROOM-32 Development Board;A powerful Wi-Fi and Bluetooth-enabled microcontroller board with dual-core Xtensa LX6 processor. Features 4MB flash memory, 520KB SRAM, 34 GPIO pins, and supports various communication protocols like I2C, I2S, SPI, and UART. Ideal for IoT projects, smart home devices, and wireless applications requiring robust connectivity and processing power.;67;12.95;Microcontroller & Development Boards;ESP32/8266 Boards;3-5 Tage;8717478034021
|
|
||||||
DEV004;STM32F407VET6 Development Board;High-performance ARM Cortex-M4 based board with DSP and FPU instructions. Features 512KB flash, 192KB RAM, USB OTG, Ethernet, and multiple timers. Operating frequency up to 168MHz. Suitable for industrial control, motor control, audio processing, and advanced embedded applications requiring high computational power.;23;35.80;Microcontroller & Development Boards;Other Microcontrollers;7-10 Tage;6940541880018
|
|
||||||
DEV005;Arduino Motor Shield Rev3;Add-on shield designed to drive inductive loads such as relays, solenoids, DC and stepper motors. Features two channels that support 2A continuous current, screw terminals for easy connection, and built-in protection diodes. Perfect for robotics projects and automation systems when used with Arduino boards.;89;24.50;Microcontroller & Development Boards;Accessories;1-2 Tage;7630049200023
|
|
||||||
DEV006;Raspberry Pi 4 Official Case;Official protective case for Raspberry Pi 4 Model B with integrated GPIO access and dedicated slots for camera and display cables. Features a modular design with three plates for easy access to ports and components. Made from high-quality white plastic with colored accents.;156;8.99;Microcontroller & Development Boards;Accessories;1-2 Tage;1931000001054
|
|
||||||
DEV007;DHT22 AM2302 Digital Sensor;A pre-calibrated digital temperature and humidity sensor module. It provides a digital signal output and features a dedicated NTC for temperature measurement and a resistive humidity sensing element. Operating voltage: 3.3V - 6V. Measurement range: Humidity 0-100% RH, Temperature -40 to 80°C. Accuracy: ±2% RH and ±0.5°C. Typical applications include HVAC systems, weather stations, environmental monitoring, home automation, and data logging projects. It is easy to interface with Arduino, Raspberry Pi, and other microcontrollers.;120;9.95;Sensors & Modules;Temperature & Humidity Sensors;1-2 Tage;8591854063228
|
|
||||||
DEV008;HC-SR05 Ultrasonic Sensor;Ultrasonic distance measurement module with 2cm to 400cm non-contact range. Operating voltage: 5V DC. Provides excellent ranging accuracy with stable readings. Uses sonar principles to determine distance to objects. Ideal for obstacle avoidance robots, parking assistance systems, and liquid level measurement.;204;3.50;Sensors & Modules;Motion & Proximity Sensors;1-2 Tage;6943185501012
|
|
||||||
DEV009;PIR Motion Sensor HC-SR501;Passive infrared motion detection sensor with adjustable sensitivity and delay time. Detection range up to 7 meters with 120-degree detection angle. Operating voltage: 4.5-20V DC. Features low power consumption and reliable performance. Perfect for security systems, automatic lighting control, and energy-saving applications.;178;4.25;Sensors & Modules;Motion & Proximity Sensors;1-2 Tage;6943185501029
|
|
||||||
DEV010;BH1750 Digital Light Sensor;Digital ambient light sensor with I2C interface and 16-bit resolution. Measurement range: 1-65535 lux. Features low power consumption and high precision. No need for external components. Ideal for display backlight control in mobile devices, automatic brightness adjustment systems, and environmental light monitoring.;95;6.80;Sensors & Modules;Light, Color & Gesture Sensors;2-3 Tage;8591854063235
|
|
||||||
DEV011;APDS-9960 Gesture Sensor;Advanced gesture detection, proximity sensing, and ambient light sensor in one module. Features I2C interface with interrupt output. Can detect simple gestures (up, down, left, right) and measure proximity up to 20cm. Perfect for touchless interfaces, interactive displays, and smart home control.;63;15.75;Sensors & Modules;Light, Color & Gesture Sensors;3-5 Tage;8717478034038
|
|
||||||
DEV012;MQ-2 Gas Sensor Module;Semiconductor gas sensor for detecting LPG, propane, hydrogen, methane, alcohol, and smoke. Analog and digital output with adjustable sensitivity. Heating voltage: 5V±0.2V. Fast response and recovery time. Suitable for gas leak detection in home and industry, air quality monitoring, and safety systems.;112;8.45;Sensors & Modules;Gas, Air Quality & Pressure Sensors;2-3 Tage;6943185501036
|
|
||||||
DEV013;BMP2810 Barometric Pressure Sensor;High-precision digital barometric pressure and temperature sensor with I2C and SPI interfaces. Pressure range: 300-1100 hPa with ±1 hPa absolute accuracy. Temperature measurement with ±1.0°C accuracy. Low power consumption. Ideal for weather stations, altitude tracking, and indoor navigation.;87;9.20;Sensors & Modules;Gas, Air Quality & Pressure Sensors;2-3 Tage;8591854063242
|
|
||||||
DEV014;NEO-6M GPS Module;GPS receiver module with built-in EEPROM and ceramic antenna. Provides accurate positioning with 2.5m accuracy. Supports up to 5Hz update rate with NMEA protocol. Operating voltage: 3.3-5V. Features low power consumption and hot start capability. Perfect for navigation systems, tracking devices, and drones.;134;18.90;Sensors & Modules;GPS & Location Modules;3-5 Tage;8717478034045
|
|
||||||
DEV015;RC522 RFID Reader Module;RFID reader/writer operating at 13.56MHz with SPI interface. Reading distance up to 5cm. Supports ISO 14443A standard tags. Operating voltage: 2.5-3.3V. Ideal for access control systems, attendance tracking, payment systems, and interactive applications.;198;7.85;Sensors & Modules;RFID & NFC Modules;1-2 Tage;6943185501043
|
|
||||||
DEV016;37-in-1 Sensor Module Kit;Comprehensive sensor kit containing 37 most popular modules including temperature, humidity, motion, light, sound, and gas sensors. Comes with tutorial CD and connection diagrams. Perfect for beginners learning electronics and IoT programming. All modules are compatible with Arduino and Raspberry Pi.;45;89.99;Sensors & Modules;Sensor Kits;5-7 Tage;7630049200030
|
|
||||||
DEV017;SG90 Micro Servo Motor;TowerPro SG90 mini servo motor with 180-degree rotation range. Operating voltage: 4.8V. Stall torque: 1.8kg/cm. Comes with plastic gears and three-wire interface (power, ground, signal). Ideal for robotics, RC models, camera positioning, and small automation projects.;312;4.75;Actuators & Output;Motors;1-2 Tage;6940541880025
|
|
||||||
DEV018;28BYJ-48 Stepper Motor with Driver;Unipolar stepper motor with ULN2003 driver board. Step angle: 5.625° x 1/64 reduction ratio. Operating voltage: 5-12V DC. Provides precise position control without feedback. Perfect for 3D printers, CNC machines, automated curtains, and precision positioning systems.;167;12.50;Actuators & Output;Motors;2-3 Tage;8591854063259
|
|
||||||
DEV019;L298N Motor Driver Module;Dual H-bridge motor driver capable of driving two DC motors or one stepper motor. Operating voltage: 5-35V. Maximum current: 2A per channel. Features logic level conversion and heat sink. Ideal for robotics projects, motor control applications, and high-power driving needs.;98;8.95;Actuators & Output;Motor Drivers & Controllers;2-3 Tage;8717478034052
|
|
||||||
DEV020;5V Relay Module;Single channel relay module with optocoupler isolation. Operating voltage: 5V. Switching capacity: 10A 250V AC or 30V DC. Features status LED and standard interface for easy connection to microcontrollers. Perfect for controlling high-voltage appliances with low-voltage circuits.;245;3.25;Actuators & Output;Relays & Switches;1-2 Tage;6943185501050
|
|
||||||
DEV021;16x2 LCD Display with I2C;Blue backlight LCD display with 16 characters x 2 lines and I2C interface module. Operating voltage: 5V. Contrast adjustable. The I2C interface reduces required GPIO pins from 6 to 2. Ideal for displaying system status, sensor readings, and user interface information.;143;14.99;Actuators & Output;Displays;2-3 Tage;7630049200047
|
|
||||||
DEV022;0.96 inch OLED Display;128x64 pixel OLED display with SSD1306 driver and I2C/SPI interface. Features high contrast, wide viewing angle, and low power consumption. Operating voltage: 3.3-5V. Perfect for projects requiring compact, high-quality graphics display.;189;10.45;Actuators & Output;Displays;2-3 Tage;1931000001061
|
|
||||||
DEV023;5mm RGB LED Common Cathode;Diffused RGB LED with common cathode configuration. Operating voltage: 2.0-2.5V (Red), 3.0-3.4V (Green/Blue). Maximum current: 20mA per color. Provides full color spectrum mixing. Ideal for status indicators, mood lighting, and visual feedback in projects.;500;0.75;Actuators & Output;LEDs & Lighting;1-2 Tage;8591854063266
|
|
||||||
DEV024;Active Buzzer Module;5V active buzzer with built-in oscillator that produces continuous sound when powered. Operating voltage: 3.3-5V. Sound output: approximately 85dB. Easy to drive with microcontroller digital pin. Perfect for alarm systems, timers, and user notification applications.;287;2.10;Actuators & Output;Buzzers & Speakers;1-2 Tage;6943185501067
|
|
||||||
DEV025;1K Ohm Resistor Pack;Assortment of 100 pieces 1K ohm 1/4W metal film resistors with 1% tolerance. Temperature coefficient: 50ppm/°C. Perfect for pull-up/pull-down resistors, voltage dividers, and current limiting in various electronic circuits.;15;4.99;Components & Parts;Resistors, Capacitors, Potentiometers;1-2 Tage;8717478034069
|
|
||||||
DEV026;100uF Electrolytic Capacitor;Radial lead electrolytic capacitor with 25V voltage rating. Operating temperature: -40°C to +85°C. Low ESR and high ripple current capability. Ideal for power supply filtering, audio circuits, and general decoupling applications.;420;0.25;Components & Parts;Resistors, Capacitors, Potentiometers;1-2 Tage;6940541880032
|
|
||||||
DEV027;10K Ohm Linear Potentiometer;Rotary potentiometer with 10K ohm resistance and linear taper. Shaft length: 15mm. Power rating: 0.5W. Features smooth rotation and reliable performance. Perfect for volume control, brightness adjustment, and parameter tuning.;195;1.20;Components & Parts;Resistors, Capacitors, Potentiometers;1-2 Tage;8591854063273
|
|
||||||
DEV028;2N2222A NPN Transistor;General purpose NPN bipolar junction transistor in TO-92 package. Collector current: 800mA max. Collector-emitter voltage: 40V max. Gain bandwidth: 250MHz. Ideal for switching and amplification applications in various electronic circuits.;876;0.35;Components & Parts;Transistors & MOSFETs;1-2 Tage;7630049200054
|
|
||||||
DEV029;IRFZ44N N-Channel MOSFET;Power MOSFET with low on-resistance and fast switching speed. Drain-source voltage: 55V. Continuous drain current: 49A. TO-220 package. Perfect for motor control, power switching, and high-current applications.;321;2.15;Components & Parts;Transistors & MOSFETs;1-2 Tage;1931000001078
|
|
||||||
DEV030;1N4007 Rectifier Diode;General purpose rectifier diode with 1000V maximum repetitive reverse voltage and 1A average forward current. DO-41 package. Ideal for power supply rectification, reverse polarity protection, and general purpose switching.;650;0.15;Components & Parts;Diodes & LEDs;1-2 Tage;8717478034076
|
|
||||||
DEV031;5mm Green LED;Diffused green LED with 20mA forward current and 2.1V forward voltage. Viewing angle: 30 degrees. Luminous intensity: 5000-8000 mcd. Perfect for status indicators, panel lights, and visual feedback in electronic projects.;1200;0.20;Components & Parts;Diodes & LEDs;1-2 Tage;6943185501074
|
|
||||||
DEV032;6x6mm Tactile Switch;Momentary push button switch with through-hole mounting. Operating force: 160±50gf. Contact resistance: <50mΩ. Life expectancy: 100,000 cycles. Ideal for user input, reset buttons, and control interfaces.;890;0.10;Components & Parts;Buttons & Switches;1-2 Tage;8591854063280
|
|
||||||
DEV033;Toggle Switch SPDT;Single pole double throw toggle switch with on-on configuration. Rating: 6A 125V AC / 3A 250V AC. Panel mount design with nut and washer. Perfect for power switching, mode selection, and circuit configuration.;134;2.95;Components & Parts;Buttons & Switches;2-3 Tage;6940541880049
|
|
||||||
DEV034;Jumper Wires Male-to-Male;Bundle of 120 pieces 20cm male-to-male jumper wires in multiple colors. 0.1 pitch. Made with high-quality Dupont connectors. Perfect for breadboard connections, prototyping, and wiring Arduino projects.;45;6.99;Components & Parts;Wires, Cables & Connectors;1-2 Tage;7630049200061
|
|
||||||
DEV035;USB Type B Cable;1.5 meter USB 2.0 Type A to Type B cable with gold-plated connectors. Data transfer speed up to 480Mbps. 28AWG power conductors. Perfect for connecting Arduino boards, printers, and other devices with Type B接口.;178;7.50;Components & Parts;Wires, Cables & Connectors;1-2 Tage;1931000001085
|
|
||||||
DEV036;400-Point Solderless Breadboard;High-quality solderless breadboard with 400 tie points. Features two power rails and 63 rows of interconnected terminals. Adhesive backing for secure mounting. Maximum voltage: 300V. Ideal for circuit prototyping and testing.;67;8.25;Components & Parts;Breadboards & Prototyping;1-2 Tage;8717478034083
|
|
||||||
DEV037;Breadboard Jumper Wire Kit;Kit containing 140 pieces of pre-cut and stripped jumper wires in various lengths and colors. Includes male-to-male, male-to-female, and female-to-female types. Organized in convenient storage box. Perfect for breadboard prototyping.;92;12.99;Components & Parts;Breadboards & Prototyping;1-2 Tage;6943185501081
|
|
||||||
DEV038;12V 2A Power Supply;Switching power adapter with 12V DC output and 2A maximum current. Input: 100-240V AC. Comes with 5.5mm x 2.1mm barrel jack connector. Short circuit and overvoltage protection. Ideal for powering Arduino projects, LED strips, and various electronics.;58;14.95;Power & Battery;Power Supplies;3-5 Tage;8591854063297
|
|
||||||
DEV039;5V 3A USB Power Supply;High-current USB power supply with 5V 3A output. Features built-in USB Type-A port and overcurrent protection. Input: 100-240V AC. Perfect for powering Raspberry Pi, high-power USB devices, and charging applications.;47;11.50;Power & Battery;Power Supplies;2-3 Tage;6940541880056
|
|
||||||
DEV040;4xAA Battery Holder;Plastic battery holder for 4 AA batteries with series connection providing 6V output. Features wire leads with stripped ends and on/off switch. Secure battery closure. Perfect for portable projects and backup power.;124;3.75;Power & Battery;Battery Holders;1-2 Tage;7630049200078
|
|
||||||
DEV041;TP4056 Lithium Charger Module;Single cell lithium battery charging module with 1A maximum charge current. Features charging status indicators and protection circuits. Input: 5V USB. Supports 3.7V Li-ion and LiPo batteries. Perfect for portable projects.;216;4.25;Power & Battery;Charging Circuits;2-3 Tage;1931000001092
|
|
||||||
DEV042;LM2596 DC-DC Buck Converter;Adjustable step-down voltage regulator module with 3A maximum output current. Input voltage: 4.5-40V. Output voltage: 1.5-35V adjustable. Efficiency up to 92%. Features overheat and short circuit protection.;189;5.95;Power & Battery;Voltage Regulators & Converters;2-3 Tage;8717478034090
|
|
||||||
DEV043;60W Soldering Station;Temperature controlled soldering station with 60W power and adjustable temperature range 200-480°C. Features ceramic heating element, sleep mode, and digital display. Comes with soldering iron stand and sponge. Perfect for electronics repair and prototyping.;34;49.99;Tools & Equipment;Soldering Equipment;5-7 Tage;6943185501098
|
|
||||||
DEV044;Digital Multimeter DT9205A;3-1/2 digit digital multimeter with LCD display. Measures AC/DC voltage, current, resistance, capacitance, frequency, and temperature. Features diode test, continuity buzzer, and data hold. Comes with test leads and carrying case.;29;38.50;Tools & Equipment;Multimeters & Test Equipment;3-5 Tage;8591854063303
|
|
||||||
DEV045;65-Piece Screwdriver Set;Precision screwdriver set with 65 pieces including various Phillips, flat, Torx, and hex bits. Magnetic tips and comfortable handle. Organized in durable carrying case. Perfect for electronics repair, smartphone disassembly, and精密 work.;56;24.95;Tools & Equipment;Tool Kits;2-3 Tage;6940541880063
|
|
||||||
DEV046;Plastic Project Enclosure 160x100x60mm;Plastic electronic project box with dimensions 160x100x60mm. Features mounting posts for PCBs, ventilation slots, and removable lid. Material: ABS plastic. Perfect for housing electronic projects and prototypes.;78;9.75;Tools & Equipment;Enclosures & Boxes;3-5 Tage;7630049200085
|
|
||||||
DEV047;Arduino Nano Every;Compact board based on the ATMega4809 with 20MHz operating frequency. Features 48KB flash, 6KB SRAM, and 22 GPIO pins. Compatible with Arduino Nano footprint. Perfect for space-constrained projects requiring Arduino compatibility.;91;18.50;Microcontroller & Development Boards;Arduino Boards;3-5 Tage;7630049200092
|
|
||||||
DEV048;Raspberry Pi Pico W;Microcontroller board with RP2040 chip and wireless connectivity. Features 264KB SRAM, 2MB flash, and 30 GPIO pins. Supports MicroPython and C/C++. Built-in Wi-Fi and Bluetooth. Ideal for IoT projects and wireless applications.;167;9.95;Microcontroller & Development Boards;Raspberry Pi Boards;2-3 Tage;1931000001108
|
|
||||||
DEV049;ESP32-CAM Development Board;ESP32 module with OV2640 camera and microSD card slot. Features 4MB flash, 520KB SRAM, and supports Wi-Fi and Bluetooth. Provides video streaming and image capture capabilities. Perfect for security cameras and IoT vision applications.;124;15.75;Microcontroller & Development Boards;ESP32/8266 Boards;3-5 Tage;8717478034106
|
|
||||||
DEV050;ATtiny85 Development Board;Compact development board based on ATtiny85 microcontroller. Features 8KB flash, 512B SRAM, and 6 GPIO pins. Operating voltage: 5V. Perfect for simple projects requiring minimal I/O and small form factor.;205;6.25;Microcontroller & Development Boards;Other Microcontrollers;2-3 Tage;6943185501104
|
|
||||||
DEV051;Arduino Ethernet Shield;Network connectivity shield for Arduino with W5500 Ethernet controller. Supports TCP/IP protocols and provides SD card slot. Operating voltage: 5V. Perfect for network-connected projects and data logging.;76;32.99;Microcontroller & Development Boards;Accessories;4-6 Tage;8591854063310
|
|
||||||
DEV052;Raspberry Pi Official Power Supply;Official 15.3W USB-C power supply for Raspberry Pi 4. Output: 5.1V DC, 3A. Features noise filtering and overcurrent protection. Includes 1.5m USB-C cable. Ensures stable power for Raspberry Pi operation.;142;11.99;Microcontroller & Development Boards;Accessories;2-3 Tage;6940541880070
|
|
||||||
DEV053;DS18B20 Waterproof Temperature Sensor;Digital temperature sensor with 1-wire interface and waterproof stainless steel probe. Measurement range: -55°C to +125°C with ±0.5°C accuracy. 1-meter cable length. Perfect for liquid temperature measurement, environmental monitoring, and industrial applications.;188;8.95;Sensors & Modules;Temperature & Humidity Sensors;2-3 Tage;7630049200108
|
|
||||||
DEV054;HC-SR501 PIR Motion Sensor;Passive infrared motion detector with adjustable time and sensitivity. Detection range: 7 meters with 120° angle. Operating voltage: 4.5-20V DC. Features low power consumption. Ideal for security systems and automatic lighting.;156;4.50;Sensors & Modules;Motion & Proximity Sensors;1-2 Tage;1931000001115
|
|
||||||
DEV055;VL53L0X Laser Distance Sensor;Time-of-flight laser ranging sensor with 2m measurement range and 1mm resolution. I2C interface. Operating voltage: 2.6-3.5V. Features high accuracy and immune to ambient light. Perfect for gesture recognition and proximity sensing.;97;14.25;Sensors & Modules;Motion & Proximity Sensors;3-5 Tage;8717478034113
|
|
||||||
DEV056;TCS34725 Color Sensor;RGB color light sensor with IR filter and white LED. I2C interface with interrupt output. Provides clear, red, green, blue, and lux measurements. Perfect for color sorting, ambient light sensing, and display calibration.;84;13.75;Sensors & Modules;Light, Color & Gesture Sensors;2-3 Tage;6943185501111
|
|
||||||
DEV057;VCNL4040 Proximity Sensor;Integrated proximity and ambient light sensor with I2C interface. Proximity range: 0-200mm. Features interrupt function and low power consumption. Perfect for touchless interfaces and presence detection.;119;9.80;Sensors & Modules;Light, Color & Gesture Sensors;2-3 Tage;8591854063327
|
|
||||||
DEV058;MQ-135 Air Quality Sensor;Semiconductor sensor for detecting harmful gases like NH3, NOx, alcohol, benzene, and CO2. Analog output with adjustable sensitivity. Heating voltage: 5V±0.1V. Suitable for air quality monitoring and environmental detection.;145;7.25;Sensors & Modules;Gas, Air Quality & Pressure Sensors;2-3 Tage;6940541880087
|
|
||||||
DEV059;BME280 Environmental Sensor;Integrated environmental sensor measuring temperature, humidity, and barometric pressure. I2C/SPI interfaces. Operating voltage: 1.8-3.6V. Low power consumption. Ideal for weather stations and environmental monitoring.;132;14.50;Sensors & Modules;Gas, Air Quality & Pressure Sensors;3-5 Tage;7630049200115
|
|
||||||
DEV060;U-blox NEO-M8N GPS Module;High-performance GPS module with 72 channels and 2.5m accuracy. Supports GPS, GLONASS, and BeiDou systems. Update rate: up to 10Hz. Perfect for drones, navigation systems, and precision tracking.;89;26.95;Sensors & Modules;GPS & Location Modules;4-6 Tage;1931000001122
|
|
||||||
DEV061;PN532 NFC RFID Module;NFC/RFID reader/writer supporting ISO 14443A/B, ISO 18092, and FeliCa protocols. Operating frequency: 13.56MHz. Interfaces: I2C, SPI, HSU. Reading distance: up to 5cm. Ideal for contactless payment and access control.;107;18.75;Sensors & Modules;RFID & NFC Modules;3-5 Tage;8717478034120
|
|
||||||
DEV062;Arduino Sensor Kit;Complete sensor kit containing 37 modules compatible with Arduino. Includes tutorials and code examples. Covers basic to advanced sensors. Perfect for educational purposes and learning electronics.;68;79.99;Sensors & Modules;Sensor Kits;5-7 Tage;6943185501128
|
|
||||||
DEV063;NEMA 17 Stepper Motor;Bipolar stepper motor with 1.8° step angle and 42mm frame size. Holding torque: 40Ncm. Current: 1.2A per phase. 4-wire connection. Perfect for 3D printers, CNC machines, and precision positioning systems.;45;28.95;Actuators & Output;Motors;4-6 Tage;8591854063334
|
|
||||||
DEV064;L293D Motor Driver IC;Quadruple half-H driver for bidirectional DC motor control. Operating voltage: 4.5-36V. Output current: 600mA per channel. DIP-16 package. Perfect for controlling small motors and solenoids.;213;3.45;Actuators & Output;Motor Drivers & Controllers;1-2 Tage;6940541880094
|
|
||||||
DEV065;5V 4-Channel Relay Module;4-channel relay module with optocoupler isolation and status LEDs. Operating voltage: 5V. Switching capacity: 10A 250V AC per channel. Features screw terminals and standard control interface.;124;15.50;Actuators & Output;Relays & Switches;2-3 Tage;7630049200122
|
|
||||||
DEV066;20x4 LCD Display with I2C;Large LCD display with 20 characters x 4 lines and I2C interface. Blue backlight with adjustable contrast. Operating voltage: 5V. Perfect for projects requiring extensive text display.;87;19.95;Actuators & Output;Displays;3-5 Tage;1931000001139
|
|
||||||
DEV067;1.3 inch IPS LCD Display;1.3 inch IPS display with 240x240 resolution and ST7789 driver. SPI interface with 65K colors. Operating voltage: 3.3V. Features high brightness and wide viewing angle. Perfect for graphics and GUI applications.;134;16.75;Actuators & Output;Displays;3-5 Tage;8717478034137
|
|
||||||
DEV068;WS2812B RGB LED Strip;Addressable RGB LED strip with 30 LEDs per meter. Each LED individually controllable via single-wire protocol. Operating voltage: 5V. Perfect for decorative lighting, art installations, and visual effects.;78;18.50;Actuators & Output;LEDs & Lighting;2-3 Tage;6943185501135
|
|
||||||
DEV069;Piezo Buzzer Element;Passive piezo buzzer without internal oscillator. Requires external driver circuit. Operating voltage: 3-20V. Resonant frequency: 4kHz. Compact size. Ideal for custom tone generation and audio projects.;345;1.25;Actuators & Output;Buzzers & Speakers;1-2 Tage;8591854063341
|
|
||||||
DEV070;Assorted Resistor Kit;Comprehensive resistor kit with 1000 pieces covering values from 10 ohm to 1M ohm. 1/4W metal film with 1% tolerance. Organized in storage box with value labels. Perfect for electronics projects and repairs.;28;29.99;Components & Parts;Resistors, Capacitors, Potentiometers;2-3 Tage;6940541880100
|
|
||||||
DEV071;100nF Ceramic Capacitor;Multilayer ceramic capacitor with 100nF capacitance and 50V rating. X7R dielectric material. Through-hole design. Ideal for decoupling, filtering, and timing applications.;1200;0.15;Components & Parts;Resistors, Capacitors, Potentiometers;1-2 Tage;7630049200139
|
|
||||||
DEV072;200K Logarithmic Potentiometer;Audio taper potentiometer with 100K ohm resistance. Shaft length: 20mm. Power rating: 0.5W. Smooth rotation with logarithmic response. Perfect for volume controls and audio applications.;167;2.25;Components & Parts;Resistors, Capacitors, Potentiometers;1-2 Tage;1931000001146
|
|
||||||
DEV073;BC547 NPN Transistor;General purpose NPN transistor in TO-92 package. Collector current: 100mA max. Collector-emitter voltage: 45V. DC current gain: 110-800. Ideal for amplification and switching applications.;954;0.25;Components & Parts;Transistors & MOSFETs;1-2 Tage;8717478034144
|
|
||||||
DEV074;IRF540N N-Channel MOSFET;Power MOSFET with 100V drain-source voltage and 33A continuous drain current. Low on-resistance: 44mΩ. TO-220 package. Perfect for high-power switching and motor control applications.;189;3.75;Components & Parts;Transistors & MOSFETs;1-2 Tage;6943185501142
|
|
||||||
DEV075;1N4148 Switching Diode;Fast switching diode with 100V reverse voltage and 200mA forward current. Switching speed: 4ns. DO-35 package. Ideal for high-speed switching, protection circuits, and signal processing.;875;0.12;Components & Parts;Diodes & LEDs;1-2 Tage;8591854063358
|
|
||||||
DEV076;5mm Red LED;Standard red LED with 20mA forward current and 2.0V forward voltage. Viewing angle: 30 degrees. Luminous intensity: 2000-4000 mcd. Perfect for indicators and visual feedback.;1500;0.18;Components & Parts;Diodes & LEDs;1-2 Tage;6940541880117
|
|
||||||
DEV077;12mm Push Button Switch;Momentary push button switch with LED illumination. Operating voltage: 12V DC. Contact rating: 3A 125V AC. Panel mount design. Available in multiple colors. Perfect for control panels and user interfaces.;234;2.95;Components & Parts;Buttons & Switches;2-3 Tage;7630049200146
|
|
||||||
DEV078;DIP Switch 8 Position;8-position dual in-line package switch with through-hole mounting. Rating: 50mA 24V DC. Compact size. Ideal for configuration settings and mode selection in electronic circuits.;187;1.85;Components & Parts;Buttons & Switches;1-2 Tage;1931000001153
|
|
||||||
DEV079;Jumper Wires Female-to-Female;Bundle of 120 pieces 20cm female-to-female jumper wires in multiple colors. 0.1 pitch. High-quality Dupont connectors. Perfect for connecting modules and sensors to development boards.;67;6.99;Components & Parts;Wires, Cables & Connectors;1-2 Tage;8717478034151
|
|
||||||
DEV080;Micro USB Cable;1-meter Micro USB to USB Type-A cable with gold-plated connectors. Data transfer and charging capable. 28AWG power conductors. Perfect for connecting various electronic devices and charging.;245;5.50;Components & Parts;Wires, Cables & Connectors;1-2 Tage;6943185501159
|
|
||||||
DEV081;830-Point Breadboard;Large solderless breadboard with 830 tie points. Features four power rails and 63 rows of terminals. Adhesive backing. Maximum voltage: 300V. Ideal for complex circuit prototyping.;54;12.95;Components & Parts;Breadboards & Prototyping;2-3 Tage;8591854063365
|
|
||||||
DEV082;Breadboard Power Supply Module;3.3V/5V breadboard power supply module with USB input. Maximum output current: 700mA. Features LED indicators and on/off switch. Perfect for providing stable power to breadboard projects.;138;8.45;Components & Parts;Breadboards & Prototyping;2-3 Tage;6940541880124
|
|
||||||
DEV083;9V 1A Power Supply;Wall adapter with 9V DC output and 1A maximum current. Input: 100-240V AC. 5.5mm x 2.1mm barrel jack. Short circuit protection. Ideal for powering effects pedals and various electronics.;89;9.99;Power & Battery;Power Supplies;2-3 Tage;7630049200153
|
|
||||||
DEV084;USB-C Power Delivery Module;USB-C power delivery module with adjustable voltage output (5V, 9V, 12V, 15V, 20V). Maximum power: 100W. Features digital display and multiple protection circuits. Perfect for modern power requirements.;76;22.50;Power & Battery;Power Supplies;3-5 Tage;1931000001160
|
|
||||||
DEV085;18650 Battery Holder;Dual 18650 battery holder with series/parallel switch. Provides 3.7V (parallel) or 7.4V (series) output. Features built-in protection circuit and power switch. Perfect for lithium battery projects.;112;6.95;Power & Battery;Battery Holders;2-3 Tage;8717478034168
|
|
||||||
DEV086;TP5100 2A Lithium Charger;Dual lithium battery charger module with 2A maximum charge current. Supports 3.7V Li-ion and LiPo batteries. Input: 5-12V. Features charging status indicators. Perfect for high-capacity battery charging.;98;7.25;Power & Battery;Charging Circuits;2-3 Tage;6943185501166
|
|
||||||
DEV087;LM317 Adjustable Voltage Regulator;Adjustable linear voltage regulator with 1.5A output current. Output voltage: 1.25-37V. Features overcurrent and thermal protection. TO-220 package. Perfect for custom power supply designs.;167;2.95;Power & Battery;Voltage Regulators & Converters;1-2 Tage;8591854063372
|
|
||||||
DEV088;Temperature Controlled Soldering Iron;60W temperature controlled soldering iron with adjustable temperature 200-450°C. Features ceramic heater and quick heat-up time. Includes stand and spare tips. Perfect for basic soldering tasks.;45;35.99;Tools & Equipment;Soldering Equipment;3-5 Tage;6940541880131
|
|
||||||
DEV089;Auto-Ranging Multimeter;True RMS auto-ranging digital multimeter with 6000 counts. Measures AC/DC voltage, current, resistance, capacitance, frequency, and temperature. Features backlit display and data hold.;38;59.95;Tools & Equipment;Multimeters & Test Equipment;4-6 Tage;7630049200160
|
|
||||||
|
|
||||||
|
|
|
@ -1,146 +0,0 @@
|
||||||
ID;Name; Description;stock;price;category;Lieferzeit;EAN
|
|
||||||
579;Wandkonsole für LP-65 bis LP-375;Wandhalterung für Pooltauscher LP-65 bis LP375;1;17,9;Wandhalterung;;2091465262179
|
|
||||||
587;LP-175VA 50kW;Hochwertiger Edelstahl-Wärmetauscher für Schwimmbad- und Poolbezeizung. Ideal in Verbindung mit Solaranlagen bis 50kW.;1;229,9;Pool Wärmetauscher > Rohrförmig aus Edelstahl;Die Lieferzeit beträgt 10 bis 15 Tage;5286196620740
|
|
||||||
727;MUSTERARTIKEL;Hochwertiger Edelstahl-Wärmetauscher für Schwimmbad- und Poolbezeizung. Ideal in Verbindung mit Solaranlagen bis 50kW.;0;119,9;Pool Wärmetauscher;;1282898648918
|
|
||||||
737;LP-65VA 20kW;Hochwertiger Edelstahl-Wärmetauscher für Schwimmbadbezeizung.;1;189,9;Pool Wärmetauscher > Rohrförmig aus Edelstahl;;3879177514583
|
|
||||||
741;LP-100VA 30kW;Hochwertiger Edelstahl-Wärmetauscher für Schwimmbadbezeizung.;1;199,9;Pool Wärmetauscher > Rohrförmig aus Edelstahl;;9055773261265
|
|
||||||
742;LP-230VA 70kW;Hochwertiger Edelstahl-Wärmetauscher für Schwimmbadbezeizung.;1;289,9;Pool Wärmetauscher > Rohrförmig aus Edelstahl;;1150028980156
|
|
||||||
743;LP-325VA 95kW;Hochwertiger Edelstahl-Wärmetauscher für Schwimmbadbezeizung.;0;328,9;Pool Wärmetauscher > Rohrförmig aus Edelstahl;;5029747624534
|
|
||||||
745;LP-375VA 115kW;Hochwertiger Edelstahl-Wärmetauscher für Schwimmbadbeheizung.;0;439,9;Pool Wärmetauscher > Rohrförmig aus Edelstahl;;9883725074294
|
|
||||||
747;Edelstahl Pool Wärmetauscher Typ SP-100-K;Hochwertiger Plattenwärmetauscher aus Edelstahl zur Schwimmbadbeheizung. Geeignet für gechlortes Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen.;1;199,9;Pool Wärmetauscher;;1773215338624
|
|
||||||
1000;Abgaswärmetauscher AWT-7/150VA;Abgaswärmetauscher mit Edelstahl Tauscherspirale.Dieser Tauscher wurde speziell für Kamin und Kachelöfen entwickelt.;1;279,9;Abgaswärmetauscher;;4877111475333
|
|
||||||
1002;Abgaswärmetauscher AWT-7/150-Titan;Abgaswärmetauscher mit titanlegierter Edelstahl Tauscherspirale entwickelt für höchste Temperatur- und Feuchtebelastungen. Dieser Tauscher ist für extreme Langlebigkeit und Beständigkeit ausgelegt.;1;285,9;Abgaswärmetauscher;;9680811891595
|
|
||||||
1003;Abgastauscher Regelung Typ ATR-4;Abgastauscher Regelung für eine optimale Ausnutzung und Energieeinsparung in Verbindung mit unseren Abgaswärmetauschern.;1;199,9;Abgaswärmetauscher;;8567222480604
|
|
||||||
1004;Abgastauscher Regelung Typ ATR-6;Abgastauscher Regelung für eine optimale Ausnutzung und Energieeinsparung. Diese Regelung unterstützt durch einen zusätzlichen Sensor die Ansteuerung eines zweiten Heizkreises.;0;239,9;Abgaswärmetauscher;;5686660235911
|
|
||||||
1007;Kehrbesenset für AWT-7;Kehrbesenset für Abgastauscher Reihe AWT-7;1;39,9;Abgaswärmetauscher;;1941032767914
|
|
||||||
1046;Edelstahl Plattenwärmetauscher Typ B3-12A-12;"Edelstahl Plattenwärmetauscher für Pflanzenölvorwärmung bei PKW und LKW; Heizkreistrennungen und Solaranlagen";1;69,9;Plattenwärmetauscher > B3-12 Baureihe / gelötet;;1438856474369
|
|
||||||
1048;Edelstahl Plattenwärmetauscher Typ B3-12A-12 mit Dämmschale;"Edelstahl Plattenwärmetauscher für Pflanzenölvorwärmung bei PKW und LKW; Heizkreistrennungen und Solaranlagen";1;74,9;Plattenwärmetauscher > B3-12 Baureihe / gelötet;;3500722785805
|
|
||||||
1050;Edelstahl Plattenwärmetauscher Typ B3-12A-20;"Edelstahl Plattenwärmetauscher für Pflanzenölvorwärmung bei PKW und LKW; Heizkreistrennungen und Solaranlagen";1;79,9;Plattenwärmetauscher > B3-12 Baureihe / gelötet;;7887280730963
|
|
||||||
1051;Edelstahl Plattenwärmetauscher Typ B3-12A-30;Edelstahl Plattenwärmetauscher für Pflanzenölvorwärmung bei PKW und LKW;1;99,9;Plattenwärmetauscher > B3-12 Baureihe / gelötet;;4170125892616
|
|
||||||
1052;Edelstahl Plattenwärmetauscher Typ B3-12A-50;Edelstahl Plattenwärmetauscher für Pflanzenölvorwärmung bei PKW und LKW;0;139,9;Plattenwärmetauscher > B3-12 Baureihe / gelötet;;6340907128242
|
|
||||||
1053;Edelstahl Plattenwärmetauscher Typ B3-12A-50 mit Dämmschale;Edelstahl Plattenwärmetauscher für Pflanzenölvorwärmung bei PKW und LKW;0;149,9;Plattenwärmetauscher > B3-12 Baureihe / gelötet;;267078141619
|
|
||||||
1054;Edelstahl Plattenwärmetauscher Typ B3-12A-30 mit Dämmschale;Edelstahl Plattenwärmetauscher für Pflanzenölvorwärmung bei PKW und LKW;1;104,9;Plattenwärmetauscher > B3-12 Baureihe / gelötet;;963840013930
|
|
||||||
1055;Edelstahl Plattenwärmetauscher Typ B3-12A-20 mit Dämmschale;Edelstahl Plattenwärmetauscher für Pflanzenölvorwärmung bei PKW und LKW;1;84,9;Plattenwärmetauscher > B3-12 Baureihe / gelötet;;3918763032312
|
|
||||||
1056;Edelstahl Plattenwärmetauscher Typ B3-23A-30;Edelstahl Plattenwärmetauscher für Pflanzenölvorwärmung bei PKW und LKW;1;184,9;Plattenwärmetauscher > B3-23 Baureihe / gelötet;;1824359393441
|
|
||||||
1057;Edelstahl Plattenwärmetauscher Typ B3-23A-50;Edelstahl Plattenwärmetauscher für Pflanzenölvorwärmung bei PKW und LKW;1;224,9;Plattenwärmetauscher > B3-23 Baureihe / gelötet;;9839666739792
|
|
||||||
1058;Edelstahl Plattenwärmetauscher Typ B3-23A-30 mit Dämmschale;Edelstahl Plattenwärmetauscher für Pflanzenölvorwärmung bei PKW und LKW;1;194,9;Plattenwärmetauscher > B3-23 Baureihe / gelötet;;6501687247749
|
|
||||||
1060;Edelstahl Plattenwärmetauscher Typ B3-23A-50 mit Dämmschale;Edelstahl Plattenwärmetauscher für Pflanzenölvorwärmung bei PKW und LKW;1;254,9;Plattenwärmetauscher > B3-23 Baureihe / gelötet;;9496081864722
|
|
||||||
1076;Wandbefestigung für Plattentauscher M3-54;;1;35,9;Wandhalterung;;3486711401836
|
|
||||||
1077;Wandkonsole für Plattentauscher M4-56;;1;35,9;Wandhalterung;;7097613907430
|
|
||||||
1078;Dämmschale für Plattentauscher M3-S;;1;79,9;Isolierung für Wärmetauscher;;8301096575048
|
|
||||||
1079;Edelstahl Plattenwärmetauscher Typ M5-11-10;"Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für Kühlung von Bierwürze; Milchkühlung sowie als Zwischenkreistauscher für Sole und Grundwasser Wärmepumpen.";1;899;Plattenwärmetauscher > M5-11 Baureihe / zerlegbar;;6639325474032
|
|
||||||
1080;Edelstahl Plattenwärmetauscher Typ M5-11-30;"Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für Kühlung von Bierwürze; Milchkühlung sowie als Zwischenkreistauscher für Sole und Grundwasser Wärmepumpen.";1;1399;Plattenwärmetauscher > M5-11 Baureihe / zerlegbar;;5564792899662
|
|
||||||
1081;Edelstahl Plattenwärmetauscher Typ M6-19-10;;1;1090;Plattenwärmetauscher > M6-19 Baureihe / zerlegbar;;9921752342730
|
|
||||||
1082;Edelstahl Plattenwärmetauscher Typ M6-19-20;;1;1680;Plattenwärmetauscher > M6-19 Baureihe / zerlegbar;;7107438924403
|
|
||||||
1083;Edelstahl Plattenwärmetauscher Typ M7-17-10;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für die Poolerwärmung;0;995;Plattenwärmetauscher > M7-17 Baureihe / zerlegbar;;2327483415120
|
|
||||||
1084;Edelstahl Plattenwärmetauscher Typ M7-17-20;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für die Poolerwärmung;1;1295;Plattenwärmetauscher > M7-17 Baureihe / zerlegbar;;6209821998907
|
|
||||||
1085;Edelstahl Plattenwärmetauscher Typ M4-56-10;;1;289,9;Plattenwärmetauscher > M4-56 Baureihe / zerlegbar;;7883295446066
|
|
||||||
1088;Edelstahl Plattenwärmetauscher Typ M4-56-20;Edelstahl Plattenwärmetauscher geeignet für Anwendungen mit geschlossenen Kreisläufen wie z.B. Heizungsanwendungen;1;339,9;Plattenwärmetauscher > M4-56 Baureihe / zerlegbar;;7670612815694
|
|
||||||
1170;Wandkonsole für Plattentauscher B3-12-xx;Wandhalterung für eine schnelle Montage mit praktischem Klettverschlußband.;1;18,9;Wandhalterung;;2837107354495
|
|
||||||
1181;LP-375VA 115kW mit Wärmedämmung;Hochwertiger Schwimmbad-Wärmetauscher aus Edelstahl für Schwimmbadbeheizung mit Wärmedämmung.;0;459;Pool Wärmetauscher > Rohrförmig aus Edelstahl;;8247903213713
|
|
||||||
1188;Wandkonsole für isolierte Pooltauscher LP-xx;Wandhalterung für eine schnelle Montage mit praktischem Klettverschlußband.;1;19,9;Wandhalterung;;5234087663802
|
|
||||||
1191;LP-65VA 20kW mit Wärmedämmung;Hochwertiger Schwimmbad-Wärmetauscher aus Edelstahl für Schwimmbadbeheizung mit Wärmedämmung.;1;219,9;Pool Wärmetauscher > Rohrförmig aus Edelstahl;;938364240247
|
|
||||||
1194;LP-100VA 30kW mit Wärmedämmung;Hochwertiger Schwimmbad-Wärmetauscher aus Edelstahl für Schwimmbadbeheizung mit Wärmedämmung.;1;239,9;Pool Wärmetauscher > Rohrförmig aus Edelstahl;;450118214736
|
|
||||||
1196;LP-175VA 50kW mit Wärmedämmung;Hochwertiger Schwimmbad-Wärmetauscher aus Edelstahl für Schwimmbadbeheizung mit Wärmedämmung.;1;259,9;Pool Wärmetauscher > Rohrförmig aus Edelstahl;;655296358115
|
|
||||||
1198;LP-230VA 70kW mit Wärmedämmung;Hochwertiger Schwimmbad-Wärmetauscher aus Edelstahl für Schwimmbadbeheizung mit Wärmedämmung.;1;329,9;Pool Wärmetauscher > Rohrförmig aus Edelstahl;;8611986118980
|
|
||||||
1200;LP-325VA 95kW mit Wärmedämmung;Hochwertiger Schwimmbad-Wärmetauscher aus Edelstahl für Schwimmbadbeheizung mit Wärmedämmung.;0;389,9;Pool Wärmetauscher > Rohrförmig aus Edelstahl;;9005775281402
|
|
||||||
1204;Dämmschale für Plattentauscher M3-M;Hochwertige Dämmschale für Plattentauscher in verschiedenen Größen;1;89,9;Isolierung für Wärmetauscher;;5367012957872
|
|
||||||
1205;Dämmschale für Plattentauscher M3-L;Hochwertige Dämmschale für Plattentauscher in verschiedenen Größen;1;99,9;Isolierung für Wärmetauscher;;6854117854742
|
|
||||||
1206;Dämmschale für Plattentauscher SP-S;Hochwertige Dämmschale für Plattentauscher in verschiedenen Größen;1;79,9;Isolierung für Wärmetauscher;;1382809012286
|
|
||||||
1207;Dämmschale für Plattentauscher SP-M;Hochwertige Dämmschale für Plattentauscher in verschiedenen Größen;1;89,9;Isolierung für Wärmetauscher;;5461960384619
|
|
||||||
1252;Dämmschale für Plattentauscher M1-S;Hochwertige Dämmschale für Plattentauscher in verschiedenen Größen;1;79,9;Isolierung für Wärmetauscher;;3625664059934
|
|
||||||
1253;Dämmschale für Plattentauscher M1-M;Hochwertige Dämmschale für Plattentauscher in verschiedenen Größen;1;89,9;Isolierung für Wärmetauscher;;4894233116968
|
|
||||||
1254;Dämmschale für Plattentauscher M1-L;Hochwertige Dämmschale für Plattentauscher in verschiedenen Größen;1;99,9;Isolierung für Wärmetauscher;;8183922928019
|
|
||||||
1257;Wandbefestigung für Plattentauscher M1-53;Hochwertige Dämmschale für Plattentauscher in verschiedenen Größen;1;34,9;Wandhalterung;;8183313115592
|
|
||||||
1260;Dämmschale für Plattentauscher M4-L;Hochwertige Dämmschale für Plattentauscher in verschiedenen Größen;1;99,9;Isolierung für Wärmetauscher;;3057639268476
|
|
||||||
1261;Dämmschale für Plattentauscher M4-M;Hochwertige Dämmschale für Plattentauscher in verschiedenen Größen;1;89,9;Isolierung für Wärmetauscher;;1974896712011
|
|
||||||
1263;Edelstahl Plattenwärmetauscher Typ M4-56-30;Edelstahl Plattenwärmetauscher geeignet für Anwendungen mit geschlossenen Kreisläufen wie z.B. Heizungsanwendungen;1;399,9;Plattenwärmetauscher > M4-56 Baureihe / zerlegbar;;983367163970
|
|
||||||
1264;Edelstahl Plattenwärmetauscher Typ M4-56-15;Edelstahl Plattenwärmetauscher geeignet für Anwendungen mit geschlossenen Kreisläufen wie z.B. Heizungsanwendungen;1;309,9;Plattenwärmetauscher > M4-56 Baureihe / zerlegbar;;8481605893389
|
|
||||||
1265;Edelstahl Plattenwärmetauscher Typ M4-56-25;Edelstahl Plattenwärmetauscher geeignet für Anwendungen mit geschlossenen Kreisläufen wie z.B. Heizungsanwendungen;1;369,9;Plattenwärmetauscher > M4-56 Baureihe / zerlegbar;;5175038823985
|
|
||||||
1266;Edelstahl Plattenwärmetauscher Typ M4-56-35;Edelstahl Plattenwärmetauscher geeignet für Anwendungen mit geschlossenen Kreisläufen wie z.B. Heizungsanwendungen;1;439,9;Plattenwärmetauscher > M4-56 Baureihe / zerlegbar;;2567562782853
|
|
||||||
1267;Edelstahl Plattenwärmetauscher Typ M4-56-40;Edelstahl Plattenwärmetauscher geeignet für Anwendungen mit geschlossenen Kreisläufen wie z.B. Heizungsanwendungen;1;469,9;Plattenwärmetauscher > M4-56 Baureihe / zerlegbar;;6744198567221
|
|
||||||
1268;Edelstahl Plattenwärmetauscher Typ M4-56-45;Edelstahl Plattenwärmetauscher geeignet für Anwendungen mit geschlossenen Kreisläufen wie z.B. Heizungsanwendungen;1;499,9;Plattenwärmetauscher > M4-56 Baureihe / zerlegbar;;4811928042234
|
|
||||||
1269;Edelstahl Plattenwärmetauscher Typ M4-56-50;Edelstahl Plattenwärmetauscher geeignet für Anwendungen mit geschlossenen Kreisläufen wie z.B. Heizungsanwendungen;1;535,9;Plattenwärmetauscher > M4-56 Baureihe / zerlegbar;;3388615003133
|
|
||||||
1270;Edelstahl Plattenwärmetauscher Typ M4-56-60;Edelstahl Plattenwärmetauscher geeignet für Anwendungen mit geschlossenen Kreisläufen wie z.B. Heizungsanwendungen;1;599,9;Plattenwärmetauscher > M4-56 Baureihe / zerlegbar;;6261793125392
|
|
||||||
1326;Abgaswärmetauscher AWT-7/160VA a;Abgaswärmetauscher mit Edelstahl Tauscherspirale.Dieser Tauscher wurde speziell für Kamin und Kachelöfen entwickelt.;1;284,9;Abgaswärmetauscher;;6474143371206
|
|
||||||
1327;Abgaswärmetauscher AWT-7/160-Titan;Abgaswärmetauscher mit titanlegierter Edelstahl Tauscherspirale entwickelt für höchste Temperatur- und Feuchtebelastungen. Dieser Tauscher ist für extreme Langlebigkeit und Beständigkeit ausgelegt.;1;289,9;Abgaswärmetauscher;;4089415274929
|
|
||||||
1328;Abgaswärmetauscher AWT-7/180-Titan;Abgaswärmetauscher mit titanlegierter Edelstahl Tauscherspirale entwickelt für höchste Temperatur- und Feuchtebelastungen. Dieser Tauscher ist für extreme Langlebigkeit und Beständigkeit ausgelegt.;1;319,9;Abgaswärmetauscher;;4598541150958
|
|
||||||
1329;Abgaswärmetauscher AWT-7/180VA;Abgaswärmetauscher mit Edelstahl Tauscherspirale.Dieser Tauscher wurde speziell für Kamin und Kachelöfen entwickelt.;1;314,9;Abgaswärmetauscher;;9282813513019
|
|
||||||
1330;Abgaswärmetauscher AWT-7/200VA;Abgaswärmetauscher mit Edelstahl Tauscherspirale.Dieser Tauscher wurde speziell für Kamin und Kachelöfen entwickelt.;1;339,9;Abgaswärmetauscher;;8282848236311
|
|
||||||
1331;Abgaswärmetauscher AWT-7/200-Titan;Abgaswärmetauscher mit titanlegierter Edelstahl Tauscherspirale entwickelt für höchste Temperatur- und Feuchtebelastungen. Dieser Tauscher ist für extreme Langlebigkeit und Beständigkeit ausgelegt.;1;349,9;Abgaswärmetauscher;;7935749142557
|
|
||||||
1332;Abgaswärmetauscher AWT-7/250VA;Abgaswärmetauscher mit Edelstahl Tauscherspirale.Dieser Tauscher wurde speziell für Kamin und Kachelöfen entwickelt.;0;399;Abgaswärmetauscher;;252926529077
|
|
||||||
1333;Abgaswärmetauscher AWT-7/250-Titan;Abgaswärmetauscher mit titanlegierter Edelstahl Tauscherspirale entwickelt für höchste Temperatur- und Feuchtebelastungen. Dieser Tauscher ist für extreme Langlebigkeit und Beständigkeit ausgelegt.;0;399;Abgaswärmetauscher;;3997003361528
|
|
||||||
1377;Frischwasserstation FWS 840;Die LUPI Frischwasserstation der FWS-800 Baureihe ist ein leistungsstarkes Frischwassermodul für die hygienische und legionellenfreie Erzeugung von Warmwasser mit einem zerlegbarem Plattentauscher.;1;1290;Frischwasserstation;;6908065460286
|
|
||||||
1442;Frischwasserstation FWS 620;Die LUPI Frischwasserstation der Baureihe FWS-600 ist ein leistungsstarkes Frischwassermodul für die hygienische und legionellenfreie Erzeugung von Warmwasser mit einem kupfergelöteten Plattentauscher aus Edelstahl.;0;689;Frischwasserstation;;7695934105636
|
|
||||||
1481;Edelstahl Plattenwärmetauscher Typ M5-11-25;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für Kühlung von Bierwürze;1;1299;Plattenwärmetauscher > M5-11 Baureihe / zerlegbar;;1089969929675
|
|
||||||
1482;Edelstahl Plattenwärmetauscher Typ M5-11-35;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für Kühlung von Bierwürze;1;1499;Plattenwärmetauscher > M5-11 Baureihe / zerlegbar;;310774792552
|
|
||||||
1483;Edelstahl Plattenwärmetauscher Typ M5-11-40;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für Kühlung von Bierwürze;1;1649;Plattenwärmetauscher > M5-11 Baureihe / zerlegbar;;1340784358003
|
|
||||||
1484;Edelstahl Plattenwärmetauscher Typ M5-11-45;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für Kühlung von Bierwürze;1;1899;Plattenwärmetauscher > M5-11 Baureihe / zerlegbar;;7806787405877
|
|
||||||
1485;Edelstahl Plattenwärmetauscher Typ M5-11-50;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für Kühlung von Bierwürze;1;1999;Plattenwärmetauscher > M5-11 Baureihe / zerlegbar;;168419438521
|
|
||||||
1486;Edelstahl Plattenwärmetauscher Typ M5-11-55;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für Kühlung von Bierwürze;1;2199;Plattenwärmetauscher > M5-11 Baureihe / zerlegbar;;445370808496
|
|
||||||
1487;Edelstahl Plattenwärmetauscher Typ M5-11-60;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für Kühlung von Bierwürze;1;2299;Plattenwärmetauscher > M5-11 Baureihe / zerlegbar;;6855062072649
|
|
||||||
1488;Edelstahl Plattenwärmetauscher Typ M5-11-65;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für Kühlung von Bierwürze;1;2480;Plattenwärmetauscher > M5-11 Baureihe / zerlegbar;;3868467036959
|
|
||||||
1489;Edelstahl Plattenwärmetauscher Typ M5-11-70;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für Kühlung von Bierwürze;1;2590;Plattenwärmetauscher > M5-11 Baureihe / zerlegbar;;9437200314292
|
|
||||||
1490;Edelstahl Plattenwärmetauscher Typ M5-11-75;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für Kühlung von Bierwürze;1;2790;Plattenwärmetauscher > M5-11 Baureihe / zerlegbar;;5328785590239
|
|
||||||
1491;Edelstahl Plattenwärmetauscher Typ M5-11-80;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für Kühlung von Bierwürze;1;2990;Plattenwärmetauscher > M5-11 Baureihe / zerlegbar;;1396411470228
|
|
||||||
1492;Edelstahl Plattenwärmetauscher Typ M6-19-15;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend als Zwischenkreistauscher für Sole / Grundwasser Wärmepumpen;1;1250;Plattenwärmetauscher > M6-19 Baureihe / zerlegbar;;3163238295239
|
|
||||||
1493;Edelstahl Plattenwärmetauscher Typ M6-19-25;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend als Zwischenkreistauscher für Sole / Grundwasser Wärmepumpen;1;1850;Plattenwärmetauscher > M6-19 Baureihe / zerlegbar;;4862330962177
|
|
||||||
1494;Edelstahl Plattenwärmetauscher Typ M6-19-30;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend als Zwischenkreistauscher für Sole / Grundwasser Wärmepumpen;1;1990;Plattenwärmetauscher > M6-19 Baureihe / zerlegbar;;1710131812265
|
|
||||||
1495;Edelstahl Plattenwärmetauscher Typ M6-19-35;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend als Zwischenkreistauscher für Sole / Grundwasser Wärmepumpen;1;2380;Plattenwärmetauscher > M6-19 Baureihe / zerlegbar;;1287056757693
|
|
||||||
1496;Edelstahl Plattenwärmetauscher Typ M6-19-40;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend als Zwischenkreistauscher für Sole / Grundwasser Wärmepumpen;1;2480;Plattenwärmetauscher > M6-19 Baureihe / zerlegbar;;4874329354658
|
|
||||||
1497;Edelstahl Plattenwärmetauscher Typ M6-19-45;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend als Zwischenkreistauscher für Sole / Grundwasser Wärmepumpen;1;2640;Plattenwärmetauscher > M6-19 Baureihe / zerlegbar;;4147810179628
|
|
||||||
1498;Edelstahl Plattenwärmetauscher Typ M6-19-50;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend als Zwischenkreistauscher für Sole / Grundwasser Wärmepumpen;1;2890;Plattenwärmetauscher > M6-19 Baureihe / zerlegbar;;524638185
|
|
||||||
1499;Edelstahl Plattenwärmetauscher Typ M6-19-55;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend als Zwischenkreistauscher für Sole / Grundwasser Wärmepumpen;1;3080;Plattenwärmetauscher > M6-19 Baureihe / zerlegbar;;4564280934296
|
|
||||||
1500;Edelstahl Plattenwärmetauscher Typ M6-19-60;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend als Zwischenkreistauscher für Sole / Grundwasser Wärmepumpen;1;2980;Plattenwärmetauscher > M6-19 Baureihe / zerlegbar;;1861389468671
|
|
||||||
1501;Edelstahl Plattenwärmetauscher Typ M6-19-65;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend als Zwischenkreistauscher für Sole / Grundwasser Wärmepumpen;1;3280;Plattenwärmetauscher > M6-19 Baureihe / zerlegbar;;7794860625802
|
|
||||||
1502;Edelstahl Plattenwärmetauscher Typ M6-19-70;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend als Zwischenkreistauscher für Sole / Grundwasser Wärmepumpen;1;3740;Plattenwärmetauscher > M6-19 Baureihe / zerlegbar;;3611080124547
|
|
||||||
1503;Edelstahl Plattenwärmetauscher Typ M6-19-75;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend als Zwischenkreistauscher für Sole / Grundwasser Wärmepumpen;1;3950;Plattenwärmetauscher > M6-19 Baureihe / zerlegbar;;3330396409604
|
|
||||||
1504;Edelstahl Plattenwärmetauscher Typ M6-19-80;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend als Zwischenkreistauscher für Sole / Grundwasser Wärmepumpen;1;4120;Plattenwärmetauscher > M6-19 Baureihe / zerlegbar;;9265397743935
|
|
||||||
1505;Edelstahl Plattenwärmetauscher Typ M6-19-85;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend als Zwischenkreistauscher für Sole / Grundwasser Wärmepumpen;1;4300;Plattenwärmetauscher > M6-19 Baureihe / zerlegbar;;5505866454530
|
|
||||||
1506;Edelstahl Plattenwärmetauscher Typ M6-19-90;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend als Zwischenkreistauscher für Sole / Grundwasser Wärmepumpen;1;4490;Plattenwärmetauscher > M6-19 Baureihe / zerlegbar;;3893594435450
|
|
||||||
1507;Edelstahl Plattenwärmetauscher Typ M6-19-95;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend als Zwischenkreistauscher für Sole / Grundwasser Wärmepumpen;1;4490;Plattenwärmetauscher > M6-19 Baureihe / zerlegbar;;8264263605712
|
|
||||||
1508;Edelstahl Plattenwärmetauscher Typ M6-19-100;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend als Zwischenkreistauscher für Sole / Grundwasser Wärmepumpen;1;5270;Plattenwärmetauscher > M6-19 Baureihe / zerlegbar;;7695934105636
|
|
||||||
1516;Edelstahl Plattenwärmetauscher Typ M7-17-30;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für die Poolerwärmung;1;1580;Plattenwärmetauscher > M7-17 Baureihe / zerlegbar;;1089969929675
|
|
||||||
1517;Edelstahl Plattenwärmetauscher Typ M7-17-40;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für die Poolerwärmung;1;1890;Plattenwärmetauscher > M7-17 Baureihe / zerlegbar;;310774792552
|
|
||||||
1518;Edelstahl Plattenwärmetauscher Typ M7-17-50;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für die Poolerwärmung;1;2290;Plattenwärmetauscher > M7-17 Baureihe / zerlegbar;;1340784358003
|
|
||||||
1519;Edelstahl Plattenwärmetauscher Typ M7-17-60;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für die Poolerwärmung;1;2670;Plattenwärmetauscher > M7-17 Baureihe / zerlegbar;;7806787405877
|
|
||||||
1520;Edelstahl Plattenwärmetauscher Typ M7-17-70;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für die Poolerwärmung;1;2990;Plattenwärmetauscher > M7-17 Baureihe / zerlegbar;;168419438521
|
|
||||||
1521;Edelstahl Plattenwärmetauscher Typ M7-17-80;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für die Poolerwärmung;1;3390;Plattenwärmetauscher > M7-17 Baureihe / zerlegbar;;445370808496
|
|
||||||
1522;Edelstahl Plattenwärmetauscher Typ M7-17-90;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für die Poolerwärmung;1;3750;Plattenwärmetauscher > M7-17 Baureihe / zerlegbar;;6855062072649
|
|
||||||
1523;Edelstahl Plattenwärmetauscher Typ M7-17-100;Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für die Poolerwärmung;1;3990;Plattenwärmetauscher > M7-17 Baureihe / zerlegbar;;3868467036959
|
|
||||||
1535;Frischwasserstation FWS 830;Die LUPI Frischwasserstation der FWS-800 Baureihe ist ein leistungsstarkes Frischwassermodul für die hygienische und legionellenfreie Erzeugung von Warmwasser mit einem zerlegbarem Plattentauscher.;1;1190;Frischwasserstation;;9437200314292
|
|
||||||
1536;Frischwasserstation FWS 850;Die LUPI Frischwasserstation der FWS-800 Baureihe ist ein leistungsstarkes Frischwassermodul für die hygienische und legionellenfreie Erzeugung von Warmwasser mit einem zerlegbarem Plattentauscher.;1;1390;Frischwasserstation;;5328785590239
|
|
||||||
1537;Frischwasserstation FWS 860;Die LUPI Frischwasserstation der FWS-800 Baureihe ist ein leistungsstarkes Frischwassermodul für die hygienische und legionellenfreie Erzeugung von Warmwasser mit einem zerlegbarem Plattentauscher.;0;1590;Frischwasserstation;;1396411470228
|
|
||||||
1538;Frischwasserstation FWS 630;Die LUPI Frischwasserstation der Baureihe FWS-600 ist ein leistungsstarkes Frischwassermodul für die hygienische und legionellenfreie Erzeugung von Warmwasser mit einem kupfergelöteten Plattentauscher aus Edelstahl.;1;699,9;Frischwasserstation;;3163238295239
|
|
||||||
1539;Frischwasserstation FWS 640;Die LUPI Frischwasserstation der Baureihe FWS-600 ist ein leistungsstarkes Frischwassermodul für die hygienische und legionellenfreie Erzeugung von Warmwasser mit einem kupfergelöteten Plattentauscher aus Edelstahl.;1;798;Frischwasserstation;;4862330962177
|
|
||||||
1540;Frischwasserstation FWS 650;Die LUPI Frischwasserstation der Baureihe FWS-600 ist ein leistungsstarkes Frischwassermodul für die hygienische und legionellenfreie Erzeugung von Warmwasser mit einem kupfergelöteten Plattentauscher aus Edelstahl.;1;879;Frischwasserstation;;1710131812265
|
|
||||||
1541;Frischwasserstation FWS 660;Die LUPI Frischwasserstation der Baureihe FWS-600 ist ein leistungsstarkes Frischwassermodul für die hygienische und legionellenfreie Erzeugung von Warmwasser mit einem kupfergelöteten Plattentauscher aus Edelstahl.;0;545;Frischwasserstation;;1287056757693
|
|
||||||
1683;Edelstahl Pool Wärmetauscher Typ SP-170-K;Hochwertiger Plattenwärmetauscher aus Edelstahl zur Schwimmbadbeheizung. Geeignet für gechlortes Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen.;1;219,9;Pool Wärmetauscher;;4874329354658
|
|
||||||
1684;Edelstahl Pool Wärmetauscher Typ SP-220-K;Hochwertiger Plattenwärmetauscher aus Edelstahl zur Schwimmbadbeheizung. Geeignet für gechlortes Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen.;1;279,9;Pool Wärmetauscher > Plattenwärmetauscher mit PVC Anschluss;;4147810179628
|
|
||||||
1685;Edelstahl Pool Wärmetauscher Typ SP-320-K;Hochwertiger Plattenwärmetauscher aus Edelstahl zur Schwimmbadbeheizung. Geeignet für gechlortes Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen.;1;359,9;Pool Wärmetauscher;;524638185
|
|
||||||
1686;Edelstahl Pool Wärmetauscher Typ EP-190-VA;Hochwertiger Plattenwärmetauscher aus Edelstahl zur Schwimmbadbeheizung. Geeignet für gechlortes Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen.;1;219,9;Pool Wärmetauscher;;4564280934296
|
|
||||||
1687;Edelstahl Pool Wärmetauscher Typ EP-240-VA;Hochwertiger Plattenwärmetauscher aus Edelstahl zur Schwimmbadbeheizung. Geeignet für gechlortes Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen.;1;279,9;Pool Wärmetauscher;;1861389468671
|
|
||||||
1688;Edelstahl Pool Wärmetauscher Typ EP-350-VA;Hochwertiger Plattenwärmetauscher aus Edelstahl zur Schwimmbadbeheizung. Geeignet für gechlortes Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen.;1;389,9;Pool Wärmetauscher;;7794860625802
|
|
||||||
1689;Edelstahl Pool Wärmetauscher Typ EP-460-VA;Hochwertiger Plattenwärmetauscher aus Edelstahl zur Schwimmbadbeheizung. Geeignet für gechlortes Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen.;1;519,9;Pool Wärmetauscher;;3611080124547
|
|
||||||
1690;Edelstahl Pool Wärmetauscher Typ EP-660-VA;Hochwertiger Plattenwärmetauscher aus Edelstahl zur Schwimmbadbeheizung. Geeignet für gechlortes Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen.;1;649,9;Pool Wärmetauscher;;3330396409604
|
|
||||||
1691;Titan Pool Wärmetauscher Typ EP-100-TI;Hochwertiger Plattenwärmetauscher aus Reintitan zur Schwimmbadbeheizung. Geeignet für gechlortes Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen. Poolseitige Anschlüsse aus Reintitan / hochtemperaturbeständig.;1;459,9;Pool Wärmetauscher > Plattenwärmetauscher mit Edelstahl / Titan Aschluss;;9265397743935
|
|
||||||
1693;Titan Pool Wärmetauscher Typ EP-170-TI;Hochwertiger Plattenwärmetauscher aus Reintitan zur Schwimmbadbeheizung. Geeignet für gechlortes Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen. Poolseitige Anschlüsse aus Reintitan / hochtemperaturbeständig.;1;479,9;Pool Wärmetauscher > Plattenwärmetauscher mit Edelstahl / Titan Aschluss;;5505866454530
|
|
||||||
1694;Titan Pool Wärmetauscher Typ EP-220-TI;Hochwertiger Plattenwärmetauscher aus Reintitan zur Schwimmbadbeheizung. Geeignet für gechlortes Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen. Poolseitige Anschlüsse aus Reintitan / hochtemperaturbeständig.;1;584,9;Pool Wärmetauscher > Plattenwärmetauscher mit Edelstahl / Titan Aschluss;;3893594435450
|
|
||||||
1695;Titan Pool Wärmetauscher Typ EP-320-TI;Hochwertiger Plattenwärmetauscher aus Reintitan zur Schwimmbadbeheizung. Geeignet für gechlortes Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen. Poolseitige Anschlüsse aus Reintitan / hochtemperaturbeständig.;1;684,9;Pool Wärmetauscher > Plattenwärmetauscher mit Edelstahl / Titan Aschluss;;8264263605712
|
|
||||||
1696;Titan Pool Wärmetauscher Typ EP-420-TI;Hochwertiger Plattenwärmetauscher aus Reintitan zur Schwimmbadbeheizung. Geeignet für gechlortes Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen. Poolseitige Anschlüsse aus Reintitan / hochtemperaturbeständig.;1;784,9;Pool Wärmetauscher > Plattenwärmetauscher mit Edelstahl / Titan Aschluss;;7695934105636
|
|
||||||
1697;Titan Pool Wärmetauscher Typ EP-520-TI;Hochwertiger Plattenwärmetauscher aus Reintitan zur Schwimmbadbeheizung. Geeignet für gechlortes Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen. Poolseitige Anschlüsse aus Reintitan / hochtemperaturbeständig.;1;890;Pool Wärmetauscher > Plattenwärmetauscher mit Edelstahl / Titan Aschluss;;1089969929675
|
|
||||||
1698;Titan Pool Wärmetauscher Typ EP-620-TI;Hochwertiger Plattenwärmetauscher aus Reintitan zur Schwimmbadbeheizung. Geeignet für gechlortes Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen. Poolseitige Anschlüsse aus Reintitan / hochtemperaturbeständig.;0;917;Pool Wärmetauscher > Plattenwärmetauscher mit Edelstahl / Titan Aschluss;;310774792552
|
|
||||||
1710;Titan Pool Wärmetauscher Typ SP-100-TI;Hochwertiger Plattenwärmetauscher aus Reintitan zur Schwimmbadbeheizung. Geeignet für gechlortes sowie salzhaltiges Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen.;1;379,9;Pool Wärmetauscher;;1340784358003
|
|
||||||
1716;Titan Pool Wärmetauscher Typ SP-170-TI;Hochwertiger Plattenwärmetauscher aus Reintitan zur Schwimmbadbeheizung. Geeignet für gechlortes sowie salzhaltiges Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen.;1;459,9;Pool Wärmetauscher;;7806787405877
|
|
||||||
1717;Titan Pool Wärmetauscher Typ SP-220-TI;Hochwertiger Plattenwärmetauscher aus Reintitan zur Schwimmbadbeheizung. Geeignet für gechlortes sowie salzhaltiges Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen.;1;579,9;Pool Wärmetauscher;;168419438521
|
|
||||||
1718;Titan Pool Wärmetauscher Typ SP-320-TI;Hochwertiger Plattenwärmetauscher aus Reintitan zur Schwimmbadbeheizung. Geeignet für gechlortes sowie salzhaltiges Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen.;1;679,9;Pool Wärmetauscher;;445370808496
|
|
||||||
1721;Edelstahl Pool Wärmetauscher Typ EP-160-VA;Hochwertiger Plattenwärmetauscher aus Edelstahl zur Schwimmbadbeheizung. Geeignet für gechlortes Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen.;1;199,9;Pool Wärmetauscher;;6855062072649
|
|
||||||
1796;Wandbefestigung für Plattentauscher EP-100 bis EP-720;;1;35,9;Wandhalterung;;3868467036959
|
|
||||||
1797;Wandbefestigung für Plattentauscher SP-100 bis SP-620;;1;35,9;Wandhalterung;;9437200314292
|
|
||||||
1816;Edelstahl Plattenwärmetauscher Typ M5-11-20;"Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für Kühlung von Bierwürze; Milchkühlung sowie als Zwischenkreistauscher für Sole und Grundwasser Wärmepumpen.";1;1199;Plattenwärmetauscher > M5-11 Baureihe / zerlegbar;;5328785590239
|
|
||||||
1817;Edelstahl Plattenwärmetauscher Typ M5-11-15;"Der Einsatz dieser Tauscherbaureihe eignet sich hervorragend für Kühlung von Bierwürze; Milchkühlung sowie als Zwischenkreistauscher für Sole und Grundwasser Wärmepumpen.";0;954;Plattenwärmetauscher > M5-11 Baureihe / zerlegbar;;1396411470228
|
|
||||||
1840;Dämmschale für Plattentauscher EP-xx;;1;89,9;Isolierung für Wärmetauscher;;3163238295239
|
|
||||||
2329;Abgastauscher Set AWT-704 inclusive Regler;Abgastauscher Set AWT-704 entwickelt zur Energieeinsparung bei Kaminöfen in Verbindung mit Pufferspeichern;0;750;Abgaswärmetauscher;;4862330962177
|
|
||||||
2529;Titan Pool Wärmetauscher Typ EP-720-Ti;Hochwertiger Plattenwärmetauscher aus Reintitan zur Schwimmbadbeheizung. Geeignet für gechlortes Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen. Poolseitige Anschlüsse aus Reintitan / hochtemperaturbeständig.;1;1090;Pool Wärmetauscher > Plattenwärmetauscher mit Edelstahl / Titan Aschluss;;1710131812265
|
|
||||||
2552;Abgastauscher Set AWT-704 ohne Regler;Abgastauscher Set AWT-704 entwickelt zur Energieeinsparung bei Kaminöfen in Verbindung mit Pufferspeichern;1;870;Abgaswärmetauscher;;1287056757693
|
|
||||||
3003;Titan Pool Wärmetauscher Typ EP-190-Ti;Hochwertiger Plattenwärmetauscher aus Reintitan zur Schwimmbadbeheizung. Geeignet für gechlortes Wasser. Höchstmögliche Wärmeübertragung bei niedrigen Vorlauftemperaturen. Poolseitige Anschlüsse aus Reintitan / hochtemperaturbeständig.;1;498,9;Pool Wärmetauscher > Plattenwärmetauscher mit Edelstahl / Titan Aschluss;;4874329354658
|
|
||||||
|
|
|
@ -1,156 +0,0 @@
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
|
|
||||||
<parent>
|
|
||||||
<artifactId>dynamixs-ai</artifactId>
|
|
||||||
<groupId>ai.dynamixs</groupId>
|
|
||||||
<version>1.0.0</version>
|
|
||||||
</parent>
|
|
||||||
<artifactId>dynamixs-ai-a2a</artifactId>
|
|
||||||
<packaging>jar</packaging>
|
|
||||||
<name>Dynamixs AI A2A Library</name>
|
|
||||||
|
|
||||||
|
|
||||||
<build>
|
|
||||||
|
|
||||||
<plugins>
|
|
||||||
|
|
||||||
<!-- use JDK settings for compiling -->
|
|
||||||
<plugin>
|
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
|
||||||
<version>3.8.1</version>
|
|
||||||
<configuration>
|
|
||||||
<source>${java.source}</source>
|
|
||||||
<target>${java.target}</target>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
<!-- Testing JUnit 5 -->
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
|
||||||
<version>2.22.2</version>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- issue #572
|
|
||||||
hack for:
|
|
||||||
https://stackoverflow.com/questions/75116023/unable-to-make-protected-final-java-lang-class-java-lang-classloader-defineclass
|
|
||||||
-->
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
|
||||||
<version>3.3.1</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<id>default-test</id>
|
|
||||||
<phase>test</phase>
|
|
||||||
<goals>
|
|
||||||
<goal>test</goal>
|
|
||||||
</goals>
|
|
||||||
<configuration>
|
|
||||||
<argLine>
|
|
||||||
--add-opens java.base/java.lang=ALL-UNNAMED
|
|
||||||
</argLine>
|
|
||||||
</configuration>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
|
|
||||||
</build>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<!-- Jakarta EE -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>jakarta.platform</groupId>
|
|
||||||
<artifactId>jakarta.jakartaee-api</artifactId>
|
|
||||||
<version>${jakarta.version}</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<!-- Microprofile -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.eclipse.microprofile</groupId>
|
|
||||||
<artifactId>microprofile</artifactId>
|
|
||||||
<version>${microprofile.version}</version>
|
|
||||||
<type>pom</type>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- Imixs Workflow -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-workflow-core</artifactId>
|
|
||||||
<type>jar</type>
|
|
||||||
<version>${org.imixs.workflow.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-workflow-engine</artifactId>
|
|
||||||
<type>jar</type>
|
|
||||||
<version>${org.imixs.workflow.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-workflow-jax-rs</artifactId>
|
|
||||||
<type>jar</type>
|
|
||||||
<version>${org.imixs.workflow.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-workflow-faces</artifactId>
|
|
||||||
<type>jar</type>
|
|
||||||
<version>${org.imixs.workflow.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Testing -->
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.junit.jupiter</groupId>
|
|
||||||
<artifactId>junit-jupiter-api</artifactId>
|
|
||||||
<version>${junit.jupiter.version}</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.junit.jupiter</groupId>
|
|
||||||
<artifactId>junit-jupiter-engine</artifactId>
|
|
||||||
<version>${junit.jupiter.version}</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.mockito</groupId>
|
|
||||||
<artifactId>mockito-core</artifactId>
|
|
||||||
<version>${mockito.version}</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.mockito</groupId>
|
|
||||||
<artifactId>mockito-junit-jupiter</artifactId>
|
|
||||||
<version>${mockito.version}</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.eclipse.parsson</groupId>
|
|
||||||
<artifactId>jakarta.json</artifactId>
|
|
||||||
<version>1.1.1</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.glassfish.jaxb</groupId>
|
|
||||||
<artifactId>jaxb-runtime</artifactId>
|
|
||||||
<version>3.0.0</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>jakarta.xml.bind</groupId>
|
|
||||||
<artifactId>jakarta.xml.bind-api</artifactId>
|
|
||||||
<version>3.0.0</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
|
|
||||||
</dependencies>
|
|
||||||
</project>
|
|
||||||
|
|
@ -1,448 +0,0 @@
|
||||||
package ai.dynamixs.a2a;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import jakarta.json.Json;
|
|
||||||
import jakarta.json.JsonArray;
|
|
||||||
import jakarta.json.JsonArrayBuilder;
|
|
||||||
import jakarta.json.JsonObject;
|
|
||||||
import jakarta.json.JsonObjectBuilder;
|
|
||||||
import jakarta.json.JsonString;
|
|
||||||
import jakarta.json.JsonValue;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents an A2A Skill Card based on Imixs-Workflow BPMN models.
|
|
||||||
*
|
|
||||||
* The skill ID follows the pattern: {modelVersion}_{taskId}_{eventId} This
|
|
||||||
* allows direct mapping to Imixs workflow execution parameters.
|
|
||||||
*
|
|
||||||
* Example: "office-de-2.0_100_10" represents: - Model Version: "office-de-2.0"
|
|
||||||
* - Task ID: 100 - Event ID: 10
|
|
||||||
*/
|
|
||||||
public class A2ASkillCard implements Serializable {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
private static final Logger logger = Logger.getLogger(A2ASkillCard.class.getSimpleName());
|
|
||||||
|
|
||||||
// A2A Standard Fields
|
|
||||||
private String id; // {modelVersion}_{taskId}_{eventId}
|
|
||||||
private String name; // Human-readable skill name
|
|
||||||
private String description; // Detailed description
|
|
||||||
private List<String> tags; // Categorization tags
|
|
||||||
private List<String> examples; // Example usage scenarios
|
|
||||||
private List<String> inputModes; // Supported input media types
|
|
||||||
private List<String> outputModes; // Supported output media types
|
|
||||||
private Map<String, Object> metadata; // Additional metadata
|
|
||||||
|
|
||||||
// Constructors
|
|
||||||
public A2ASkillCard() {
|
|
||||||
this.tags = new ArrayList<>();
|
|
||||||
this.examples = new ArrayList<>();
|
|
||||||
this.inputModes = new ArrayList<>();
|
|
||||||
this.outputModes = new ArrayList<>();
|
|
||||||
this.metadata = new HashMap<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Id is computed by version, task and event id "invoice-workflow-2.1_100_10"
|
|
||||||
*
|
|
||||||
* @param modelVersion
|
|
||||||
* @param taskID
|
|
||||||
* @param eventID
|
|
||||||
*/
|
|
||||||
public A2ASkillCard(String modelVersion, int taskID, int eventID) {
|
|
||||||
this();
|
|
||||||
this.id = createSkillId(modelVersion, taskID, eventID);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Imixs-specific convenience methods for parsing skill ID
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the model version from the skill ID
|
|
||||||
*
|
|
||||||
* @return model version (e.g., "office-de-2.0")
|
|
||||||
*/
|
|
||||||
public String getModelVersion() {
|
|
||||||
if (id == null || !id.contains("_")) {
|
|
||||||
throw new IllegalStateException("Invalid skill ID format: " + id);
|
|
||||||
}
|
|
||||||
return id.substring(0, id.lastIndexOf('_', id.lastIndexOf('_') - 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the task ID from the skill ID
|
|
||||||
*
|
|
||||||
* @return Imixs task ID as integer
|
|
||||||
*/
|
|
||||||
public int getTaskId() {
|
|
||||||
if (id == null || !id.contains("_")) {
|
|
||||||
throw new IllegalStateException("Invalid skill ID format: " + id);
|
|
||||||
}
|
|
||||||
String[] parts = id.split("_");
|
|
||||||
if (parts.length < 3) {
|
|
||||||
throw new IllegalStateException("Invalid skill ID format: " + id);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
return Integer.parseInt(parts[parts.length - 2]);
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
throw new IllegalStateException("Invalid task ID in skill ID: " + id, e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the event ID from the skill ID
|
|
||||||
*
|
|
||||||
* @return Imixs event ID as integer
|
|
||||||
*/
|
|
||||||
public int getEventId() {
|
|
||||||
if (id == null || !id.contains("_")) {
|
|
||||||
throw new IllegalStateException("Invalid skill ID format: " + id);
|
|
||||||
}
|
|
||||||
String[] parts = id.split("_");
|
|
||||||
if (parts.length < 3) {
|
|
||||||
throw new IllegalStateException("Invalid skill ID format: " + id);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
return Integer.parseInt(parts[parts.length - 1]);
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
throw new IllegalStateException("Invalid event ID in skill ID: " + id, e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a skill ID from Imixs workflow components
|
|
||||||
*
|
|
||||||
* @param modelVersion the workflow model version
|
|
||||||
* @param taskId the task ID
|
|
||||||
* @param eventId the event ID
|
|
||||||
* @return formatted skill ID
|
|
||||||
*/
|
|
||||||
public static String createSkillId(String modelVersion, int taskId, int eventId) {
|
|
||||||
if (modelVersion == null || modelVersion.trim().isEmpty()) {
|
|
||||||
throw new IllegalArgumentException("Model version cannot be null or empty");
|
|
||||||
}
|
|
||||||
return String.format("%s_%d_%d", modelVersion, taskId, eventId);
|
|
||||||
}
|
|
||||||
|
|
||||||
// JSON Serialization
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts this skill card to a Jakarta JSON object
|
|
||||||
*
|
|
||||||
* @return JsonObject representation of this skill card
|
|
||||||
*/
|
|
||||||
public JsonObject toJsonObject() {
|
|
||||||
JsonObjectBuilder builder = Json.createObjectBuilder()
|
|
||||||
.add("id", id != null ? id : "")
|
|
||||||
.add("name", name != null ? name : "")
|
|
||||||
.add("description", description != null ? description : "");
|
|
||||||
|
|
||||||
// Tags array
|
|
||||||
JsonArrayBuilder tagsBuilder = Json.createArrayBuilder();
|
|
||||||
if (tags != null) {
|
|
||||||
tags.forEach(tagsBuilder::add);
|
|
||||||
}
|
|
||||||
builder.add("tags", tagsBuilder.build());
|
|
||||||
|
|
||||||
// Examples array
|
|
||||||
JsonArrayBuilder examplesBuilder = Json.createArrayBuilder();
|
|
||||||
if (examples != null) {
|
|
||||||
examples.forEach(examplesBuilder::add);
|
|
||||||
}
|
|
||||||
builder.add("examples", examplesBuilder.build());
|
|
||||||
|
|
||||||
// Input modes array
|
|
||||||
JsonArrayBuilder inputModesBuilder = Json.createArrayBuilder();
|
|
||||||
if (inputModes != null) {
|
|
||||||
inputModes.forEach(inputModesBuilder::add);
|
|
||||||
}
|
|
||||||
builder.add("inputModes", inputModesBuilder.build());
|
|
||||||
|
|
||||||
// Output modes array
|
|
||||||
JsonArrayBuilder outputModesBuilder = Json.createArrayBuilder();
|
|
||||||
if (outputModes != null) {
|
|
||||||
outputModes.forEach(outputModesBuilder::add);
|
|
||||||
}
|
|
||||||
builder.add("outputModes", outputModesBuilder.build());
|
|
||||||
|
|
||||||
// Metadata object
|
|
||||||
if (metadata != null && !metadata.isEmpty()) {
|
|
||||||
JsonObjectBuilder metadataBuilder = Json.createObjectBuilder();
|
|
||||||
metadata.forEach((key, value) -> {
|
|
||||||
if (value instanceof String) {
|
|
||||||
metadataBuilder.add(key, (String) value);
|
|
||||||
} else if (value instanceof Number) {
|
|
||||||
metadataBuilder.add(key, ((Number) value).doubleValue());
|
|
||||||
} else if (value instanceof Boolean) {
|
|
||||||
metadataBuilder.add(key, (Boolean) value);
|
|
||||||
} else if (value != null) {
|
|
||||||
metadataBuilder.add(key, value.toString());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
builder.add("metadata", metadataBuilder.build());
|
|
||||||
}
|
|
||||||
|
|
||||||
return builder.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates an A2ASkillCard from a JSON string
|
|
||||||
*
|
|
||||||
* @param jsonString JSON representation of a skill card
|
|
||||||
* @return A2ASkillCard instance
|
|
||||||
*/
|
|
||||||
// public static A2ASkillCard fromJsonString(String jsonString) {
|
|
||||||
// try (JsonReader reader = Json.createReader(new
|
|
||||||
// java.io.StringReader(jsonString))) {
|
|
||||||
// JsonObject jsonObject = reader.readObject();
|
|
||||||
// return fromJsonObject(jsonObject);
|
|
||||||
// } catch (Exception e) {
|
|
||||||
// logger.severe("Failed to parse A2ASkillCard from JSON: " + e.getMessage());
|
|
||||||
// throw new IllegalArgumentException("Invalid JSON format for A2ASkillCard",
|
|
||||||
// e);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates an A2ASkillCard from a JsonObject
|
|
||||||
*
|
|
||||||
* @param jsonObject JsonObject representation
|
|
||||||
* @return A2ASkillCard instance
|
|
||||||
*/
|
|
||||||
public static A2ASkillCard fromJsonObject(JsonObject jsonObject) {
|
|
||||||
A2ASkillCard skill = new A2ASkillCard();
|
|
||||||
|
|
||||||
// Basic fields
|
|
||||||
skill.setId(jsonObject.getString("id", ""));
|
|
||||||
skill.setName(jsonObject.getString("name", ""));
|
|
||||||
skill.setDescription(jsonObject.getString("description", ""));
|
|
||||||
|
|
||||||
// Arrays
|
|
||||||
if (jsonObject.containsKey("tags")) {
|
|
||||||
JsonArray tagsArray = jsonObject.getJsonArray("tags");
|
|
||||||
skill.setTags(jsonArrayToStringList(tagsArray));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (jsonObject.containsKey("examples")) {
|
|
||||||
JsonArray examplesArray = jsonObject.getJsonArray("examples");
|
|
||||||
skill.setExamples(jsonArrayToStringList(examplesArray));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (jsonObject.containsKey("inputModes")) {
|
|
||||||
JsonArray inputModesArray = jsonObject.getJsonArray("inputModes");
|
|
||||||
skill.setInputModes(jsonArrayToStringList(inputModesArray));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (jsonObject.containsKey("outputModes")) {
|
|
||||||
JsonArray outputModesArray = jsonObject.getJsonArray("outputModes");
|
|
||||||
skill.setOutputModes(jsonArrayToStringList(outputModesArray));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Metadata
|
|
||||||
if (jsonObject.containsKey("metadata")) {
|
|
||||||
JsonObject metadataObject = jsonObject.getJsonObject("metadata");
|
|
||||||
Map<String, Object> metadata = new HashMap<>();
|
|
||||||
metadataObject.forEach((key, value) -> {
|
|
||||||
switch (value.getValueType()) {
|
|
||||||
case STRING:
|
|
||||||
metadata.put(key, ((JsonString) value).getString());
|
|
||||||
break;
|
|
||||||
case NUMBER:
|
|
||||||
metadata.put(key, ((jakarta.json.JsonNumber) value).doubleValue());
|
|
||||||
break;
|
|
||||||
case TRUE:
|
|
||||||
metadata.put(key, Boolean.TRUE);
|
|
||||||
break;
|
|
||||||
case FALSE:
|
|
||||||
metadata.put(key, Boolean.FALSE);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
metadata.put(key, value.toString());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
skill.setMetadata(metadata);
|
|
||||||
}
|
|
||||||
|
|
||||||
return skill;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper method to convert JsonArray to List<String>
|
|
||||||
*/
|
|
||||||
private static List<String> jsonArrayToStringList(JsonArray jsonArray) {
|
|
||||||
List<String> list = new ArrayList<>();
|
|
||||||
for (JsonValue value : jsonArray) {
|
|
||||||
if (value.getValueType() == JsonValue.ValueType.STRING) {
|
|
||||||
list.add(((JsonString) value).getString());
|
|
||||||
} else {
|
|
||||||
list.add(value.toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Validation
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates this skill card for A2A compliance
|
|
||||||
*
|
|
||||||
* @return true if valid, false otherwise
|
|
||||||
*/
|
|
||||||
public boolean isValid() {
|
|
||||||
if (id == null || id.trim().isEmpty()) {
|
|
||||||
logger.warning("Skill card validation failed: missing ID");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (name == null || name.trim().isEmpty()) {
|
|
||||||
logger.warning("Skill card validation failed: missing name");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (description == null || description.trim().isEmpty()) {
|
|
||||||
logger.warning("Skill card validation failed: missing description");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Validate skill ID format
|
|
||||||
try {
|
|
||||||
getModelVersion();
|
|
||||||
getTaskId();
|
|
||||||
getEventId();
|
|
||||||
} catch (Exception e) {
|
|
||||||
logger.warning("Skill card validation failed: invalid ID format: " + id);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Getters and Setters
|
|
||||||
|
|
||||||
public String getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(String id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDescription() {
|
|
||||||
return description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDescription(String description) {
|
|
||||||
this.description = description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getTags() {
|
|
||||||
return tags;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTags(List<String> tags) {
|
|
||||||
this.tags = tags != null ? tags : new ArrayList<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getExamples() {
|
|
||||||
return examples;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setExamples(List<String> examples) {
|
|
||||||
this.examples = examples != null ? examples : new ArrayList<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getInputModes() {
|
|
||||||
return inputModes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setInputModes(List<String> inputModes) {
|
|
||||||
this.inputModes = inputModes != null ? inputModes : new ArrayList<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getOutputModes() {
|
|
||||||
return outputModes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setOutputModes(List<String> outputModes) {
|
|
||||||
this.outputModes = outputModes != null ? outputModes : new ArrayList<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<String, Object> getMetadata() {
|
|
||||||
return metadata;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMetadata(Map<String, Object> metadata) {
|
|
||||||
this.metadata = metadata != null ? metadata : new HashMap<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convenience methods for metadata
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds a metadata entry
|
|
||||||
*/
|
|
||||||
public void addMetadata(String key, Object value) {
|
|
||||||
if (metadata == null) {
|
|
||||||
metadata = new HashMap<>();
|
|
||||||
}
|
|
||||||
metadata.put(key, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets a metadata value as String
|
|
||||||
*/
|
|
||||||
public String getMetadataString(String key) {
|
|
||||||
Object value = metadata != null ? metadata.get(key) : null;
|
|
||||||
return value != null ? value.toString() : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets a metadata value as Boolean
|
|
||||||
*/
|
|
||||||
public Boolean getMetadataBoolean(String key) {
|
|
||||||
Object value = metadata != null ? metadata.get(key) : null;
|
|
||||||
if (value instanceof Boolean) {
|
|
||||||
return (Boolean) value;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// toString for debugging
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return String.format("A2ASkillCard{id='%s', name='%s', modelVersion='%s', taskId=%d, eventId=%d}",
|
|
||||||
id, name,
|
|
||||||
id != null ? getModelVersion() : "unknown",
|
|
||||||
id != null ? getTaskId() : -1,
|
|
||||||
id != null ? getEventId() : -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object obj) {
|
|
||||||
if (this == obj)
|
|
||||||
return true;
|
|
||||||
if (obj == null || getClass() != obj.getClass())
|
|
||||||
return false;
|
|
||||||
A2ASkillCard that = (A2ASkillCard) obj;
|
|
||||||
return id != null ? id.equals(that.id) : that.id == null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return id != null ? id.hashCode() : 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,436 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Imixs Workflow
|
|
||||||
* Copyright (C) 2001, 2011 Imixs Software Solutions GmbH,
|
|
||||||
* http://www.imixs.com
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* General Public License for more details.
|
|
||||||
*
|
|
||||||
* You can receive a copy of the GNU General Public
|
|
||||||
* License at http://www.gnu.org/licenses/gpl.html
|
|
||||||
*
|
|
||||||
* Project:
|
|
||||||
* http://www.imixs.org
|
|
||||||
* http://java.net/projects/imixs-workflow
|
|
||||||
*
|
|
||||||
* Contributors:
|
|
||||||
* Imixs Software Solutions GmbH - initial API and implementation
|
|
||||||
* Ralph Soika - Software Developer
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
package ai.dynamixs.a2a;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import jakarta.enterprise.context.RequestScoped;
|
|
||||||
import jakarta.inject.Inject;
|
|
||||||
import jakarta.inject.Named;
|
|
||||||
import jakarta.json.Json;
|
|
||||||
import jakarta.json.JsonArray;
|
|
||||||
import jakarta.json.JsonArrayBuilder;
|
|
||||||
import jakarta.json.JsonObject;
|
|
||||||
import jakarta.json.JsonObjectBuilder;
|
|
||||||
import jakarta.ws.rs.Consumes;
|
|
||||||
import jakarta.ws.rs.GET;
|
|
||||||
import jakarta.ws.rs.POST;
|
|
||||||
import jakarta.ws.rs.Path;
|
|
||||||
import jakarta.ws.rs.Produces;
|
|
||||||
import jakarta.ws.rs.core.Context;
|
|
||||||
import jakarta.ws.rs.core.MediaType;
|
|
||||||
import jakarta.ws.rs.core.Response;
|
|
||||||
import jakarta.ws.rs.core.UriInfo;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The TextblockRestService provides methods to access the content of a textbock
|
|
||||||
* in various ways.
|
|
||||||
*
|
|
||||||
* @author rsoika
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@Named
|
|
||||||
@RequestScoped
|
|
||||||
@Path("/a2a/")
|
|
||||||
@Produces({ MediaType.TEXT_HTML, MediaType.APPLICATION_XHTML_XML, MediaType.TEXT_PLAIN })
|
|
||||||
public class A2ASkillCardRestService implements Serializable {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
private static Logger logger = Logger.getLogger(A2ASkillCardRestService.class.getSimpleName());
|
|
||||||
|
|
||||||
@Context
|
|
||||||
UriInfo uriInfo;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
A2ASkillService a2aSkillService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A2A Agent Card Discovery Endpoint According to RFC 8615 - Well-Known URIs
|
|
||||||
* URL: /.well-known/agent.json
|
|
||||||
*/
|
|
||||||
@GET
|
|
||||||
@Path("/.well-known/agent.json")
|
|
||||||
@Produces({ MediaType.APPLICATION_JSON })
|
|
||||||
public Response getAgentCard() {
|
|
||||||
try {
|
|
||||||
JsonObject agentCard = buildAgentCard();
|
|
||||||
return Response.ok(agentCard).build();
|
|
||||||
} catch (Exception e) {
|
|
||||||
logger.severe("Error creating agent card: " + e.getMessage());
|
|
||||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
|
||||||
.entity(buildJsonRpcError(-32603, "Internal server error", null))
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A2A JSON-RPC 2.0 Endpoint All A2A protocol methods are handled here URL:
|
|
||||||
* /a2a/v1 (as specified in Agent Card)
|
|
||||||
*/
|
|
||||||
@POST
|
|
||||||
@Path("/a2a/v1")
|
|
||||||
@Consumes({ MediaType.APPLICATION_JSON })
|
|
||||||
@Produces({ MediaType.APPLICATION_JSON })
|
|
||||||
public Response handleJsonRpcRequest(JsonObject request) {
|
|
||||||
try {
|
|
||||||
// Validate JSON-RPC 2.0 structure
|
|
||||||
if (!isValidJsonRpcRequest(request)) {
|
|
||||||
return Response.status(Response.Status.BAD_REQUEST)
|
|
||||||
.entity(buildJsonRpcError(-32600, "Invalid Request", null))
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
String method = request.getString("method");
|
|
||||||
Object id = request.get("id");
|
|
||||||
JsonObject params = request.getJsonObject("params");
|
|
||||||
|
|
||||||
// Route to appropriate A2A method
|
|
||||||
switch (method) {
|
|
||||||
case "message/send":
|
|
||||||
return handleMessageSend(id, params);
|
|
||||||
case "tasks/get":
|
|
||||||
return handleTasksGet(id, params);
|
|
||||||
case "tasks/cancel":
|
|
||||||
return handleTasksCancel(id, params);
|
|
||||||
case "agent/authenticatedExtendedCard":
|
|
||||||
return handleAuthenticatedExtendedCard(id, params);
|
|
||||||
default:
|
|
||||||
return Response.status(Response.Status.NOT_FOUND)
|
|
||||||
.entity(buildJsonRpcError(-32601, "Method not found", id))
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
logger.severe("Error processing JSON-RPC request: " + e.getMessage());
|
|
||||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
|
||||||
.entity(buildJsonRpcError(-32603, "Internal server error", null))
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Builds the A2A compliant Agent Card
|
|
||||||
*/
|
|
||||||
private JsonObject buildAgentCard() {
|
|
||||||
// Security schemes for authentication
|
|
||||||
JsonObject securitySchemes = Json.createObjectBuilder()
|
|
||||||
.add("bearer", Json.createObjectBuilder()
|
|
||||||
.add("type", "http")
|
|
||||||
.add("scheme", "bearer")
|
|
||||||
.add("bearerFormat", "JWT")
|
|
||||||
.build())
|
|
||||||
.add("apiKey", Json.createObjectBuilder()
|
|
||||||
.add("type", "apiKey")
|
|
||||||
.add("in", "header")
|
|
||||||
.add("name", "X-API-Key")
|
|
||||||
.build())
|
|
||||||
.build();
|
|
||||||
|
|
||||||
// Security requirements
|
|
||||||
JsonArray security = Json.createArrayBuilder()
|
|
||||||
.add(Json.createObjectBuilder()
|
|
||||||
.add("bearer", Json.createArrayBuilder().build())
|
|
||||||
.build())
|
|
||||||
.build();
|
|
||||||
|
|
||||||
// Agent capabilities
|
|
||||||
JsonObject capabilities = Json.createObjectBuilder()
|
|
||||||
.add("streaming", false) // SSE not implemented yet
|
|
||||||
.add("pushNotifications", false) // Push notifications not implemented yet
|
|
||||||
.add("stateTransitionHistory", false)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
// Agent provider information
|
|
||||||
JsonObject provider = Json.createObjectBuilder()
|
|
||||||
.add("organization", "Dynamixs.AI")
|
|
||||||
.add("url", "https://www.dynamixs.ai")
|
|
||||||
.build();
|
|
||||||
|
|
||||||
// Skills array
|
|
||||||
JsonArray skills = buildA2ASkills();
|
|
||||||
|
|
||||||
// Build complete A2A Agent Card
|
|
||||||
JsonObjectBuilder cardBuilder = Json.createObjectBuilder()
|
|
||||||
.add("name", "Dynamixs.AI Processing Agent")
|
|
||||||
.add("description",
|
|
||||||
"An agent for processing business documents and tasks.")
|
|
||||||
.add("url", getBaseUrl() + "a2a/v1") // JSON-RPC endpoint
|
|
||||||
.add("provider", provider)
|
|
||||||
.add("version", "1.0.0")
|
|
||||||
.add("documentationUrl", getBaseUrl() + "docs/a2a")
|
|
||||||
.add("capabilities", capabilities)
|
|
||||||
.add("securitySchemes", securitySchemes)
|
|
||||||
.add("security", security)
|
|
||||||
.add("defaultInputModes", Json.createArrayBuilder()
|
|
||||||
.add("text/plain")
|
|
||||||
.add("application/json")
|
|
||||||
.build())
|
|
||||||
.add("defaultOutputModes", Json.createArrayBuilder()
|
|
||||||
.add("text/plain")
|
|
||||||
.add("application/json")
|
|
||||||
.add("text/html")
|
|
||||||
.build())
|
|
||||||
.add("skills", skills)
|
|
||||||
.add("supportsAuthenticatedExtendedCard", false); // Simplified for now
|
|
||||||
|
|
||||||
return cardBuilder.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Builds A2A compliant skills array
|
|
||||||
*/
|
|
||||||
private JsonArray buildA2ASkills() {
|
|
||||||
|
|
||||||
logger.info("Starting to build A2A skills...");
|
|
||||||
|
|
||||||
List<A2ASkillCard> skills = a2aSkillService.parseModels();
|
|
||||||
logger.info("parseModels() returned " + (skills != null ? skills.size() : "null") + " skills");
|
|
||||||
|
|
||||||
if (skills != null) {
|
|
||||||
for (A2ASkillCard skill : skills) {
|
|
||||||
logger.info("Skill found: " + skill.getId() + " - Valid: " + skill.isValid());
|
|
||||||
if (!skill.isValid()) {
|
|
||||||
logger.warning("Invalid skill: " + skill);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
List<A2ASkillCard> validSkills = skills.stream()
|
|
||||||
.filter(A2ASkillCard::isValid)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
logger.info("Valid skills after filtering: " + validSkills.size());
|
|
||||||
|
|
||||||
return validSkills.stream()
|
|
||||||
.map(A2ASkillCard::toJsonObject)
|
|
||||||
.collect(Json::createArrayBuilder,
|
|
||||||
JsonArrayBuilder::add,
|
|
||||||
JsonArrayBuilder::addAll)
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle A2A message/send method
|
|
||||||
*/
|
|
||||||
private Response handleMessageSend(Object id, JsonObject params) {
|
|
||||||
try {
|
|
||||||
// Extract message from params
|
|
||||||
JsonObject message = params.getJsonObject("message");
|
|
||||||
if (message == null) {
|
|
||||||
return Response.status(Response.Status.BAD_REQUEST)
|
|
||||||
.entity(buildJsonRpcError(-32602, "Invalid params: missing message",
|
|
||||||
id))
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Process the message and create a task
|
|
||||||
String taskId = generateTaskId();
|
|
||||||
String contextId = generateContextId();
|
|
||||||
|
|
||||||
// For demo: create a simple completed task
|
|
||||||
JsonObject task = Json.createObjectBuilder()
|
|
||||||
.add("id", taskId)
|
|
||||||
.add("contextId", contextId)
|
|
||||||
.add("status", Json.createObjectBuilder()
|
|
||||||
.add("state", "completed")
|
|
||||||
.add("timestamp", getCurrentTimestamp())
|
|
||||||
.build())
|
|
||||||
.add("artifacts", Json.createArrayBuilder()
|
|
||||||
.add(Json.createObjectBuilder()
|
|
||||||
.add("artifactId", generateArtifactId())
|
|
||||||
.add("name", "Processing Result")
|
|
||||||
.add("parts", Json.createArrayBuilder()
|
|
||||||
.add(Json.createObjectBuilder()
|
|
||||||
.add("kind", "text")
|
|
||||||
.add("text", "Task completed successfully. Message processed: "
|
|
||||||
+
|
|
||||||
message.getJsonArray(
|
|
||||||
"parts")
|
|
||||||
.getJsonObject(0)
|
|
||||||
.getString("text",
|
|
||||||
""))
|
|
||||||
.build())
|
|
||||||
.build())
|
|
||||||
.build())
|
|
||||||
.build())
|
|
||||||
.add("history", Json.createArrayBuilder()
|
|
||||||
.add(message)
|
|
||||||
.build())
|
|
||||||
.add("kind", "task")
|
|
||||||
.build();
|
|
||||||
|
|
||||||
// Return JSON-RPC success response
|
|
||||||
JsonObject response = Json.createObjectBuilder()
|
|
||||||
.add("jsonrpc", "2.0")
|
|
||||||
.add("id", id.toString())
|
|
||||||
.add("result", task)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
return Response.ok(response).build();
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
logger.severe("Error in message/send: " + e.getMessage());
|
|
||||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
|
||||||
.entity(buildJsonRpcError(-32603, "Internal server error", id))
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle A2A tasks/get method
|
|
||||||
*/
|
|
||||||
private Response handleTasksGet(Object id, JsonObject params) {
|
|
||||||
try {
|
|
||||||
String taskId = params.getString("id");
|
|
||||||
|
|
||||||
// For demo: return a mock task
|
|
||||||
JsonObject task = Json.createObjectBuilder()
|
|
||||||
.add("id", taskId)
|
|
||||||
.add("contextId", generateContextId())
|
|
||||||
.add("status", Json.createObjectBuilder()
|
|
||||||
.add("state", "completed")
|
|
||||||
.add("timestamp", getCurrentTimestamp())
|
|
||||||
.build())
|
|
||||||
.add("kind", "task")
|
|
||||||
.build();
|
|
||||||
|
|
||||||
JsonObject response = Json.createObjectBuilder()
|
|
||||||
.add("jsonrpc", "2.0")
|
|
||||||
.add("id", id.toString())
|
|
||||||
.add("result", task)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
return Response.ok(response).build();
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
logger.severe("Error in tasks/get: " + e.getMessage());
|
|
||||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
|
||||||
.entity(buildJsonRpcError(-32001, "Task not found", id))
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle A2A tasks/cancel method
|
|
||||||
*/
|
|
||||||
private Response handleTasksCancel(Object id, JsonObject params) {
|
|
||||||
try {
|
|
||||||
String taskId = params.getString("id");
|
|
||||||
|
|
||||||
JsonObject task = Json.createObjectBuilder()
|
|
||||||
.add("id", taskId)
|
|
||||||
.add("contextId", generateContextId())
|
|
||||||
.add("status", Json.createObjectBuilder()
|
|
||||||
.add("state", "canceled")
|
|
||||||
.add("timestamp", getCurrentTimestamp())
|
|
||||||
.build())
|
|
||||||
.add("kind", "task")
|
|
||||||
.build();
|
|
||||||
|
|
||||||
JsonObject response = Json.createObjectBuilder()
|
|
||||||
.add("jsonrpc", "2.0")
|
|
||||||
.add("id", id.toString())
|
|
||||||
.add("result", task)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
return Response.ok(response).build();
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
|
||||||
.entity(buildJsonRpcError(-32002, "Task cannot be canceled", id))
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle authenticated extended card (not implemented)
|
|
||||||
*/
|
|
||||||
private Response handleAuthenticatedExtendedCard(Object id, JsonObject params) {
|
|
||||||
return Response.status(Response.Status.NOT_IMPLEMENTED)
|
|
||||||
.entity(buildJsonRpcError(-32004, "This operation is not supported", id))
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates JSON-RPC 2.0 request structure
|
|
||||||
*/
|
|
||||||
private boolean isValidJsonRpcRequest(JsonObject request) {
|
|
||||||
return request.containsKey("jsonrpc") &&
|
|
||||||
"2.0".equals(request.getString("jsonrpc")) &&
|
|
||||||
request.containsKey("method") &&
|
|
||||||
request.containsKey("id");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Builds a JSON-RPC 2.0 error response
|
|
||||||
*/
|
|
||||||
private JsonObject buildJsonRpcError(int code, String message, Object id) {
|
|
||||||
JsonObjectBuilder errorBuilder = Json.createObjectBuilder()
|
|
||||||
.add("code", code)
|
|
||||||
.add("message", message);
|
|
||||||
|
|
||||||
JsonObjectBuilder responseBuilder = Json.createObjectBuilder()
|
|
||||||
.add("jsonrpc", "2.0")
|
|
||||||
.add("error", errorBuilder.build());
|
|
||||||
|
|
||||||
if (id != null) {
|
|
||||||
responseBuilder.add("id", id.toString());
|
|
||||||
} else {
|
|
||||||
responseBuilder.addNull("id");
|
|
||||||
}
|
|
||||||
|
|
||||||
return responseBuilder.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper methods for generating IDs and timestamps
|
|
||||||
*/
|
|
||||||
private String generateTaskId() {
|
|
||||||
return java.util.UUID.randomUUID().toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
private String generateContextId() {
|
|
||||||
return java.util.UUID.randomUUID().toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
private String generateArtifactId() {
|
|
||||||
return java.util.UUID.randomUUID().toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getCurrentTimestamp() {
|
|
||||||
return java.time.Instant.now().toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getBaseUrl() {
|
|
||||||
return uriInfo.getBaseUri().toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,152 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Imixs Workflow
|
|
||||||
* Copyright (C) 2001, 2011 Imixs Software Solutions GmbH,
|
|
||||||
* http://www.imixs.com
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* General Public License for more details.
|
|
||||||
*
|
|
||||||
* You can receive a copy of the GNU General Public
|
|
||||||
* License at http://www.gnu.org/licenses/gpl.html
|
|
||||||
*
|
|
||||||
* Project:
|
|
||||||
* http://www.imixs.org
|
|
||||||
* http://java.net/projects/imixs-workflow
|
|
||||||
*
|
|
||||||
* Contributors:
|
|
||||||
* Imixs Software Solutions GmbH - initial API and implementation
|
|
||||||
* Ralph Soika - Software Developer
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
package ai.dynamixs.a2a;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.imixs.workflow.ItemCollection;
|
|
||||||
import org.imixs.workflow.ModelManager;
|
|
||||||
import org.imixs.workflow.engine.ModelService;
|
|
||||||
import org.imixs.workflow.engine.WorkflowService;
|
|
||||||
import org.imixs.workflow.exceptions.ModelException;
|
|
||||||
import org.imixs.workflow.exceptions.PluginException;
|
|
||||||
import org.openbpmn.bpmn.BPMNModel;
|
|
||||||
|
|
||||||
import jakarta.annotation.security.DeclareRoles;
|
|
||||||
import jakarta.annotation.security.RolesAllowed;
|
|
||||||
import jakarta.ejb.LocalBean;
|
|
||||||
import jakarta.ejb.Stateless;
|
|
||||||
import jakarta.inject.Inject;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The A2ASkillService parses the model information to provide A2ASkillCards
|
|
||||||
*
|
|
||||||
* @author rsoika
|
|
||||||
*/
|
|
||||||
@DeclareRoles({ "org.imixs.ACCESSLEVEL.NOACCESS",
|
|
||||||
"org.imixs.ACCESSLEVEL.READERACCESS",
|
|
||||||
"org.imixs.ACCESSLEVEL.AUTHORACCESS",
|
|
||||||
"org.imixs.ACCESSLEVEL.EDITORACCESS",
|
|
||||||
"org.imixs.ACCESSLEVEL.MANAGERACCESS" })
|
|
||||||
@RolesAllowed({ "org.imixs.ACCESSLEVEL.NOACCESS",
|
|
||||||
"org.imixs.ACCESSLEVEL.READERACCESS",
|
|
||||||
"org.imixs.ACCESSLEVEL.AUTHORACCESS",
|
|
||||||
"org.imixs.ACCESSLEVEL.EDITORACCESS",
|
|
||||||
"org.imixs.ACCESSLEVEL.MANAGERACCESS" })
|
|
||||||
@Stateless
|
|
||||||
@LocalBean
|
|
||||||
public class A2ASkillService {
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
ModelService modelService;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
WorkflowService workflowService;
|
|
||||||
|
|
||||||
private static Logger logger = Logger.getLogger(A2ASkillService.class
|
|
||||||
.getName());
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method iterates over all models and returns a list of skill card objects
|
|
||||||
*
|
|
||||||
* The method tests if a event has a <imixs-ai name="SKILL"> tag.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public List<A2ASkillCard> parseModels() {
|
|
||||||
logger.log(Level.INFO, "├── 🔃 parsing A2A SkillCards....");
|
|
||||||
List<A2ASkillCard> result = new ArrayList<>();
|
|
||||||
ModelManager modelManager = new ModelManager(workflowService);
|
|
||||||
List<String> versions = modelService.getVersions();
|
|
||||||
|
|
||||||
try {
|
|
||||||
|
|
||||||
for (String version : versions) {
|
|
||||||
logger.log(Level.INFO, "│ ├── {0}", version);
|
|
||||||
BPMNModel model = modelManager.getModel(version);
|
|
||||||
|
|
||||||
Set<String> groups = modelManager.findAllGroupsByModel(model);
|
|
||||||
for (String group : groups) {
|
|
||||||
List<ItemCollection> tasks = modelManager.findTasks(model, group);
|
|
||||||
for (ItemCollection task : tasks) {
|
|
||||||
int taskID = task.getItemValueInteger("taskid");
|
|
||||||
List<ItemCollection> events = modelManager.findEventsByTask(model, taskID);
|
|
||||||
|
|
||||||
for (ItemCollection event : events) {
|
|
||||||
int eventID = event.getItemValueInteger("eventid");
|
|
||||||
// test if we have a <imixs-ai name="SKILL">
|
|
||||||
try {
|
|
||||||
List<ItemCollection> llmPromptDefinitions = workflowService.evalWorkflowResultXML(event,
|
|
||||||
"imixs-ai",
|
|
||||||
"SKILL", null, false);
|
|
||||||
// did we found a skill?
|
|
||||||
for (ItemCollection skillItemCol : llmPromptDefinitions) {
|
|
||||||
A2ASkillCard skillCard = new A2ASkillCard(version, taskID, eventID);
|
|
||||||
|
|
||||||
skillCard.setName(event.getItemValueString("name"));
|
|
||||||
skillCard.setDescription(skillItemCol.getItemValueString("description"));
|
|
||||||
String tags = skillItemCol.getItemValueString("tags");
|
|
||||||
if (tags != null && !tags.isBlank()) {
|
|
||||||
String[] parts = tags.split(",\\s*");
|
|
||||||
skillCard.setTags(Arrays.asList(parts));
|
|
||||||
}
|
|
||||||
|
|
||||||
skillCard.setExamples(skillItemCol.getItemValueList("example", String.class));
|
|
||||||
|
|
||||||
// skillCard.addMetadata("aea", versions);
|
|
||||||
|
|
||||||
if (skillCard.isValid()) {
|
|
||||||
result.add(skillCard);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (PluginException e) {
|
|
||||||
// no match
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
} catch (ModelException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
||||||
Imixs-Office-Workflow
|
|
||||||
Copyright (C) 2001-2018 Imixs Software Solutions GmbH,
|
|
||||||
http://www.imixs.com
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
|
|
||||||
Project:
|
|
||||||
http://www.imixs.org
|
|
||||||
|
|
||||||
Contributors:
|
|
||||||
Imixs Software Solutions GmbH - initial API and implementation
|
|
||||||
Ralph Soika - Software Developer
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,621 +0,0 @@
|
||||||
GNU GENERAL PUBLIC LICENSE
|
|
||||||
Version 3, 29 June 2007
|
|
||||||
|
|
||||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The GNU General Public License is a free, copyleft license for
|
|
||||||
software and other kinds of works.
|
|
||||||
|
|
||||||
The licenses for most software and other practical works are designed
|
|
||||||
to take away your freedom to share and change the works. By contrast,
|
|
||||||
the GNU General Public License is intended to guarantee your freedom to
|
|
||||||
share and change all versions of a program--to make sure it remains free
|
|
||||||
software for all its users. We, the Free Software Foundation, use the
|
|
||||||
GNU General Public License for most of our software; it applies also to
|
|
||||||
any other work released this way by its authors. You can apply it to
|
|
||||||
your programs, too.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
|
||||||
have the freedom to distribute copies of free software (and charge for
|
|
||||||
them if you wish), that you receive source code or can get it if you
|
|
||||||
want it, that you can change the software or use pieces of it in new
|
|
||||||
free programs, and that you know you can do these things.
|
|
||||||
|
|
||||||
To protect your rights, we need to prevent others from denying you
|
|
||||||
these rights or asking you to surrender the rights. Therefore, you have
|
|
||||||
certain responsibilities if you distribute copies of the software, or if
|
|
||||||
you modify it: responsibilities to respect the freedom of others.
|
|
||||||
|
|
||||||
For example, if you distribute copies of such a program, whether
|
|
||||||
gratis or for a fee, you must pass on to the recipients the same
|
|
||||||
freedoms that you received. You must make sure that they, too, receive
|
|
||||||
or can get the source code. And you must show them these terms so they
|
|
||||||
know their rights.
|
|
||||||
|
|
||||||
Developers that use the GNU GPL protect your rights with two steps:
|
|
||||||
(1) assert copyright on the software, and (2) offer you this License
|
|
||||||
giving you legal permission to copy, distribute and/or modify it.
|
|
||||||
|
|
||||||
For the developers' and authors' protection, the GPL clearly explains
|
|
||||||
that there is no warranty for this free software. For both users' and
|
|
||||||
authors' sake, the GPL requires that modified versions be marked as
|
|
||||||
changed, so that their problems will not be attributed erroneously to
|
|
||||||
authors of previous versions.
|
|
||||||
|
|
||||||
Some devices are designed to deny users access to install or run
|
|
||||||
modified versions of the software inside them, although the manufacturer
|
|
||||||
can do so. This is fundamentally incompatible with the aim of
|
|
||||||
protecting users' freedom to change the software. The systematic
|
|
||||||
pattern of such abuse occurs in the area of products for individuals to
|
|
||||||
use, which is precisely where it is most unacceptable. Therefore, we
|
|
||||||
have designed this version of the GPL to prohibit the practice for those
|
|
||||||
products. If such problems arise substantially in other domains, we
|
|
||||||
stand ready to extend this provision to those domains in future versions
|
|
||||||
of the GPL, as needed to protect the freedom of users.
|
|
||||||
|
|
||||||
Finally, every program is threatened constantly by software patents.
|
|
||||||
States should not allow patents to restrict development and use of
|
|
||||||
software on general-purpose computers, but in those that do, we wish to
|
|
||||||
avoid the special danger that patents applied to a free program could
|
|
||||||
make it effectively proprietary. To prevent this, the GPL assures that
|
|
||||||
patents cannot be used to render the program non-free.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow.
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
0. Definitions.
|
|
||||||
|
|
||||||
"This License" refers to version 3 of the GNU General Public License.
|
|
||||||
|
|
||||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
|
||||||
works, such as semiconductor masks.
|
|
||||||
|
|
||||||
"The Program" refers to any copyrightable work licensed under this
|
|
||||||
License. Each licensee is addressed as "you". "Licensees" and
|
|
||||||
"recipients" may be individuals or organizations.
|
|
||||||
|
|
||||||
To "modify" a work means to copy from or adapt all or part of the work
|
|
||||||
in a fashion requiring copyright permission, other than the making of an
|
|
||||||
exact copy. The resulting work is called a "modified version" of the
|
|
||||||
earlier work or a work "based on" the earlier work.
|
|
||||||
|
|
||||||
A "covered work" means either the unmodified Program or a work based
|
|
||||||
on the Program.
|
|
||||||
|
|
||||||
To "propagate" a work means to do anything with it that, without
|
|
||||||
permission, would make you directly or secondarily liable for
|
|
||||||
infringement under applicable copyright law, except executing it on a
|
|
||||||
computer or modifying a private copy. Propagation includes copying,
|
|
||||||
distribution (with or without modification), making available to the
|
|
||||||
public, and in some countries other activities as well.
|
|
||||||
|
|
||||||
To "convey" a work means any kind of propagation that enables other
|
|
||||||
parties to make or receive copies. Mere interaction with a user through
|
|
||||||
a computer network, with no transfer of a copy, is not conveying.
|
|
||||||
|
|
||||||
An interactive user interface displays "Appropriate Legal Notices"
|
|
||||||
to the extent that it includes a convenient and prominently visible
|
|
||||||
feature that (1) displays an appropriate copyright notice, and (2)
|
|
||||||
tells the user that there is no warranty for the work (except to the
|
|
||||||
extent that warranties are provided), that licensees may convey the
|
|
||||||
work under this License, and how to view a copy of this License. If
|
|
||||||
the interface presents a list of user commands or options, such as a
|
|
||||||
menu, a prominent item in the list meets this criterion.
|
|
||||||
|
|
||||||
1. Source Code.
|
|
||||||
|
|
||||||
The "source code" for a work means the preferred form of the work
|
|
||||||
for making modifications to it. "Object code" means any non-source
|
|
||||||
form of a work.
|
|
||||||
|
|
||||||
A "Standard Interface" means an interface that either is an official
|
|
||||||
standard defined by a recognized standards body, or, in the case of
|
|
||||||
interfaces specified for a particular programming language, one that
|
|
||||||
is widely used among developers working in that language.
|
|
||||||
|
|
||||||
The "System Libraries" of an executable work include anything, other
|
|
||||||
than the work as a whole, that (a) is included in the normal form of
|
|
||||||
packaging a Major Component, but which is not part of that Major
|
|
||||||
Component, and (b) serves only to enable use of the work with that
|
|
||||||
Major Component, or to implement a Standard Interface for which an
|
|
||||||
implementation is available to the public in source code form. A
|
|
||||||
"Major Component", in this context, means a major essential component
|
|
||||||
(kernel, window system, and so on) of the specific operating system
|
|
||||||
(if any) on which the executable work runs, or a compiler used to
|
|
||||||
produce the work, or an object code interpreter used to run it.
|
|
||||||
|
|
||||||
The "Corresponding Source" for a work in object code form means all
|
|
||||||
the source code needed to generate, install, and (for an executable
|
|
||||||
work) run the object code and to modify the work, including scripts to
|
|
||||||
control those activities. However, it does not include the work's
|
|
||||||
System Libraries, or general-purpose tools or generally available free
|
|
||||||
programs which are used unmodified in performing those activities but
|
|
||||||
which are not part of the work. For example, Corresponding Source
|
|
||||||
includes interface definition files associated with source files for
|
|
||||||
the work, and the source code for shared libraries and dynamically
|
|
||||||
linked subprograms that the work is specifically designed to require,
|
|
||||||
such as by intimate data communication or control flow between those
|
|
||||||
subprograms and other parts of the work.
|
|
||||||
|
|
||||||
The Corresponding Source need not include anything that users
|
|
||||||
can regenerate automatically from other parts of the Corresponding
|
|
||||||
Source.
|
|
||||||
|
|
||||||
The Corresponding Source for a work in source code form is that
|
|
||||||
same work.
|
|
||||||
|
|
||||||
2. Basic Permissions.
|
|
||||||
|
|
||||||
All rights granted under this License are granted for the term of
|
|
||||||
copyright on the Program, and are irrevocable provided the stated
|
|
||||||
conditions are met. This License explicitly affirms your unlimited
|
|
||||||
permission to run the unmodified Program. The output from running a
|
|
||||||
covered work is covered by this License only if the output, given its
|
|
||||||
content, constitutes a covered work. This License acknowledges your
|
|
||||||
rights of fair use or other equivalent, as provided by copyright law.
|
|
||||||
|
|
||||||
You may make, run and propagate covered works that you do not
|
|
||||||
convey, without conditions so long as your license otherwise remains
|
|
||||||
in force. You may convey covered works to others for the sole purpose
|
|
||||||
of having them make modifications exclusively for you, or provide you
|
|
||||||
with facilities for running those works, provided that you comply with
|
|
||||||
the terms of this License in conveying all material for which you do
|
|
||||||
not control copyright. Those thus making or running the covered works
|
|
||||||
for you must do so exclusively on your behalf, under your direction
|
|
||||||
and control, on terms that prohibit them from making any copies of
|
|
||||||
your copyrighted material outside their relationship with you.
|
|
||||||
|
|
||||||
Conveying under any other circumstances is permitted solely under
|
|
||||||
the conditions stated below. Sublicensing is not allowed; section 10
|
|
||||||
makes it unnecessary.
|
|
||||||
|
|
||||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
|
||||||
|
|
||||||
No covered work shall be deemed part of an effective technological
|
|
||||||
measure under any applicable law fulfilling obligations under article
|
|
||||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
|
||||||
similar laws prohibiting or restricting circumvention of such
|
|
||||||
measures.
|
|
||||||
|
|
||||||
When you convey a covered work, you waive any legal power to forbid
|
|
||||||
circumvention of technological measures to the extent such circumvention
|
|
||||||
is effected by exercising rights under this License with respect to
|
|
||||||
the covered work, and you disclaim any intention to limit operation or
|
|
||||||
modification of the work as a means of enforcing, against the work's
|
|
||||||
users, your or third parties' legal rights to forbid circumvention of
|
|
||||||
technological measures.
|
|
||||||
|
|
||||||
4. Conveying Verbatim Copies.
|
|
||||||
|
|
||||||
You may convey verbatim copies of the Program's source code as you
|
|
||||||
receive it, in any medium, provided that you conspicuously and
|
|
||||||
appropriately publish on each copy an appropriate copyright notice;
|
|
||||||
keep intact all notices stating that this License and any
|
|
||||||
non-permissive terms added in accord with section 7 apply to the code;
|
|
||||||
keep intact all notices of the absence of any warranty; and give all
|
|
||||||
recipients a copy of this License along with the Program.
|
|
||||||
|
|
||||||
You may charge any price or no price for each copy that you convey,
|
|
||||||
and you may offer support or warranty protection for a fee.
|
|
||||||
|
|
||||||
5. Conveying Modified Source Versions.
|
|
||||||
|
|
||||||
You may convey a work based on the Program, or the modifications to
|
|
||||||
produce it from the Program, in the form of source code under the
|
|
||||||
terms of section 4, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) The work must carry prominent notices stating that you modified
|
|
||||||
it, and giving a relevant date.
|
|
||||||
|
|
||||||
b) The work must carry prominent notices stating that it is
|
|
||||||
released under this License and any conditions added under section
|
|
||||||
7. This requirement modifies the requirement in section 4 to
|
|
||||||
"keep intact all notices".
|
|
||||||
|
|
||||||
c) You must license the entire work, as a whole, under this
|
|
||||||
License to anyone who comes into possession of a copy. This
|
|
||||||
License will therefore apply, along with any applicable section 7
|
|
||||||
additional terms, to the whole of the work, and all its parts,
|
|
||||||
regardless of how they are packaged. This License gives no
|
|
||||||
permission to license the work in any other way, but it does not
|
|
||||||
invalidate such permission if you have separately received it.
|
|
||||||
|
|
||||||
d) If the work has interactive user interfaces, each must display
|
|
||||||
Appropriate Legal Notices; however, if the Program has interactive
|
|
||||||
interfaces that do not display Appropriate Legal Notices, your
|
|
||||||
work need not make them do so.
|
|
||||||
|
|
||||||
A compilation of a covered work with other separate and independent
|
|
||||||
works, which are not by their nature extensions of the covered work,
|
|
||||||
and which are not combined with it such as to form a larger program,
|
|
||||||
in or on a volume of a storage or distribution medium, is called an
|
|
||||||
"aggregate" if the compilation and its resulting copyright are not
|
|
||||||
used to limit the access or legal rights of the compilation's users
|
|
||||||
beyond what the individual works permit. Inclusion of a covered work
|
|
||||||
in an aggregate does not cause this License to apply to the other
|
|
||||||
parts of the aggregate.
|
|
||||||
|
|
||||||
6. Conveying Non-Source Forms.
|
|
||||||
|
|
||||||
You may convey a covered work in object code form under the terms
|
|
||||||
of sections 4 and 5, provided that you also convey the
|
|
||||||
machine-readable Corresponding Source under the terms of this License,
|
|
||||||
in one of these ways:
|
|
||||||
|
|
||||||
a) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by the
|
|
||||||
Corresponding Source fixed on a durable physical medium
|
|
||||||
customarily used for software interchange.
|
|
||||||
|
|
||||||
b) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by a
|
|
||||||
written offer, valid for at least three years and valid for as
|
|
||||||
long as you offer spare parts or customer support for that product
|
|
||||||
model, to give anyone who possesses the object code either (1) a
|
|
||||||
copy of the Corresponding Source for all the software in the
|
|
||||||
product that is covered by this License, on a durable physical
|
|
||||||
medium customarily used for software interchange, for a price no
|
|
||||||
more than your reasonable cost of physically performing this
|
|
||||||
conveying of source, or (2) access to copy the
|
|
||||||
Corresponding Source from a network server at no charge.
|
|
||||||
|
|
||||||
c) Convey individual copies of the object code with a copy of the
|
|
||||||
written offer to provide the Corresponding Source. This
|
|
||||||
alternative is allowed only occasionally and noncommercially, and
|
|
||||||
only if you received the object code with such an offer, in accord
|
|
||||||
with subsection 6b.
|
|
||||||
|
|
||||||
d) Convey the object code by offering access from a designated
|
|
||||||
place (gratis or for a charge), and offer equivalent access to the
|
|
||||||
Corresponding Source in the same way through the same place at no
|
|
||||||
further charge. You need not require recipients to copy the
|
|
||||||
Corresponding Source along with the object code. If the place to
|
|
||||||
copy the object code is a network server, the Corresponding Source
|
|
||||||
may be on a different server (operated by you or a third party)
|
|
||||||
that supports equivalent copying facilities, provided you maintain
|
|
||||||
clear directions next to the object code saying where to find the
|
|
||||||
Corresponding Source. Regardless of what server hosts the
|
|
||||||
Corresponding Source, you remain obligated to ensure that it is
|
|
||||||
available for as long as needed to satisfy these requirements.
|
|
||||||
|
|
||||||
e) Convey the object code using peer-to-peer transmission, provided
|
|
||||||
you inform other peers where the object code and Corresponding
|
|
||||||
Source of the work are being offered to the general public at no
|
|
||||||
charge under subsection 6d.
|
|
||||||
|
|
||||||
A separable portion of the object code, whose source code is excluded
|
|
||||||
from the Corresponding Source as a System Library, need not be
|
|
||||||
included in conveying the object code work.
|
|
||||||
|
|
||||||
A "User Product" is either (1) a "consumer product", which means any
|
|
||||||
tangible personal property which is normally used for personal, family,
|
|
||||||
or household purposes, or (2) anything designed or sold for incorporation
|
|
||||||
into a dwelling. In determining whether a product is a consumer product,
|
|
||||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
|
||||||
product received by a particular user, "normally used" refers to a
|
|
||||||
typical or common use of that class of product, regardless of the status
|
|
||||||
of the particular user or of the way in which the particular user
|
|
||||||
actually uses, or expects or is expected to use, the product. A product
|
|
||||||
is a consumer product regardless of whether the product has substantial
|
|
||||||
commercial, industrial or non-consumer uses, unless such uses represent
|
|
||||||
the only significant mode of use of the product.
|
|
||||||
|
|
||||||
"Installation Information" for a User Product means any methods,
|
|
||||||
procedures, authorization keys, or other information required to install
|
|
||||||
and execute modified versions of a covered work in that User Product from
|
|
||||||
a modified version of its Corresponding Source. The information must
|
|
||||||
suffice to ensure that the continued functioning of the modified object
|
|
||||||
code is in no case prevented or interfered with solely because
|
|
||||||
modification has been made.
|
|
||||||
|
|
||||||
If you convey an object code work under this section in, or with, or
|
|
||||||
specifically for use in, a User Product, and the conveying occurs as
|
|
||||||
part of a transaction in which the right of possession and use of the
|
|
||||||
User Product is transferred to the recipient in perpetuity or for a
|
|
||||||
fixed term (regardless of how the transaction is characterized), the
|
|
||||||
Corresponding Source conveyed under this section must be accompanied
|
|
||||||
by the Installation Information. But this requirement does not apply
|
|
||||||
if neither you nor any third party retains the ability to install
|
|
||||||
modified object code on the User Product (for example, the work has
|
|
||||||
been installed in ROM).
|
|
||||||
|
|
||||||
The requirement to provide Installation Information does not include a
|
|
||||||
requirement to continue to provide support service, warranty, or updates
|
|
||||||
for a work that has been modified or installed by the recipient, or for
|
|
||||||
the User Product in which it has been modified or installed. Access to a
|
|
||||||
network may be denied when the modification itself materially and
|
|
||||||
adversely affects the operation of the network or violates the rules and
|
|
||||||
protocols for communication across the network.
|
|
||||||
|
|
||||||
Corresponding Source conveyed, and Installation Information provided,
|
|
||||||
in accord with this section must be in a format that is publicly
|
|
||||||
documented (and with an implementation available to the public in
|
|
||||||
source code form), and must require no special password or key for
|
|
||||||
unpacking, reading or copying.
|
|
||||||
|
|
||||||
7. Additional Terms.
|
|
||||||
|
|
||||||
"Additional permissions" are terms that supplement the terms of this
|
|
||||||
License by making exceptions from one or more of its conditions.
|
|
||||||
Additional permissions that are applicable to the entire Program shall
|
|
||||||
be treated as though they were included in this License, to the extent
|
|
||||||
that they are valid under applicable law. If additional permissions
|
|
||||||
apply only to part of the Program, that part may be used separately
|
|
||||||
under those permissions, but the entire Program remains governed by
|
|
||||||
this License without regard to the additional permissions.
|
|
||||||
|
|
||||||
When you convey a copy of a covered work, you may at your option
|
|
||||||
remove any additional permissions from that copy, or from any part of
|
|
||||||
it. (Additional permissions may be written to require their own
|
|
||||||
removal in certain cases when you modify the work.) You may place
|
|
||||||
additional permissions on material, added by you to a covered work,
|
|
||||||
for which you have or can give appropriate copyright permission.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, for material you
|
|
||||||
add to a covered work, you may (if authorized by the copyright holders of
|
|
||||||
that material) supplement the terms of this License with terms:
|
|
||||||
|
|
||||||
a) Disclaiming warranty or limiting liability differently from the
|
|
||||||
terms of sections 15 and 16 of this License; or
|
|
||||||
|
|
||||||
b) Requiring preservation of specified reasonable legal notices or
|
|
||||||
author attributions in that material or in the Appropriate Legal
|
|
||||||
Notices displayed by works containing it; or
|
|
||||||
|
|
||||||
c) Prohibiting misrepresentation of the origin of that material, or
|
|
||||||
requiring that modified versions of such material be marked in
|
|
||||||
reasonable ways as different from the original version; or
|
|
||||||
|
|
||||||
d) Limiting the use for publicity purposes of names of licensors or
|
|
||||||
authors of the material; or
|
|
||||||
|
|
||||||
e) Declining to grant rights under trademark law for use of some
|
|
||||||
trade names, trademarks, or service marks; or
|
|
||||||
|
|
||||||
f) Requiring indemnification of licensors and authors of that
|
|
||||||
material by anyone who conveys the material (or modified versions of
|
|
||||||
it) with contractual assumptions of liability to the recipient, for
|
|
||||||
any liability that these contractual assumptions directly impose on
|
|
||||||
those licensors and authors.
|
|
||||||
|
|
||||||
All other non-permissive additional terms are considered "further
|
|
||||||
restrictions" within the meaning of section 10. If the Program as you
|
|
||||||
received it, or any part of it, contains a notice stating that it is
|
|
||||||
governed by this License along with a term that is a further
|
|
||||||
restriction, you may remove that term. If a license document contains
|
|
||||||
a further restriction but permits relicensing or conveying under this
|
|
||||||
License, you may add to a covered work material governed by the terms
|
|
||||||
of that license document, provided that the further restriction does
|
|
||||||
not survive such relicensing or conveying.
|
|
||||||
|
|
||||||
If you add terms to a covered work in accord with this section, you
|
|
||||||
must place, in the relevant source files, a statement of the
|
|
||||||
additional terms that apply to those files, or a notice indicating
|
|
||||||
where to find the applicable terms.
|
|
||||||
|
|
||||||
Additional terms, permissive or non-permissive, may be stated in the
|
|
||||||
form of a separately written license, or stated as exceptions;
|
|
||||||
the above requirements apply either way.
|
|
||||||
|
|
||||||
8. Termination.
|
|
||||||
|
|
||||||
You may not propagate or modify a covered work except as expressly
|
|
||||||
provided under this License. Any attempt otherwise to propagate or
|
|
||||||
modify it is void, and will automatically terminate your rights under
|
|
||||||
this License (including any patent licenses granted under the third
|
|
||||||
paragraph of section 11).
|
|
||||||
|
|
||||||
However, if you cease all violation of this License, then your
|
|
||||||
license from a particular copyright holder is reinstated (a)
|
|
||||||
provisionally, unless and until the copyright holder explicitly and
|
|
||||||
finally terminates your license, and (b) permanently, if the copyright
|
|
||||||
holder fails to notify you of the violation by some reasonable means
|
|
||||||
prior to 60 days after the cessation.
|
|
||||||
|
|
||||||
Moreover, your license from a particular copyright holder is
|
|
||||||
reinstated permanently if the copyright holder notifies you of the
|
|
||||||
violation by some reasonable means, this is the first time you have
|
|
||||||
received notice of violation of this License (for any work) from that
|
|
||||||
copyright holder, and you cure the violation prior to 30 days after
|
|
||||||
your receipt of the notice.
|
|
||||||
|
|
||||||
Termination of your rights under this section does not terminate the
|
|
||||||
licenses of parties who have received copies or rights from you under
|
|
||||||
this License. If your rights have been terminated and not permanently
|
|
||||||
reinstated, you do not qualify to receive new licenses for the same
|
|
||||||
material under section 10.
|
|
||||||
|
|
||||||
9. Acceptance Not Required for Having Copies.
|
|
||||||
|
|
||||||
You are not required to accept this License in order to receive or
|
|
||||||
run a copy of the Program. Ancillary propagation of a covered work
|
|
||||||
occurring solely as a consequence of using peer-to-peer transmission
|
|
||||||
to receive a copy likewise does not require acceptance. However,
|
|
||||||
nothing other than this License grants you permission to propagate or
|
|
||||||
modify any covered work. These actions infringe copyright if you do
|
|
||||||
not accept this License. Therefore, by modifying or propagating a
|
|
||||||
covered work, you indicate your acceptance of this License to do so.
|
|
||||||
|
|
||||||
10. Automatic Licensing of Downstream Recipients.
|
|
||||||
|
|
||||||
Each time you convey a covered work, the recipient automatically
|
|
||||||
receives a license from the original licensors, to run, modify and
|
|
||||||
propagate that work, subject to this License. You are not responsible
|
|
||||||
for enforcing compliance by third parties with this License.
|
|
||||||
|
|
||||||
An "entity transaction" is a transaction transferring control of an
|
|
||||||
organization, or substantially all assets of one, or subdividing an
|
|
||||||
organization, or merging organizations. If propagation of a covered
|
|
||||||
work results from an entity transaction, each party to that
|
|
||||||
transaction who receives a copy of the work also receives whatever
|
|
||||||
licenses to the work the party's predecessor in interest had or could
|
|
||||||
give under the previous paragraph, plus a right to possession of the
|
|
||||||
Corresponding Source of the work from the predecessor in interest, if
|
|
||||||
the predecessor has it or can get it with reasonable efforts.
|
|
||||||
|
|
||||||
You may not impose any further restrictions on the exercise of the
|
|
||||||
rights granted or affirmed under this License. For example, you may
|
|
||||||
not impose a license fee, royalty, or other charge for exercise of
|
|
||||||
rights granted under this License, and you may not initiate litigation
|
|
||||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
|
||||||
any patent claim is infringed by making, using, selling, offering for
|
|
||||||
sale, or importing the Program or any portion of it.
|
|
||||||
|
|
||||||
11. Patents.
|
|
||||||
|
|
||||||
A "contributor" is a copyright holder who authorizes use under this
|
|
||||||
License of the Program or a work on which the Program is based. The
|
|
||||||
work thus licensed is called the contributor's "contributor version".
|
|
||||||
|
|
||||||
A contributor's "essential patent claims" are all patent claims
|
|
||||||
owned or controlled by the contributor, whether already acquired or
|
|
||||||
hereafter acquired, that would be infringed by some manner, permitted
|
|
||||||
by this License, of making, using, or selling its contributor version,
|
|
||||||
but do not include claims that would be infringed only as a
|
|
||||||
consequence of further modification of the contributor version. For
|
|
||||||
purposes of this definition, "control" includes the right to grant
|
|
||||||
patent sublicenses in a manner consistent with the requirements of
|
|
||||||
this License.
|
|
||||||
|
|
||||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
|
||||||
patent license under the contributor's essential patent claims, to
|
|
||||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
|
||||||
propagate the contents of its contributor version.
|
|
||||||
|
|
||||||
In the following three paragraphs, a "patent license" is any express
|
|
||||||
agreement or commitment, however denominated, not to enforce a patent
|
|
||||||
(such as an express permission to practice a patent or covenant not to
|
|
||||||
sue for patent infringement). To "grant" such a patent license to a
|
|
||||||
party means to make such an agreement or commitment not to enforce a
|
|
||||||
patent against the party.
|
|
||||||
|
|
||||||
If you convey a covered work, knowingly relying on a patent license,
|
|
||||||
and the Corresponding Source of the work is not available for anyone
|
|
||||||
to copy, free of charge and under the terms of this License, through a
|
|
||||||
publicly available network server or other readily accessible means,
|
|
||||||
then you must either (1) cause the Corresponding Source to be so
|
|
||||||
available, or (2) arrange to deprive yourself of the benefit of the
|
|
||||||
patent license for this particular work, or (3) arrange, in a manner
|
|
||||||
consistent with the requirements of this License, to extend the patent
|
|
||||||
license to downstream recipients. "Knowingly relying" means you have
|
|
||||||
actual knowledge that, but for the patent license, your conveying the
|
|
||||||
covered work in a country, or your recipient's use of the covered work
|
|
||||||
in a country, would infringe one or more identifiable patents in that
|
|
||||||
country that you have reason to believe are valid.
|
|
||||||
|
|
||||||
If, pursuant to or in connection with a single transaction or
|
|
||||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
|
||||||
covered work, and grant a patent license to some of the parties
|
|
||||||
receiving the covered work authorizing them to use, propagate, modify
|
|
||||||
or convey a specific copy of the covered work, then the patent license
|
|
||||||
you grant is automatically extended to all recipients of the covered
|
|
||||||
work and works based on it.
|
|
||||||
|
|
||||||
A patent license is "discriminatory" if it does not include within
|
|
||||||
the scope of its coverage, prohibits the exercise of, or is
|
|
||||||
conditioned on the non-exercise of one or more of the rights that are
|
|
||||||
specifically granted under this License. You may not convey a covered
|
|
||||||
work if you are a party to an arrangement with a third party that is
|
|
||||||
in the business of distributing software, under which you make payment
|
|
||||||
to the third party based on the extent of your activity of conveying
|
|
||||||
the work, and under which the third party grants, to any of the
|
|
||||||
parties who would receive the covered work from you, a discriminatory
|
|
||||||
patent license (a) in connection with copies of the covered work
|
|
||||||
conveyed by you (or copies made from those copies), or (b) primarily
|
|
||||||
for and in connection with specific products or compilations that
|
|
||||||
contain the covered work, unless you entered into that arrangement,
|
|
||||||
or that patent license was granted, prior to 28 March 2007.
|
|
||||||
|
|
||||||
Nothing in this License shall be construed as excluding or limiting
|
|
||||||
any implied license or other defenses to infringement that may
|
|
||||||
otherwise be available to you under applicable patent law.
|
|
||||||
|
|
||||||
12. No Surrender of Others' Freedom.
|
|
||||||
|
|
||||||
If conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot convey a
|
|
||||||
covered work so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you may
|
|
||||||
not convey it at all. For example, if you agree to terms that obligate you
|
|
||||||
to collect a royalty for further conveying from those to whom you convey
|
|
||||||
the Program, the only way you could satisfy both those terms and this
|
|
||||||
License would be to refrain entirely from conveying the Program.
|
|
||||||
|
|
||||||
13. Use with the GNU Affero General Public License.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, you have
|
|
||||||
permission to link or combine any covered work with a work licensed
|
|
||||||
under version 3 of the GNU Affero General Public License into a single
|
|
||||||
combined work, and to convey the resulting work. The terms of this
|
|
||||||
License will continue to apply to the part which is the covered work,
|
|
||||||
but the special requirements of the GNU Affero General Public License,
|
|
||||||
section 13, concerning interaction through a network will apply to the
|
|
||||||
combination as such.
|
|
||||||
|
|
||||||
14. Revised Versions of this License.
|
|
||||||
|
|
||||||
The Free Software Foundation may publish revised and/or new versions of
|
|
||||||
the GNU General Public License from time to time. Such new versions will
|
|
||||||
be similar in spirit to the present version, but may differ in detail to
|
|
||||||
address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the
|
|
||||||
Program specifies that a certain numbered version of the GNU General
|
|
||||||
Public License "or any later version" applies to it, you have the
|
|
||||||
option of following the terms and conditions either of that numbered
|
|
||||||
version or of any later version published by the Free Software
|
|
||||||
Foundation. If the Program does not specify a version number of the
|
|
||||||
GNU General Public License, you may choose any version ever published
|
|
||||||
by the Free Software Foundation.
|
|
||||||
|
|
||||||
If the Program specifies that a proxy can decide which future
|
|
||||||
versions of the GNU General Public License can be used, that proxy's
|
|
||||||
public statement of acceptance of a version permanently authorizes you
|
|
||||||
to choose that version for the Program.
|
|
||||||
|
|
||||||
Later license versions may give you additional or different
|
|
||||||
permissions. However, no additional obligations are imposed on any
|
|
||||||
author or copyright holder as a result of your choosing to follow a
|
|
||||||
later version.
|
|
||||||
|
|
||||||
15. Disclaimer of Warranty.
|
|
||||||
|
|
||||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
|
||||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
|
||||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
|
||||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
|
||||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
|
||||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. Limitation of Liability.
|
|
||||||
|
|
||||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
|
||||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
|
||||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
|
||||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
|
||||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
|
||||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
|
||||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
|
||||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
|
||||||
SUCH DAMAGES.
|
|
||||||
|
|
||||||
17. Interpretation of Sections 15 and 16.
|
|
||||||
|
|
||||||
If the disclaimer of warranty and limitation of liability provided
|
|
||||||
above cannot be given local legal effect according to their terms,
|
|
||||||
reviewing courts shall apply local law that most closely approximates
|
|
||||||
an absolute waiver of all civil liability in connection with the
|
|
||||||
Program, unless a warranty or assumption of liability accompanies a
|
|
||||||
copy of the Program in return for a fee.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<beans xmlns="https://jakarta.ee/xml/ns/jakartaee"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/beans_3_0.xsd"
|
|
||||||
bean-discovery-mode="all" version="3.0">
|
|
||||||
</beans>
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
Imixs Workflow Technology
|
|
||||||
Copyright (C) 2010 Imixs Software Solutions GmbH,
|
|
||||||
http://www.imixs.com
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Contributors:
|
|
||||||
Imixs Software Solutions GmbH - initial implementation
|
|
||||||
Ralph Soika
|
|
||||||
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
??
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
Manifest-Version: 1.0
|
|
||||||
Created-By: Apache Maven 3.8.7
|
|
||||||
Built-By: rsoika
|
|
||||||
Build-Jdk: 17.0.15
|
|
||||||
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#Created by Apache Maven 3.8.7
|
|
||||||
groupId=ai.dynamixs
|
|
||||||
artifactId=dynamixs-ai-app
|
|
||||||
version=1.0.0
|
|
||||||
|
|
@ -1,346 +0,0 @@
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
|
|
||||||
<parent>
|
|
||||||
<artifactId>dynamixs-ai</artifactId>
|
|
||||||
<groupId>ai.dynamixs</groupId>
|
|
||||||
<version>1.0.0</version>
|
|
||||||
</parent>
|
|
||||||
<artifactId>dynamixs-ai-app</artifactId>
|
|
||||||
<packaging>war</packaging>
|
|
||||||
<name>Dynamixs AI Web App</name>
|
|
||||||
|
|
||||||
|
|
||||||
<profiles>
|
|
||||||
|
|
||||||
|
|
||||||
<profile>
|
|
||||||
<id>debug</id>
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-antrun-plugin</artifactId>
|
|
||||||
<version>1.8</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<phase>install</phase>
|
|
||||||
<configuration>
|
|
||||||
<target>
|
|
||||||
<exec executable="docker">
|
|
||||||
<arg value="build" />
|
|
||||||
<arg value="-f" />
|
|
||||||
<arg value="./Dockerfile-debug" />
|
|
||||||
<arg value="-t" />
|
|
||||||
<arg value="imixs/${imixs-office.applicationname}" />
|
|
||||||
<arg value="./." />
|
|
||||||
</exec>
|
|
||||||
</target>
|
|
||||||
</configuration>
|
|
||||||
<goals>
|
|
||||||
<goal>run</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
</profile>
|
|
||||||
|
|
||||||
|
|
||||||
<profile>
|
|
||||||
<id>imixs-cloud</id>
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-antrun-plugin</artifactId>
|
|
||||||
<version>1.8</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<phase>install</phase>
|
|
||||||
<configuration>
|
|
||||||
<target>
|
|
||||||
<exec executable="docker">
|
|
||||||
<arg value="build" />
|
|
||||||
<arg value="-t" />
|
|
||||||
<arg
|
|
||||||
value="imixs/${imixs-office.applicationname}:${project.version}" />
|
|
||||||
<arg value="./." />
|
|
||||||
</exec>
|
|
||||||
<exec executable="docker">
|
|
||||||
<arg value="tag" />
|
|
||||||
<arg
|
|
||||||
value="imixs/${imixs-office.applicationname}:${project.version}" />
|
|
||||||
<arg
|
|
||||||
value="${org.imixs.docker.registry}/imixs/${imixs-office.applicationname}:${project.version}" />
|
|
||||||
</exec>
|
|
||||||
<exec executable="docker">
|
|
||||||
<arg value="push" />
|
|
||||||
<arg
|
|
||||||
value="${org.imixs.docker.registry}/imixs/${imixs-office.applicationname}:${project.version}" />
|
|
||||||
</exec>
|
|
||||||
</target>
|
|
||||||
</configuration>
|
|
||||||
<goals>
|
|
||||||
<goal>run</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
</profile>
|
|
||||||
</profiles>
|
|
||||||
|
|
||||||
<build>
|
|
||||||
<resources>
|
|
||||||
<!-- enable resource filtering for multi language version -->
|
|
||||||
<resource>
|
|
||||||
<directory>src/main/resources</directory>
|
|
||||||
<filtering>true</filtering>
|
|
||||||
</resource>
|
|
||||||
</resources>
|
|
||||||
<plugins>
|
|
||||||
|
|
||||||
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-war-plugin</artifactId>
|
|
||||||
<version>3.2.0</version>
|
|
||||||
<configuration>
|
|
||||||
<failOnMissingWebXml>false</failOnMissingWebXml>
|
|
||||||
<webResources>
|
|
||||||
<resource>
|
|
||||||
<filtering>true</filtering>
|
|
||||||
<!-- this is relative to the pom.xml directory -->
|
|
||||||
<directory>${custom.webResources}</directory>
|
|
||||||
<includes>
|
|
||||||
<include>**/WEB-INF/*</include>
|
|
||||||
<!-- include any other file types you want to filter -->
|
|
||||||
</includes>
|
|
||||||
</resource>
|
|
||||||
</webResources>
|
|
||||||
<workDirectory>target/overlay-war-folder</workDirectory>
|
|
||||||
<!-- We exclude libs form the parent WAR artifact -->
|
|
||||||
<overlays>
|
|
||||||
<overlay>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-office-workflow-app</artifactId>
|
|
||||||
<excludes>
|
|
||||||
<exclude>WEB-INF/lib/*.jar</exclude>
|
|
||||||
</excludes>
|
|
||||||
</overlay>
|
|
||||||
</overlays>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-resources-plugin</artifactId>
|
|
||||||
<version>2.6</version>
|
|
||||||
<configuration>
|
|
||||||
<encoding>${project.build.sourceEncoding}</encoding>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.imixs.maven</groupId>
|
|
||||||
<artifactId>manik-hotdeploy-maven-plugin</artifactId>
|
|
||||||
<version>2.0.0</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<phase>install</phase>
|
|
||||||
<goals>
|
|
||||||
<goal>deploy</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
<configuration>
|
|
||||||
<!-- List Source and Target folders for Autodeploy and Hotdeploy -->
|
|
||||||
<autodeployments>
|
|
||||||
<deployment>
|
|
||||||
<!-- wildcard deployment -->
|
|
||||||
<source>target/*.{war,ear,jar}</source>
|
|
||||||
<target>./docker/deployments/</target>
|
|
||||||
<unpack>true</unpack>
|
|
||||||
</deployment>
|
|
||||||
</autodeployments>
|
|
||||||
<hotdeployments>
|
|
||||||
<deployment>
|
|
||||||
<source>src/main/webapp</source>
|
|
||||||
<target>./docker/deployments/dynamixs-ai.war</target>
|
|
||||||
</deployment>
|
|
||||||
</hotdeployments>
|
|
||||||
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
|
|
||||||
</plugins>
|
|
||||||
|
|
||||||
<finalName>dynamixs-ai</finalName>
|
|
||||||
</build>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Imixs Workflow -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-workflow-core</artifactId>
|
|
||||||
<type>jar</type>
|
|
||||||
<version>${org.imixs.workflow.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-workflow-engine</artifactId>
|
|
||||||
<type>jar</type>
|
|
||||||
<version>${org.imixs.workflow.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-workflow-jax-rs</artifactId>
|
|
||||||
<type>jar</type>
|
|
||||||
<version>${org.imixs.workflow.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-workflow-faces</artifactId>
|
|
||||||
<type>jar</type>
|
|
||||||
<version>${org.imixs.workflow.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-workflow-index-lucene</artifactId>
|
|
||||||
<version>${org.imixs.workflow.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- Marty -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-marty</artifactId>
|
|
||||||
<type>jar</type>
|
|
||||||
<version>${org.imixs.marty.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- Imixs-Office-Workflow Overlay -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-office-workflow-app</artifactId>
|
|
||||||
<type>war</type>
|
|
||||||
<version>${org.imixs.office.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-office-workflow-util</artifactId>
|
|
||||||
<version>${org.imixs.office.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- Imixs-Archive -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-archive-api</artifactId>
|
|
||||||
<version>${org.imixs.archive.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-archive-documents</artifactId>
|
|
||||||
<version>${org.imixs.archive.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-archive-importer</artifactId>
|
|
||||||
<version>${org.imixs.archive.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<!-- -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.pdfbox</groupId>
|
|
||||||
<artifactId>pdfbox</artifactId>
|
|
||||||
<version>${apache.pdfbox.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Imixs-AI -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-ai-workflow</artifactId>
|
|
||||||
<version>${org.imixs.ai.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- DaraStax Java Driver -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.datastax.oss</groupId>
|
|
||||||
<artifactId>java-driver-core</artifactId>
|
|
||||||
<version>${apache.cassandra.driver.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.datastax.oss</groupId>
|
|
||||||
<artifactId>java-driver-query-builder</artifactId>
|
|
||||||
<version>${apache.cassandra.driver.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.datastax.oss</groupId>
|
|
||||||
<artifactId>java-driver-mapper-runtime</artifactId>
|
|
||||||
<version>${apache.cassandra.driver.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Imixs-QR-Code -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-adapters-qrcode</artifactId>
|
|
||||||
<version>${org.imixs.adapter.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Imixs-Wopi -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-adapters-wopi</artifactId>
|
|
||||||
<version>${org.imixs.adapter.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-adapters-odf</artifactId>
|
|
||||||
<version>${org.imixs.adapter.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Imixs Signature Feature -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-signature-api</artifactId>
|
|
||||||
<version>${org.imixs.signature.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- SEPA -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-adapters-sepa</artifactId>
|
|
||||||
<version>${org.imixs.adapter.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- DATEV -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-adapters-datev</artifactId>
|
|
||||||
<version>${org.imixs.adapter.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- POI Adapter -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-adapters-poi</artifactId>
|
|
||||||
<version>${org.imixs.adapter.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
|
|
||||||
</dependencies>
|
|
||||||
</project>
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#Created by Apache Maven 3.8.7
|
|
||||||
groupId=org.imixs.workflow
|
|
||||||
artifactId=imixs-office-workflow-app
|
|
||||||
version=5.1.3-SNAPSHOT
|
|
||||||
|
|
@ -1,241 +0,0 @@
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
<parent>
|
|
||||||
<artifactId>imixs-office-workflow</artifactId>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<version>5.1.3-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
<artifactId>imixs-office-workflow-app</artifactId>
|
|
||||||
<packaging>war</packaging>
|
|
||||||
<name>Imixs Office Workflow App</name>
|
|
||||||
|
|
||||||
<profiles>
|
|
||||||
|
|
||||||
|
|
||||||
<profile>
|
|
||||||
<id>docker-hub</id>
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-antrun-plugin</artifactId>
|
|
||||||
<version>1.8</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<phase>install</phase>
|
|
||||||
<configuration>
|
|
||||||
<target>
|
|
||||||
<exec executable="docker">
|
|
||||||
<arg value="build" />
|
|
||||||
<arg value="-t" />
|
|
||||||
<arg value="imixs/${imixs-office.applicationname}:${project.version}" />
|
|
||||||
<arg value="../." />
|
|
||||||
</exec>
|
|
||||||
<exec executable="docker">
|
|
||||||
<arg value="push" />
|
|
||||||
<arg value="imixs/${imixs-office.applicationname}:${project.version}" />
|
|
||||||
</exec>
|
|
||||||
</target>
|
|
||||||
</configuration>
|
|
||||||
<goals>
|
|
||||||
<goal>run</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
</profile>
|
|
||||||
|
|
||||||
|
|
||||||
<profile>
|
|
||||||
<id>docker-hub-latest</id>
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-antrun-plugin</artifactId>
|
|
||||||
<version>1.8</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<phase>install</phase>
|
|
||||||
<configuration>
|
|
||||||
<target>
|
|
||||||
<exec executable="docker">
|
|
||||||
<arg value="build" />
|
|
||||||
<arg value="-t" />
|
|
||||||
<arg value="imixs/${imixs-office.applicationname}" />
|
|
||||||
<arg value="../." />
|
|
||||||
</exec>
|
|
||||||
<exec executable="docker">
|
|
||||||
<arg value="push" />
|
|
||||||
<arg value="imixs/${imixs-office.applicationname}" />
|
|
||||||
</exec>
|
|
||||||
</target>
|
|
||||||
</configuration>
|
|
||||||
<goals>
|
|
||||||
<goal>run</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
</profile>
|
|
||||||
|
|
||||||
<!-- Open ID Connect integration -->
|
|
||||||
<profile>
|
|
||||||
<id>auth-oidc</id>
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-office-workflow-oidc</artifactId>
|
|
||||||
<scope>compile</scope>
|
|
||||||
<version>${project.parent.version}</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
</profile>
|
|
||||||
|
|
||||||
<!-- Wildfly Open ID Connect integration -->
|
|
||||||
<profile>
|
|
||||||
<id>auth-oidc-wildfly</id>
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-office-workflow-oidc-wildfly</artifactId>
|
|
||||||
<scope>compile</scope>
|
|
||||||
<version>${project.parent.version}</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
</profile>
|
|
||||||
</profiles>
|
|
||||||
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-war-plugin</artifactId>
|
|
||||||
<version>3.2.0</version>
|
|
||||||
<configuration>
|
|
||||||
<webResources>
|
|
||||||
<resource>
|
|
||||||
<filtering>true</filtering>
|
|
||||||
<!-- this is relative to the pom.xml directory -->
|
|
||||||
<directory>${custom.webResources}</directory>
|
|
||||||
<includes>
|
|
||||||
<include>**/WEB-INF/*</include>
|
|
||||||
<include>/src/main/resources/*</include>
|
|
||||||
<!-- include any other file types you want to filter -->
|
|
||||||
</includes>
|
|
||||||
</resource>
|
|
||||||
</webResources>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
<!-- Manik Hot Deployment -->
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.imixs.maven</groupId>
|
|
||||||
<artifactId>manik-hotdeploy-maven-plugin</artifactId>
|
|
||||||
<version>2.0.0</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<phase>install</phase>
|
|
||||||
<goals>
|
|
||||||
<goal>deploy</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
<configuration>
|
|
||||||
<!-- List Source and Target folders for Autodeploy and Hotdeploy -->
|
|
||||||
<autodeployments>
|
|
||||||
<deployment>
|
|
||||||
<!-- wildcard deployment -->
|
|
||||||
<source>target/*.{war,ear,jar}</source>
|
|
||||||
<target>../docker/deployments/</target>
|
|
||||||
<unpack>true</unpack>
|
|
||||||
</deployment>
|
|
||||||
</autodeployments>
|
|
||||||
<hotdeployments>
|
|
||||||
<deployment>
|
|
||||||
<source>src/main/webapp</source>
|
|
||||||
<target>../docker/deployments/imixs-office-workflow.war</target>
|
|
||||||
</deployment>
|
|
||||||
</hotdeployments>
|
|
||||||
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
</plugins>
|
|
||||||
<finalName>imixs-office-workflow</finalName>
|
|
||||||
</build>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-office-workflow-util</artifactId>
|
|
||||||
<scope>compile</scope>
|
|
||||||
<version>${project.parent.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- Imixs Workflow -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-workflow-core</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-workflow-engine</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-workflow-jax-rs</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-workflow-faces</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<!-- Apache Lucene -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-workflow-index-lucene</artifactId>
|
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Apache Solr
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-workflow-index-solr</artifactId>
|
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Imixs-Archive -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-archive-api</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- Marty -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-marty</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- Imixs-AI -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.imixs.workflow</groupId>
|
|
||||||
<artifactId>imixs-ai-workflow</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- xsl 2.0 support -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>net.sf.saxon</groupId>
|
|
||||||
<artifactId>Saxon-HE</artifactId>
|
|
||||||
<version>${net.sf.saxon.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
</dependencies>
|
|
||||||
</project>
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<beans xmlns="https://jakarta.ee/xml/ns/jakartaee"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/beans_3_0.xsd"
|
|
||||||
bean-discovery-mode="all" version="3.0">
|
|
||||||
</beans>
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
||||||
Imixs-Office-Workflow
|
|
||||||
Copyright (C) 2001-2018 Imixs Software Solutions GmbH,
|
|
||||||
http://www.imixs.com
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
|
|
||||||
Project:
|
|
||||||
http://www.imixs.org
|
|
||||||
|
|
||||||
Contributors:
|
|
||||||
Imixs Software Solutions GmbH - initial API and implementation
|
|
||||||
Ralph Soika - Software Developer
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,621 +0,0 @@
|
||||||
GNU GENERAL PUBLIC LICENSE
|
|
||||||
Version 3, 29 June 2007
|
|
||||||
|
|
||||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The GNU General Public License is a free, copyleft license for
|
|
||||||
software and other kinds of works.
|
|
||||||
|
|
||||||
The licenses for most software and other practical works are designed
|
|
||||||
to take away your freedom to share and change the works. By contrast,
|
|
||||||
the GNU General Public License is intended to guarantee your freedom to
|
|
||||||
share and change all versions of a program--to make sure it remains free
|
|
||||||
software for all its users. We, the Free Software Foundation, use the
|
|
||||||
GNU General Public License for most of our software; it applies also to
|
|
||||||
any other work released this way by its authors. You can apply it to
|
|
||||||
your programs, too.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
|
||||||
have the freedom to distribute copies of free software (and charge for
|
|
||||||
them if you wish), that you receive source code or can get it if you
|
|
||||||
want it, that you can change the software or use pieces of it in new
|
|
||||||
free programs, and that you know you can do these things.
|
|
||||||
|
|
||||||
To protect your rights, we need to prevent others from denying you
|
|
||||||
these rights or asking you to surrender the rights. Therefore, you have
|
|
||||||
certain responsibilities if you distribute copies of the software, or if
|
|
||||||
you modify it: responsibilities to respect the freedom of others.
|
|
||||||
|
|
||||||
For example, if you distribute copies of such a program, whether
|
|
||||||
gratis or for a fee, you must pass on to the recipients the same
|
|
||||||
freedoms that you received. You must make sure that they, too, receive
|
|
||||||
or can get the source code. And you must show them these terms so they
|
|
||||||
know their rights.
|
|
||||||
|
|
||||||
Developers that use the GNU GPL protect your rights with two steps:
|
|
||||||
(1) assert copyright on the software, and (2) offer you this License
|
|
||||||
giving you legal permission to copy, distribute and/or modify it.
|
|
||||||
|
|
||||||
For the developers' and authors' protection, the GPL clearly explains
|
|
||||||
that there is no warranty for this free software. For both users' and
|
|
||||||
authors' sake, the GPL requires that modified versions be marked as
|
|
||||||
changed, so that their problems will not be attributed erroneously to
|
|
||||||
authors of previous versions.
|
|
||||||
|
|
||||||
Some devices are designed to deny users access to install or run
|
|
||||||
modified versions of the software inside them, although the manufacturer
|
|
||||||
can do so. This is fundamentally incompatible with the aim of
|
|
||||||
protecting users' freedom to change the software. The systematic
|
|
||||||
pattern of such abuse occurs in the area of products for individuals to
|
|
||||||
use, which is precisely where it is most unacceptable. Therefore, we
|
|
||||||
have designed this version of the GPL to prohibit the practice for those
|
|
||||||
products. If such problems arise substantially in other domains, we
|
|
||||||
stand ready to extend this provision to those domains in future versions
|
|
||||||
of the GPL, as needed to protect the freedom of users.
|
|
||||||
|
|
||||||
Finally, every program is threatened constantly by software patents.
|
|
||||||
States should not allow patents to restrict development and use of
|
|
||||||
software on general-purpose computers, but in those that do, we wish to
|
|
||||||
avoid the special danger that patents applied to a free program could
|
|
||||||
make it effectively proprietary. To prevent this, the GPL assures that
|
|
||||||
patents cannot be used to render the program non-free.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow.
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
0. Definitions.
|
|
||||||
|
|
||||||
"This License" refers to version 3 of the GNU General Public License.
|
|
||||||
|
|
||||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
|
||||||
works, such as semiconductor masks.
|
|
||||||
|
|
||||||
"The Program" refers to any copyrightable work licensed under this
|
|
||||||
License. Each licensee is addressed as "you". "Licensees" and
|
|
||||||
"recipients" may be individuals or organizations.
|
|
||||||
|
|
||||||
To "modify" a work means to copy from or adapt all or part of the work
|
|
||||||
in a fashion requiring copyright permission, other than the making of an
|
|
||||||
exact copy. The resulting work is called a "modified version" of the
|
|
||||||
earlier work or a work "based on" the earlier work.
|
|
||||||
|
|
||||||
A "covered work" means either the unmodified Program or a work based
|
|
||||||
on the Program.
|
|
||||||
|
|
||||||
To "propagate" a work means to do anything with it that, without
|
|
||||||
permission, would make you directly or secondarily liable for
|
|
||||||
infringement under applicable copyright law, except executing it on a
|
|
||||||
computer or modifying a private copy. Propagation includes copying,
|
|
||||||
distribution (with or without modification), making available to the
|
|
||||||
public, and in some countries other activities as well.
|
|
||||||
|
|
||||||
To "convey" a work means any kind of propagation that enables other
|
|
||||||
parties to make or receive copies. Mere interaction with a user through
|
|
||||||
a computer network, with no transfer of a copy, is not conveying.
|
|
||||||
|
|
||||||
An interactive user interface displays "Appropriate Legal Notices"
|
|
||||||
to the extent that it includes a convenient and prominently visible
|
|
||||||
feature that (1) displays an appropriate copyright notice, and (2)
|
|
||||||
tells the user that there is no warranty for the work (except to the
|
|
||||||
extent that warranties are provided), that licensees may convey the
|
|
||||||
work under this License, and how to view a copy of this License. If
|
|
||||||
the interface presents a list of user commands or options, such as a
|
|
||||||
menu, a prominent item in the list meets this criterion.
|
|
||||||
|
|
||||||
1. Source Code.
|
|
||||||
|
|
||||||
The "source code" for a work means the preferred form of the work
|
|
||||||
for making modifications to it. "Object code" means any non-source
|
|
||||||
form of a work.
|
|
||||||
|
|
||||||
A "Standard Interface" means an interface that either is an official
|
|
||||||
standard defined by a recognized standards body, or, in the case of
|
|
||||||
interfaces specified for a particular programming language, one that
|
|
||||||
is widely used among developers working in that language.
|
|
||||||
|
|
||||||
The "System Libraries" of an executable work include anything, other
|
|
||||||
than the work as a whole, that (a) is included in the normal form of
|
|
||||||
packaging a Major Component, but which is not part of that Major
|
|
||||||
Component, and (b) serves only to enable use of the work with that
|
|
||||||
Major Component, or to implement a Standard Interface for which an
|
|
||||||
implementation is available to the public in source code form. A
|
|
||||||
"Major Component", in this context, means a major essential component
|
|
||||||
(kernel, window system, and so on) of the specific operating system
|
|
||||||
(if any) on which the executable work runs, or a compiler used to
|
|
||||||
produce the work, or an object code interpreter used to run it.
|
|
||||||
|
|
||||||
The "Corresponding Source" for a work in object code form means all
|
|
||||||
the source code needed to generate, install, and (for an executable
|
|
||||||
work) run the object code and to modify the work, including scripts to
|
|
||||||
control those activities. However, it does not include the work's
|
|
||||||
System Libraries, or general-purpose tools or generally available free
|
|
||||||
programs which are used unmodified in performing those activities but
|
|
||||||
which are not part of the work. For example, Corresponding Source
|
|
||||||
includes interface definition files associated with source files for
|
|
||||||
the work, and the source code for shared libraries and dynamically
|
|
||||||
linked subprograms that the work is specifically designed to require,
|
|
||||||
such as by intimate data communication or control flow between those
|
|
||||||
subprograms and other parts of the work.
|
|
||||||
|
|
||||||
The Corresponding Source need not include anything that users
|
|
||||||
can regenerate automatically from other parts of the Corresponding
|
|
||||||
Source.
|
|
||||||
|
|
||||||
The Corresponding Source for a work in source code form is that
|
|
||||||
same work.
|
|
||||||
|
|
||||||
2. Basic Permissions.
|
|
||||||
|
|
||||||
All rights granted under this License are granted for the term of
|
|
||||||
copyright on the Program, and are irrevocable provided the stated
|
|
||||||
conditions are met. This License explicitly affirms your unlimited
|
|
||||||
permission to run the unmodified Program. The output from running a
|
|
||||||
covered work is covered by this License only if the output, given its
|
|
||||||
content, constitutes a covered work. This License acknowledges your
|
|
||||||
rights of fair use or other equivalent, as provided by copyright law.
|
|
||||||
|
|
||||||
You may make, run and propagate covered works that you do not
|
|
||||||
convey, without conditions so long as your license otherwise remains
|
|
||||||
in force. You may convey covered works to others for the sole purpose
|
|
||||||
of having them make modifications exclusively for you, or provide you
|
|
||||||
with facilities for running those works, provided that you comply with
|
|
||||||
the terms of this License in conveying all material for which you do
|
|
||||||
not control copyright. Those thus making or running the covered works
|
|
||||||
for you must do so exclusively on your behalf, under your direction
|
|
||||||
and control, on terms that prohibit them from making any copies of
|
|
||||||
your copyrighted material outside their relationship with you.
|
|
||||||
|
|
||||||
Conveying under any other circumstances is permitted solely under
|
|
||||||
the conditions stated below. Sublicensing is not allowed; section 10
|
|
||||||
makes it unnecessary.
|
|
||||||
|
|
||||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
|
||||||
|
|
||||||
No covered work shall be deemed part of an effective technological
|
|
||||||
measure under any applicable law fulfilling obligations under article
|
|
||||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
|
||||||
similar laws prohibiting or restricting circumvention of such
|
|
||||||
measures.
|
|
||||||
|
|
||||||
When you convey a covered work, you waive any legal power to forbid
|
|
||||||
circumvention of technological measures to the extent such circumvention
|
|
||||||
is effected by exercising rights under this License with respect to
|
|
||||||
the covered work, and you disclaim any intention to limit operation or
|
|
||||||
modification of the work as a means of enforcing, against the work's
|
|
||||||
users, your or third parties' legal rights to forbid circumvention of
|
|
||||||
technological measures.
|
|
||||||
|
|
||||||
4. Conveying Verbatim Copies.
|
|
||||||
|
|
||||||
You may convey verbatim copies of the Program's source code as you
|
|
||||||
receive it, in any medium, provided that you conspicuously and
|
|
||||||
appropriately publish on each copy an appropriate copyright notice;
|
|
||||||
keep intact all notices stating that this License and any
|
|
||||||
non-permissive terms added in accord with section 7 apply to the code;
|
|
||||||
keep intact all notices of the absence of any warranty; and give all
|
|
||||||
recipients a copy of this License along with the Program.
|
|
||||||
|
|
||||||
You may charge any price or no price for each copy that you convey,
|
|
||||||
and you may offer support or warranty protection for a fee.
|
|
||||||
|
|
||||||
5. Conveying Modified Source Versions.
|
|
||||||
|
|
||||||
You may convey a work based on the Program, or the modifications to
|
|
||||||
produce it from the Program, in the form of source code under the
|
|
||||||
terms of section 4, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) The work must carry prominent notices stating that you modified
|
|
||||||
it, and giving a relevant date.
|
|
||||||
|
|
||||||
b) The work must carry prominent notices stating that it is
|
|
||||||
released under this License and any conditions added under section
|
|
||||||
7. This requirement modifies the requirement in section 4 to
|
|
||||||
"keep intact all notices".
|
|
||||||
|
|
||||||
c) You must license the entire work, as a whole, under this
|
|
||||||
License to anyone who comes into possession of a copy. This
|
|
||||||
License will therefore apply, along with any applicable section 7
|
|
||||||
additional terms, to the whole of the work, and all its parts,
|
|
||||||
regardless of how they are packaged. This License gives no
|
|
||||||
permission to license the work in any other way, but it does not
|
|
||||||
invalidate such permission if you have separately received it.
|
|
||||||
|
|
||||||
d) If the work has interactive user interfaces, each must display
|
|
||||||
Appropriate Legal Notices; however, if the Program has interactive
|
|
||||||
interfaces that do not display Appropriate Legal Notices, your
|
|
||||||
work need not make them do so.
|
|
||||||
|
|
||||||
A compilation of a covered work with other separate and independent
|
|
||||||
works, which are not by their nature extensions of the covered work,
|
|
||||||
and which are not combined with it such as to form a larger program,
|
|
||||||
in or on a volume of a storage or distribution medium, is called an
|
|
||||||
"aggregate" if the compilation and its resulting copyright are not
|
|
||||||
used to limit the access or legal rights of the compilation's users
|
|
||||||
beyond what the individual works permit. Inclusion of a covered work
|
|
||||||
in an aggregate does not cause this License to apply to the other
|
|
||||||
parts of the aggregate.
|
|
||||||
|
|
||||||
6. Conveying Non-Source Forms.
|
|
||||||
|
|
||||||
You may convey a covered work in object code form under the terms
|
|
||||||
of sections 4 and 5, provided that you also convey the
|
|
||||||
machine-readable Corresponding Source under the terms of this License,
|
|
||||||
in one of these ways:
|
|
||||||
|
|
||||||
a) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by the
|
|
||||||
Corresponding Source fixed on a durable physical medium
|
|
||||||
customarily used for software interchange.
|
|
||||||
|
|
||||||
b) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by a
|
|
||||||
written offer, valid for at least three years and valid for as
|
|
||||||
long as you offer spare parts or customer support for that product
|
|
||||||
model, to give anyone who possesses the object code either (1) a
|
|
||||||
copy of the Corresponding Source for all the software in the
|
|
||||||
product that is covered by this License, on a durable physical
|
|
||||||
medium customarily used for software interchange, for a price no
|
|
||||||
more than your reasonable cost of physically performing this
|
|
||||||
conveying of source, or (2) access to copy the
|
|
||||||
Corresponding Source from a network server at no charge.
|
|
||||||
|
|
||||||
c) Convey individual copies of the object code with a copy of the
|
|
||||||
written offer to provide the Corresponding Source. This
|
|
||||||
alternative is allowed only occasionally and noncommercially, and
|
|
||||||
only if you received the object code with such an offer, in accord
|
|
||||||
with subsection 6b.
|
|
||||||
|
|
||||||
d) Convey the object code by offering access from a designated
|
|
||||||
place (gratis or for a charge), and offer equivalent access to the
|
|
||||||
Corresponding Source in the same way through the same place at no
|
|
||||||
further charge. You need not require recipients to copy the
|
|
||||||
Corresponding Source along with the object code. If the place to
|
|
||||||
copy the object code is a network server, the Corresponding Source
|
|
||||||
may be on a different server (operated by you or a third party)
|
|
||||||
that supports equivalent copying facilities, provided you maintain
|
|
||||||
clear directions next to the object code saying where to find the
|
|
||||||
Corresponding Source. Regardless of what server hosts the
|
|
||||||
Corresponding Source, you remain obligated to ensure that it is
|
|
||||||
available for as long as needed to satisfy these requirements.
|
|
||||||
|
|
||||||
e) Convey the object code using peer-to-peer transmission, provided
|
|
||||||
you inform other peers where the object code and Corresponding
|
|
||||||
Source of the work are being offered to the general public at no
|
|
||||||
charge under subsection 6d.
|
|
||||||
|
|
||||||
A separable portion of the object code, whose source code is excluded
|
|
||||||
from the Corresponding Source as a System Library, need not be
|
|
||||||
included in conveying the object code work.
|
|
||||||
|
|
||||||
A "User Product" is either (1) a "consumer product", which means any
|
|
||||||
tangible personal property which is normally used for personal, family,
|
|
||||||
or household purposes, or (2) anything designed or sold for incorporation
|
|
||||||
into a dwelling. In determining whether a product is a consumer product,
|
|
||||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
|
||||||
product received by a particular user, "normally used" refers to a
|
|
||||||
typical or common use of that class of product, regardless of the status
|
|
||||||
of the particular user or of the way in which the particular user
|
|
||||||
actually uses, or expects or is expected to use, the product. A product
|
|
||||||
is a consumer product regardless of whether the product has substantial
|
|
||||||
commercial, industrial or non-consumer uses, unless such uses represent
|
|
||||||
the only significant mode of use of the product.
|
|
||||||
|
|
||||||
"Installation Information" for a User Product means any methods,
|
|
||||||
procedures, authorization keys, or other information required to install
|
|
||||||
and execute modified versions of a covered work in that User Product from
|
|
||||||
a modified version of its Corresponding Source. The information must
|
|
||||||
suffice to ensure that the continued functioning of the modified object
|
|
||||||
code is in no case prevented or interfered with solely because
|
|
||||||
modification has been made.
|
|
||||||
|
|
||||||
If you convey an object code work under this section in, or with, or
|
|
||||||
specifically for use in, a User Product, and the conveying occurs as
|
|
||||||
part of a transaction in which the right of possession and use of the
|
|
||||||
User Product is transferred to the recipient in perpetuity or for a
|
|
||||||
fixed term (regardless of how the transaction is characterized), the
|
|
||||||
Corresponding Source conveyed under this section must be accompanied
|
|
||||||
by the Installation Information. But this requirement does not apply
|
|
||||||
if neither you nor any third party retains the ability to install
|
|
||||||
modified object code on the User Product (for example, the work has
|
|
||||||
been installed in ROM).
|
|
||||||
|
|
||||||
The requirement to provide Installation Information does not include a
|
|
||||||
requirement to continue to provide support service, warranty, or updates
|
|
||||||
for a work that has been modified or installed by the recipient, or for
|
|
||||||
the User Product in which it has been modified or installed. Access to a
|
|
||||||
network may be denied when the modification itself materially and
|
|
||||||
adversely affects the operation of the network or violates the rules and
|
|
||||||
protocols for communication across the network.
|
|
||||||
|
|
||||||
Corresponding Source conveyed, and Installation Information provided,
|
|
||||||
in accord with this section must be in a format that is publicly
|
|
||||||
documented (and with an implementation available to the public in
|
|
||||||
source code form), and must require no special password or key for
|
|
||||||
unpacking, reading or copying.
|
|
||||||
|
|
||||||
7. Additional Terms.
|
|
||||||
|
|
||||||
"Additional permissions" are terms that supplement the terms of this
|
|
||||||
License by making exceptions from one or more of its conditions.
|
|
||||||
Additional permissions that are applicable to the entire Program shall
|
|
||||||
be treated as though they were included in this License, to the extent
|
|
||||||
that they are valid under applicable law. If additional permissions
|
|
||||||
apply only to part of the Program, that part may be used separately
|
|
||||||
under those permissions, but the entire Program remains governed by
|
|
||||||
this License without regard to the additional permissions.
|
|
||||||
|
|
||||||
When you convey a copy of a covered work, you may at your option
|
|
||||||
remove any additional permissions from that copy, or from any part of
|
|
||||||
it. (Additional permissions may be written to require their own
|
|
||||||
removal in certain cases when you modify the work.) You may place
|
|
||||||
additional permissions on material, added by you to a covered work,
|
|
||||||
for which you have or can give appropriate copyright permission.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, for material you
|
|
||||||
add to a covered work, you may (if authorized by the copyright holders of
|
|
||||||
that material) supplement the terms of this License with terms:
|
|
||||||
|
|
||||||
a) Disclaiming warranty or limiting liability differently from the
|
|
||||||
terms of sections 15 and 16 of this License; or
|
|
||||||
|
|
||||||
b) Requiring preservation of specified reasonable legal notices or
|
|
||||||
author attributions in that material or in the Appropriate Legal
|
|
||||||
Notices displayed by works containing it; or
|
|
||||||
|
|
||||||
c) Prohibiting misrepresentation of the origin of that material, or
|
|
||||||
requiring that modified versions of such material be marked in
|
|
||||||
reasonable ways as different from the original version; or
|
|
||||||
|
|
||||||
d) Limiting the use for publicity purposes of names of licensors or
|
|
||||||
authors of the material; or
|
|
||||||
|
|
||||||
e) Declining to grant rights under trademark law for use of some
|
|
||||||
trade names, trademarks, or service marks; or
|
|
||||||
|
|
||||||
f) Requiring indemnification of licensors and authors of that
|
|
||||||
material by anyone who conveys the material (or modified versions of
|
|
||||||
it) with contractual assumptions of liability to the recipient, for
|
|
||||||
any liability that these contractual assumptions directly impose on
|
|
||||||
those licensors and authors.
|
|
||||||
|
|
||||||
All other non-permissive additional terms are considered "further
|
|
||||||
restrictions" within the meaning of section 10. If the Program as you
|
|
||||||
received it, or any part of it, contains a notice stating that it is
|
|
||||||
governed by this License along with a term that is a further
|
|
||||||
restriction, you may remove that term. If a license document contains
|
|
||||||
a further restriction but permits relicensing or conveying under this
|
|
||||||
License, you may add to a covered work material governed by the terms
|
|
||||||
of that license document, provided that the further restriction does
|
|
||||||
not survive such relicensing or conveying.
|
|
||||||
|
|
||||||
If you add terms to a covered work in accord with this section, you
|
|
||||||
must place, in the relevant source files, a statement of the
|
|
||||||
additional terms that apply to those files, or a notice indicating
|
|
||||||
where to find the applicable terms.
|
|
||||||
|
|
||||||
Additional terms, permissive or non-permissive, may be stated in the
|
|
||||||
form of a separately written license, or stated as exceptions;
|
|
||||||
the above requirements apply either way.
|
|
||||||
|
|
||||||
8. Termination.
|
|
||||||
|
|
||||||
You may not propagate or modify a covered work except as expressly
|
|
||||||
provided under this License. Any attempt otherwise to propagate or
|
|
||||||
modify it is void, and will automatically terminate your rights under
|
|
||||||
this License (including any patent licenses granted under the third
|
|
||||||
paragraph of section 11).
|
|
||||||
|
|
||||||
However, if you cease all violation of this License, then your
|
|
||||||
license from a particular copyright holder is reinstated (a)
|
|
||||||
provisionally, unless and until the copyright holder explicitly and
|
|
||||||
finally terminates your license, and (b) permanently, if the copyright
|
|
||||||
holder fails to notify you of the violation by some reasonable means
|
|
||||||
prior to 60 days after the cessation.
|
|
||||||
|
|
||||||
Moreover, your license from a particular copyright holder is
|
|
||||||
reinstated permanently if the copyright holder notifies you of the
|
|
||||||
violation by some reasonable means, this is the first time you have
|
|
||||||
received notice of violation of this License (for any work) from that
|
|
||||||
copyright holder, and you cure the violation prior to 30 days after
|
|
||||||
your receipt of the notice.
|
|
||||||
|
|
||||||
Termination of your rights under this section does not terminate the
|
|
||||||
licenses of parties who have received copies or rights from you under
|
|
||||||
this License. If your rights have been terminated and not permanently
|
|
||||||
reinstated, you do not qualify to receive new licenses for the same
|
|
||||||
material under section 10.
|
|
||||||
|
|
||||||
9. Acceptance Not Required for Having Copies.
|
|
||||||
|
|
||||||
You are not required to accept this License in order to receive or
|
|
||||||
run a copy of the Program. Ancillary propagation of a covered work
|
|
||||||
occurring solely as a consequence of using peer-to-peer transmission
|
|
||||||
to receive a copy likewise does not require acceptance. However,
|
|
||||||
nothing other than this License grants you permission to propagate or
|
|
||||||
modify any covered work. These actions infringe copyright if you do
|
|
||||||
not accept this License. Therefore, by modifying or propagating a
|
|
||||||
covered work, you indicate your acceptance of this License to do so.
|
|
||||||
|
|
||||||
10. Automatic Licensing of Downstream Recipients.
|
|
||||||
|
|
||||||
Each time you convey a covered work, the recipient automatically
|
|
||||||
receives a license from the original licensors, to run, modify and
|
|
||||||
propagate that work, subject to this License. You are not responsible
|
|
||||||
for enforcing compliance by third parties with this License.
|
|
||||||
|
|
||||||
An "entity transaction" is a transaction transferring control of an
|
|
||||||
organization, or substantially all assets of one, or subdividing an
|
|
||||||
organization, or merging organizations. If propagation of a covered
|
|
||||||
work results from an entity transaction, each party to that
|
|
||||||
transaction who receives a copy of the work also receives whatever
|
|
||||||
licenses to the work the party's predecessor in interest had or could
|
|
||||||
give under the previous paragraph, plus a right to possession of the
|
|
||||||
Corresponding Source of the work from the predecessor in interest, if
|
|
||||||
the predecessor has it or can get it with reasonable efforts.
|
|
||||||
|
|
||||||
You may not impose any further restrictions on the exercise of the
|
|
||||||
rights granted or affirmed under this License. For example, you may
|
|
||||||
not impose a license fee, royalty, or other charge for exercise of
|
|
||||||
rights granted under this License, and you may not initiate litigation
|
|
||||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
|
||||||
any patent claim is infringed by making, using, selling, offering for
|
|
||||||
sale, or importing the Program or any portion of it.
|
|
||||||
|
|
||||||
11. Patents.
|
|
||||||
|
|
||||||
A "contributor" is a copyright holder who authorizes use under this
|
|
||||||
License of the Program or a work on which the Program is based. The
|
|
||||||
work thus licensed is called the contributor's "contributor version".
|
|
||||||
|
|
||||||
A contributor's "essential patent claims" are all patent claims
|
|
||||||
owned or controlled by the contributor, whether already acquired or
|
|
||||||
hereafter acquired, that would be infringed by some manner, permitted
|
|
||||||
by this License, of making, using, or selling its contributor version,
|
|
||||||
but do not include claims that would be infringed only as a
|
|
||||||
consequence of further modification of the contributor version. For
|
|
||||||
purposes of this definition, "control" includes the right to grant
|
|
||||||
patent sublicenses in a manner consistent with the requirements of
|
|
||||||
this License.
|
|
||||||
|
|
||||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
|
||||||
patent license under the contributor's essential patent claims, to
|
|
||||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
|
||||||
propagate the contents of its contributor version.
|
|
||||||
|
|
||||||
In the following three paragraphs, a "patent license" is any express
|
|
||||||
agreement or commitment, however denominated, not to enforce a patent
|
|
||||||
(such as an express permission to practice a patent or covenant not to
|
|
||||||
sue for patent infringement). To "grant" such a patent license to a
|
|
||||||
party means to make such an agreement or commitment not to enforce a
|
|
||||||
patent against the party.
|
|
||||||
|
|
||||||
If you convey a covered work, knowingly relying on a patent license,
|
|
||||||
and the Corresponding Source of the work is not available for anyone
|
|
||||||
to copy, free of charge and under the terms of this License, through a
|
|
||||||
publicly available network server or other readily accessible means,
|
|
||||||
then you must either (1) cause the Corresponding Source to be so
|
|
||||||
available, or (2) arrange to deprive yourself of the benefit of the
|
|
||||||
patent license for this particular work, or (3) arrange, in a manner
|
|
||||||
consistent with the requirements of this License, to extend the patent
|
|
||||||
license to downstream recipients. "Knowingly relying" means you have
|
|
||||||
actual knowledge that, but for the patent license, your conveying the
|
|
||||||
covered work in a country, or your recipient's use of the covered work
|
|
||||||
in a country, would infringe one or more identifiable patents in that
|
|
||||||
country that you have reason to believe are valid.
|
|
||||||
|
|
||||||
If, pursuant to or in connection with a single transaction or
|
|
||||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
|
||||||
covered work, and grant a patent license to some of the parties
|
|
||||||
receiving the covered work authorizing them to use, propagate, modify
|
|
||||||
or convey a specific copy of the covered work, then the patent license
|
|
||||||
you grant is automatically extended to all recipients of the covered
|
|
||||||
work and works based on it.
|
|
||||||
|
|
||||||
A patent license is "discriminatory" if it does not include within
|
|
||||||
the scope of its coverage, prohibits the exercise of, or is
|
|
||||||
conditioned on the non-exercise of one or more of the rights that are
|
|
||||||
specifically granted under this License. You may not convey a covered
|
|
||||||
work if you are a party to an arrangement with a third party that is
|
|
||||||
in the business of distributing software, under which you make payment
|
|
||||||
to the third party based on the extent of your activity of conveying
|
|
||||||
the work, and under which the third party grants, to any of the
|
|
||||||
parties who would receive the covered work from you, a discriminatory
|
|
||||||
patent license (a) in connection with copies of the covered work
|
|
||||||
conveyed by you (or copies made from those copies), or (b) primarily
|
|
||||||
for and in connection with specific products or compilations that
|
|
||||||
contain the covered work, unless you entered into that arrangement,
|
|
||||||
or that patent license was granted, prior to 28 March 2007.
|
|
||||||
|
|
||||||
Nothing in this License shall be construed as excluding or limiting
|
|
||||||
any implied license or other defenses to infringement that may
|
|
||||||
otherwise be available to you under applicable patent law.
|
|
||||||
|
|
||||||
12. No Surrender of Others' Freedom.
|
|
||||||
|
|
||||||
If conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot convey a
|
|
||||||
covered work so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you may
|
|
||||||
not convey it at all. For example, if you agree to terms that obligate you
|
|
||||||
to collect a royalty for further conveying from those to whom you convey
|
|
||||||
the Program, the only way you could satisfy both those terms and this
|
|
||||||
License would be to refrain entirely from conveying the Program.
|
|
||||||
|
|
||||||
13. Use with the GNU Affero General Public License.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, you have
|
|
||||||
permission to link or combine any covered work with a work licensed
|
|
||||||
under version 3 of the GNU Affero General Public License into a single
|
|
||||||
combined work, and to convey the resulting work. The terms of this
|
|
||||||
License will continue to apply to the part which is the covered work,
|
|
||||||
but the special requirements of the GNU Affero General Public License,
|
|
||||||
section 13, concerning interaction through a network will apply to the
|
|
||||||
combination as such.
|
|
||||||
|
|
||||||
14. Revised Versions of this License.
|
|
||||||
|
|
||||||
The Free Software Foundation may publish revised and/or new versions of
|
|
||||||
the GNU General Public License from time to time. Such new versions will
|
|
||||||
be similar in spirit to the present version, but may differ in detail to
|
|
||||||
address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the
|
|
||||||
Program specifies that a certain numbered version of the GNU General
|
|
||||||
Public License "or any later version" applies to it, you have the
|
|
||||||
option of following the terms and conditions either of that numbered
|
|
||||||
version or of any later version published by the Free Software
|
|
||||||
Foundation. If the Program does not specify a version number of the
|
|
||||||
GNU General Public License, you may choose any version ever published
|
|
||||||
by the Free Software Foundation.
|
|
||||||
|
|
||||||
If the Program specifies that a proxy can decide which future
|
|
||||||
versions of the GNU General Public License can be used, that proxy's
|
|
||||||
public statement of acceptance of a version permanently authorizes you
|
|
||||||
to choose that version for the Program.
|
|
||||||
|
|
||||||
Later license versions may give you additional or different
|
|
||||||
permissions. However, no additional obligations are imposed on any
|
|
||||||
author or copyright holder as a result of your choosing to follow a
|
|
||||||
later version.
|
|
||||||
|
|
||||||
15. Disclaimer of Warranty.
|
|
||||||
|
|
||||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
|
||||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
|
||||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
|
||||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
|
||||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
|
||||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. Limitation of Liability.
|
|
||||||
|
|
||||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
|
||||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
|
||||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
|
||||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
|
||||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
|
||||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
|
||||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
|
||||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
|
||||||
SUCH DAMAGES.
|
|
||||||
|
|
||||||
17. Interpretation of Sections 15 and 16.
|
|
||||||
|
|
||||||
If the disclaimer of warranty and limitation of liability provided
|
|
||||||
above cannot be given local legal effect according to their terms,
|
|
||||||
reviewing courts shall apply local law that most closely approximates
|
|
||||||
an absolute waiver of all civil liability in connection with the
|
|
||||||
Program, unless a warranty or assumption of liability accompanies a
|
|
||||||
copy of the Program in return for a fee.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<persistence xmlns="https://jakarta.ee/xml/ns/persistence"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd"
|
|
||||||
version="3.0">
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Imixs JPA definition Make sure that the imixs-workflow-jee library
|
|
||||||
version maches the version provided by the EAR/EJB
|
|
||||||
-->
|
|
||||||
<!-- eclipselink -->
|
|
||||||
<persistence-unit name="org.imixs.workflow.jpa" transaction-type="JTA">
|
|
||||||
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
|
|
||||||
<jta-data-source>jdbc/office</jta-data-source>
|
|
||||||
<jar-file>lib/imixs-workflow-engine-6.2.2-SNAPSHOT.jar</jar-file>
|
|
||||||
<jar-file>lib/imixs-marty-5.1.0.jar</jar-file>
|
|
||||||
<properties>
|
|
||||||
<!-- target-database Auto MySQL PostgreSQL -->
|
|
||||||
<property name="eclipselink.target-database" value="Auto" />
|
|
||||||
<property name="eclipselink.ddl-generation" value="create-or-extend-tables" />
|
|
||||||
<property name="eclipselink.deploy-on-startup" value="true" />
|
|
||||||
<property name="eclipselink.logging.level" value="INFO" />
|
|
||||||
|
|
||||||
</properties>
|
|
||||||
</persistence-unit>
|
|
||||||
|
|
||||||
</persistence>
|
|
||||||
|
|
@ -1,125 +0,0 @@
|
||||||
###############################################################################
|
|
||||||
# Imixs Workflow Technology
|
|
||||||
# Copyright (C) 2003, 2008 Imixs Software Solutions GmbH,
|
|
||||||
# http://www.imixs.com
|
|
||||||
#
|
|
||||||
# Contributors:
|
|
||||||
# Imixs Software Solutions GmbH - initial API and implementation
|
|
||||||
# Ralph Soika
|
|
||||||
#
|
|
||||||
###############################################################################
|
|
||||||
# Application specific resources
|
|
||||||
|
|
||||||
application_title=Imixs Office Workflow
|
|
||||||
application_build=5.1.3-SNAPSHOT
|
|
||||||
application_build_timestamp=20250527082324
|
|
||||||
application_office_build=
|
|
||||||
application_marty_build=5.1.0
|
|
||||||
application_workflow_build=6.2.2-SNAPSHOT
|
|
||||||
application_theme=office/jquery-ui-1.10.4.custom.css
|
|
||||||
|
|
||||||
jquey.datepicker.showWeek=true
|
|
||||||
|
|
||||||
####################
|
|
||||||
# Portlets
|
|
||||||
####################
|
|
||||||
portlet_process=Prozesse
|
|
||||||
|
|
||||||
|
|
||||||
####################
|
|
||||||
# Editor Section Names
|
|
||||||
####################
|
|
||||||
form_basic=
|
|
||||||
form_basic_dispatch=
|
|
||||||
form_panel=
|
|
||||||
form_panel_simple=
|
|
||||||
form_panel_instruction=
|
|
||||||
form_panel_instruction_right=
|
|
||||||
form_panel_instruction_simple=
|
|
||||||
form_panel_instruction_right_simple
|
|
||||||
form_panel_documentviewer=
|
|
||||||
form_tab=
|
|
||||||
form_tab_instruction_right=
|
|
||||||
basic=Allgemein
|
|
||||||
basic_plus=Allgemein
|
|
||||||
basic_contact=Kontakt
|
|
||||||
basic_contract=Vertrag
|
|
||||||
basic_order=Auftrag
|
|
||||||
basic_invoice=Rechnungsdaten
|
|
||||||
basic_invoice_out=Rechnungsdaten
|
|
||||||
basic_project=Projekt
|
|
||||||
basic_instruction=Vorgang
|
|
||||||
basic_reminder=Allgemein
|
|
||||||
custom=
|
|
||||||
|
|
||||||
sub_address=Adresse
|
|
||||||
sub_bankdata=Bankverbindung
|
|
||||||
sub_comment=Kommentare
|
|
||||||
sub_agreement=Vereinbarung
|
|
||||||
sub_dispatch=
|
|
||||||
sub_dispatch_byprocess=
|
|
||||||
sub_partstable=Artikel
|
|
||||||
sub_description=Beschreibung
|
|
||||||
sub_documentation=Dokumentation
|
|
||||||
sub_attachments=Dateianhänge
|
|
||||||
sub_ref_document_search=Dokumente
|
|
||||||
sub_attachments_simple=
|
|
||||||
sub_processlist=Fortschritt
|
|
||||||
sub_mytimesheet=Meine Zeiterfassung
|
|
||||||
sub_timesheet=Auswertung
|
|
||||||
sub_timesheetadmin=Verwaltung
|
|
||||||
sub_project=Projekt
|
|
||||||
sub_invoice=Rechnungsdaten
|
|
||||||
sub_appointment=Termin
|
|
||||||
sub_appointment_followup=Termin
|
|
||||||
sub_appointment_time=Termin
|
|
||||||
sub_appointment_time_followup=Termin
|
|
||||||
sub_reisekostenabrechnung=
|
|
||||||
sub_orderitems=
|
|
||||||
sub_shortdescription=
|
|
||||||
sub_orderitems_read=
|
|
||||||
sub_shortdescription_read=
|
|
||||||
sub_contact=
|
|
||||||
sub_documentviewer=Dokument Vorschau
|
|
||||||
sub_wiki=
|
|
||||||
sub_wiki_read=
|
|
||||||
qs_header=
|
|
||||||
qs_body=
|
|
||||||
|
|
||||||
minutes_status_decision=Beschluss
|
|
||||||
minutes_status_task=Aufgabe
|
|
||||||
minutes_status_completed=Erledigt
|
|
||||||
|
|
||||||
|
|
||||||
gdpr_sub_system=System
|
|
||||||
gdpr_sub_system_kmu=System
|
|
||||||
gdpr_sub_category=Kategorien
|
|
||||||
gdpr_sub_security=Sicherheit der Verarbeitung
|
|
||||||
gdpr_sub_purpose=Zweckbestimmung
|
|
||||||
gdpr_sub_processor=Auftragsverarbeiter
|
|
||||||
gdpr_sub_statement=Stellungnahme
|
|
||||||
gdpr_sub_dsr=Anfrage
|
|
||||||
gdpr_sub_dsr_task_list=Betroffene Systeme
|
|
||||||
gdpr_sub_dsr_task=Anfrage
|
|
||||||
|
|
||||||
space.sub_custom=
|
|
||||||
space.help_custom=
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Validation Messages
|
|
||||||
#########################
|
|
||||||
ERROR_REQUIRED=Eingabe erforderlich
|
|
||||||
EMAIL_INVALID=Bitte geben Sie eine gültige Email Adresse ein
|
|
||||||
EMAIL_ALREADY_TAKEN=Die von Ihnen gewählte Emailadresse wurde bereits vergeben.
|
|
||||||
USERNAME_ALREADY_TAKEN=Die von Ihnen gewählte User-ID wurde bereits vergeben.
|
|
||||||
BIC_INVALID=Bitte geben Sie eine gültige BIC ein
|
|
||||||
IBAN_INVALID=Bitte geben Sie eine gültige IBAN ein
|
|
||||||
WOPI_CONFIRM_CHANGES=Sollen die Änderungen im Dokument gespeichert werden?
|
|
||||||
#########################
|
|
||||||
# Error Messages
|
|
||||||
#########################
|
|
||||||
BROWSER_DATA_INVALID=Die Daten in Ihrem Browser sind ungültig geworden. Versuchen Sie die Seite neu zu laden. Falls Sie mehrere Browser Fenster/Tabs gleichzeitig geöffnet haben, schließen Sie diese zuvor.
|
|
||||||
INVALID_MODEL=Modell ungültig:
|
|
||||||
INVALID_MODEL_ENTRY=Modell ungültig:
|
|
||||||
PLUGIN_NOT_CREATEABLE=Modell ungültig:
|
|
||||||
VALIDATION_ERROR=Eingabefehler:
|
|
||||||
|
|
@ -1,125 +0,0 @@
|
||||||
###############################################################################
|
|
||||||
# Imixs Workflow Technology
|
|
||||||
# Copyright (C) 2003, 2008 Imixs Software Solutions GmbH,
|
|
||||||
# http://www.imixs.com
|
|
||||||
#
|
|
||||||
# Contributors:
|
|
||||||
# Imixs Software Solutions GmbH - initial API and implementation
|
|
||||||
# Ralph Soika
|
|
||||||
#
|
|
||||||
###############################################################################
|
|
||||||
# Application specific resources
|
|
||||||
|
|
||||||
application_title=Imixs Office Workflow
|
|
||||||
application_build=5.1.3-SNAPSHOT
|
|
||||||
application_build_timestamp=20250527082324
|
|
||||||
application_office_build=
|
|
||||||
application_marty_build=5.1.0
|
|
||||||
application_workflow_build=6.2.2-SNAPSHOT
|
|
||||||
application_theme=office/jquery-ui-1.10.4.custom.css
|
|
||||||
|
|
||||||
jquey.datepicker.showWeek=true
|
|
||||||
|
|
||||||
####################
|
|
||||||
# Portlets
|
|
||||||
####################
|
|
||||||
portlet_process=Business Processes
|
|
||||||
|
|
||||||
|
|
||||||
####################
|
|
||||||
# Editor Section Names
|
|
||||||
####################
|
|
||||||
form_basic=
|
|
||||||
form_basic_dispatch=
|
|
||||||
form_panel=
|
|
||||||
form_panel_simple=
|
|
||||||
form_panel_instruction=
|
|
||||||
form_panel_instruction_right=
|
|
||||||
form_panel_instruction_simple=
|
|
||||||
form_panel_instruction_right_simple
|
|
||||||
form_panel_documentviewer=
|
|
||||||
form_tab=
|
|
||||||
form_tab_instruction_right=
|
|
||||||
basic=General
|
|
||||||
basic_plus=General
|
|
||||||
basic_contact=Contact
|
|
||||||
basic_contract=Contract
|
|
||||||
basic_order=Order
|
|
||||||
basic_invoice=Invoice
|
|
||||||
basic_invoice_out=Invoice
|
|
||||||
basic_project=Project
|
|
||||||
basic_instruction=Instruction
|
|
||||||
basic_reminder=General
|
|
||||||
custom=
|
|
||||||
|
|
||||||
sub_address=Address
|
|
||||||
sub_bankdata=Bankdata
|
|
||||||
sub_comment=Comments
|
|
||||||
sub_agreement=Aggreement
|
|
||||||
sub_dispatch=Dispatch
|
|
||||||
sub_dispatch_byprocess=Dispatch
|
|
||||||
sub_partstable=Parts
|
|
||||||
sub_description=Description
|
|
||||||
sub_documentation=Documentation
|
|
||||||
sub_attachments=Attachments
|
|
||||||
sub_attachments_simple=
|
|
||||||
sub_ref_document_search=Documents
|
|
||||||
sub_processlist=Progress
|
|
||||||
sub_mytimesheet=My Timesheet
|
|
||||||
sub_timesheet=Reporting
|
|
||||||
sub_timesheetadmin=Management
|
|
||||||
sub_project=Project
|
|
||||||
sub_invoice=Billing Data
|
|
||||||
sub_appointment=Appointment
|
|
||||||
sub_appointment_followup=Appointment
|
|
||||||
sub_appointment_time=Appointment
|
|
||||||
sub_appointment_time_followup=Appointment
|
|
||||||
sub_reisekostenabrechnung=
|
|
||||||
sub_orderitems=
|
|
||||||
sub_shortdescription=
|
|
||||||
sub_orderitems_read=
|
|
||||||
sub_shortdescription_read=
|
|
||||||
sub_contact=
|
|
||||||
sub_documentviewer=Document Preview
|
|
||||||
sub_wiki=
|
|
||||||
sub_wiki_read=
|
|
||||||
qs_header=
|
|
||||||
qs_body=
|
|
||||||
|
|
||||||
minutes_status_decision=Decision
|
|
||||||
minutes_status_task=Task
|
|
||||||
minutes_status_completed=Completed
|
|
||||||
|
|
||||||
gdpr_sub_system=System
|
|
||||||
gdpr_sub_system_kmu=System
|
|
||||||
gdpr_sub_category=Categories
|
|
||||||
gdpr_sub_security=Security of processing
|
|
||||||
gdpr_sub_purpose=Purpose
|
|
||||||
gdpr_sub_processor=Processor
|
|
||||||
gdpr_sub_statement=Statement
|
|
||||||
gdpr_sub_dsr=Request
|
|
||||||
gdpr_sub_dsr_task_list=Affected Systems
|
|
||||||
gdpr_sub_dsr_task=Request
|
|
||||||
|
|
||||||
|
|
||||||
space.sub_custom=
|
|
||||||
space.help_custom=
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Validation Messages
|
|
||||||
#########################
|
|
||||||
ERROR_REQUIRED=Input required
|
|
||||||
EMAIL_INVALID=Please enter a valid email address.
|
|
||||||
EMAIL_ALREADY_TAKEN=The email address you selected is already taken.
|
|
||||||
USERNAME_ALREADY_TAKEN=The chosen user ID has already been assigned.
|
|
||||||
BIC_INVALID=Please enter a valid BIC.
|
|
||||||
IBAN_INVALID=Please enter a valid IBAN.
|
|
||||||
WOPI_CONFIRM_CHANGES=Do you want to save the changes in the document?
|
|
||||||
#########################
|
|
||||||
# Error Messages
|
|
||||||
#########################
|
|
||||||
BROWSER_DATA_INVALID=The data in the browser have become invalid. Try to reload the page. If you have multiple browser windows / tabs opened at the same time, please close them before.
|
|
||||||
INVALID_MODEL=Invalid Model:
|
|
||||||
INVALID_MODEL_ENTRY=Invalid Model:
|
|
||||||
PLUGIN_NOT_CREATEABLE=Model invalid:
|
|
||||||
VALIDATION_ERROR=Validation Error:
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
###############################################################################
|
|
||||||
# Custom resource bundle
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
application_title=Imixs Office Workflow
|
|
||||||
application_build=5.1.3-SNAPSHOT
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
###############################################################################
|
|
||||||
# Custom resource bundle
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
application_title=Imixs Office Workflow
|
|
||||||
application_build=5.1.3-SNAPSHOT
|
|
||||||
|
|
@ -1,553 +0,0 @@
|
||||||
###############################################################################
|
|
||||||
# Imixs Workflow Technology
|
|
||||||
# Copyright (C) 2003, 2008 Imixs Software Solutions GmbH,
|
|
||||||
# http://www.imixs.com
|
|
||||||
#
|
|
||||||
# Contributors:
|
|
||||||
# Imixs Software Solutions GmbH - initial API and implementation
|
|
||||||
# Ralph Soika
|
|
||||||
#
|
|
||||||
###############################################################################
|
|
||||||
# Global
|
|
||||||
timeZone=CET
|
|
||||||
datePattern=dd. MMM yyyy
|
|
||||||
datePatternShort=dd.MM.yyyy
|
|
||||||
datePatternLong=EEE, dd. MMM yyyy
|
|
||||||
dateTimePattern=dd. MMM yyyy (HH:mm)
|
|
||||||
dateTimePatternShort=dd.MM.yyyy HH:mm:ss
|
|
||||||
dateTimePatternLong=EEE, dd. MMM yyyy HH:mm:ss
|
|
||||||
|
|
||||||
de=Deutsch
|
|
||||||
en=Englisch
|
|
||||||
|
|
||||||
jquey.datepicker.regional=jquery.datepicker-de.js
|
|
||||||
|
|
||||||
|
|
||||||
##################################################
|
|
||||||
# ERROR MESSAGES
|
|
||||||
##################################################
|
|
||||||
error_title=Leider konnten Ihre Eingaben nicht verarbeitet werden.
|
|
||||||
error_message=Bitte überprüfen Sie Ihre Eingaben und korrigieren Sie ggf. die mit einem * markierten Eingabefelder.
|
|
||||||
error_message_general_title=Leider ist ein Fehler aufgetreten.
|
|
||||||
error_message_general=Es tut uns leid. Es trat unerwartet ein Fehler auf. Bitte versuchen Sie es noch einmal.
|
|
||||||
error_message_rollback_title=Der Vorgang konnte leider nicht gespeichert werden.
|
|
||||||
error_message_rollback=Es tut uns leid. Es trat ein Verarbeitungsfehler auf und Ihr Vorgang konnte nicht gespeichert werden. Bitte versuchen Sie es zu einem späteren Zeitpunkt noch einmal.
|
|
||||||
error_message_mce_image_size=Die Daten sind zu groß um eingefügt zu werden. Bitte verwenden Sie statdessen einen Link.
|
|
||||||
jakarta.faces.component.UIInput.REQUIRED=*
|
|
||||||
jakarta.faces.component.UIInput.REQUIRED_detail=Eingabe erforderlich
|
|
||||||
search_error_title=Ungültiger Suchbegriff!
|
|
||||||
search_result=Suchergebnis
|
|
||||||
serach_hits=Treffer
|
|
||||||
total_result=Gesamtergebnis
|
|
||||||
plugin_exception_title=Es liegt ein Pluginfehler vor!
|
|
||||||
plugin_exception_help=Bitte wenden Sie sich an Ihren Administrator
|
|
||||||
model_exception_title=Es liegt ein Modellfehler vor!
|
|
||||||
model_exception_help=Bitte wenden Sie sich an Ihren Administrator
|
|
||||||
|
|
||||||
####################
|
|
||||||
# General actions
|
|
||||||
####################
|
|
||||||
action=Aktion
|
|
||||||
ok=OK
|
|
||||||
yes=Ja
|
|
||||||
no=Nein
|
|
||||||
submit=Speichern
|
|
||||||
cancel=Abbrechen
|
|
||||||
add=Hinzufügen
|
|
||||||
new=Neu
|
|
||||||
delete=Löschen
|
|
||||||
archive=Archivieren
|
|
||||||
restore=Wiederherstellen
|
|
||||||
remove=Entfernen
|
|
||||||
next=Vor
|
|
||||||
prev=Zurück
|
|
||||||
edit=Bearbeiten
|
|
||||||
edited=Bearbeitet
|
|
||||||
last_edit=Letzte Bearbeitung
|
|
||||||
open=Öffnen
|
|
||||||
close=Schließen
|
|
||||||
save=Speichern
|
|
||||||
continue=Weiter
|
|
||||||
send=Senden
|
|
||||||
help=Hilfe
|
|
||||||
search=Suche
|
|
||||||
searchresult=Suchergebnis
|
|
||||||
filter=Filter
|
|
||||||
modify=Ändern
|
|
||||||
print=Drucken
|
|
||||||
reset=Zurücksetzen
|
|
||||||
read_more=Weiterlesen
|
|
||||||
confirm=Bestätigen
|
|
||||||
refresh=Aktualisieren
|
|
||||||
cancel=Abbrechen
|
|
||||||
restart=Neustart
|
|
||||||
update=Übernehmen
|
|
||||||
fullscreen=Vollbild
|
|
||||||
|
|
||||||
|
|
||||||
####################
|
|
||||||
# General Help
|
|
||||||
####################
|
|
||||||
help_delete=Wollen Sie diese Daten jetzt löschen?
|
|
||||||
help_wait_help=Bitte warten...
|
|
||||||
help_wait_fordata=Bitte warten, Ihre Daten werden angefordert.
|
|
||||||
empty_worklist=Keine Vorgänge vorhanden
|
|
||||||
empty_tasklist=Keine Aufgaben vorhanden
|
|
||||||
empty_data=Keine Daten vorhanden
|
|
||||||
discard_changes=Die Änderungen am aktuellen Dokument wurden noch nicht gespeichert. Wenn Sie den Vorgang fortsetzen gehen diese verloren.
|
|
||||||
|
|
||||||
|
|
||||||
####################
|
|
||||||
# General Lables
|
|
||||||
####################
|
|
||||||
signed_in=Angemeldet
|
|
||||||
created=Erstellt
|
|
||||||
modified=Geändert
|
|
||||||
workflow=Workflow
|
|
||||||
businessprocess=Geschäftsprozess
|
|
||||||
new_workitem=Neuer Vorgang
|
|
||||||
by=von
|
|
||||||
from=von
|
|
||||||
name=Name
|
|
||||||
forum=Forum
|
|
||||||
space=Bereich
|
|
||||||
sub_space=Teilbereich
|
|
||||||
status=Status
|
|
||||||
to=bis
|
|
||||||
owner=Bearbeiter
|
|
||||||
creator=Ersteller
|
|
||||||
currenteditor=Aktueller Bearbeiter
|
|
||||||
participants=Alle Bearbeiter
|
|
||||||
lasteditor=Letzter Bearbeiter
|
|
||||||
comment=Kommentar
|
|
||||||
comments=Kommentare
|
|
||||||
version=Version
|
|
||||||
reference=Verknüpfung
|
|
||||||
details=Details
|
|
||||||
documents=Dokumente
|
|
||||||
documents_select=Bitte wählen Sie eine Datei
|
|
||||||
documents_empty=Keine Dokumente verfügbar
|
|
||||||
documents_upload=Neue Dokumente hinzufügen
|
|
||||||
documents_upload_help=oder Dateien hier ablegen...
|
|
||||||
documents_storage=Gespeicherte Dokumente
|
|
||||||
view=Ansicht
|
|
||||||
references=Verknüpfungen
|
|
||||||
history=Historie
|
|
||||||
course=Verlauf
|
|
||||||
versions=Versionen
|
|
||||||
progress=Fortschritt
|
|
||||||
description=Beschreibung
|
|
||||||
administration=Administration
|
|
||||||
searchresult=Trefferliste
|
|
||||||
serachphrase=Suchbegriff
|
|
||||||
please_choose= - bitte wählen -
|
|
||||||
deleted=Gelöscht
|
|
||||||
weekly=Wöchentlich
|
|
||||||
monthly=Monatlich
|
|
||||||
yearly=Jährlich
|
|
||||||
daily=Täglich
|
|
||||||
hourly=Stündlich
|
|
||||||
type=Typ
|
|
||||||
summary=Zusammenfassung
|
|
||||||
ai=KI Assistent
|
|
||||||
ai.prompt=Wie kann ich Ihnen helfen?
|
|
||||||
ai.question=Frage
|
|
||||||
ai.answer=Antwort
|
|
||||||
ai.ask_question=Frage stellen...
|
|
||||||
|
|
||||||
####################
|
|
||||||
# Month
|
|
||||||
####################
|
|
||||||
month_1=Januar
|
|
||||||
month_2=Februar
|
|
||||||
month_3=März
|
|
||||||
month_4=April
|
|
||||||
month_5=Mai
|
|
||||||
month_6=Juni
|
|
||||||
month_7=Juli
|
|
||||||
month_8=August
|
|
||||||
month_9=September
|
|
||||||
month_10=Oktober
|
|
||||||
month_11=November
|
|
||||||
month_12=Dezember
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
####################
|
|
||||||
# Navigation entries
|
|
||||||
####################
|
|
||||||
nav.home=Home
|
|
||||||
nav.login=Anmeldung
|
|
||||||
nav.logout=Abmelden
|
|
||||||
nav.my_settings=Einstellungen
|
|
||||||
nav.about=About
|
|
||||||
nav.contact=Kontakt
|
|
||||||
nav.impressum=Impressum
|
|
||||||
nav.agb=AGB
|
|
||||||
nav.spaces=Bereiche
|
|
||||||
nav.processlist=Prozesse
|
|
||||||
nav.start_new_workflow=Eine neue Aufgabe starten...
|
|
||||||
nav.search_documents=Dokument Suche
|
|
||||||
nav.search_extended=Erweiterte Suche
|
|
||||||
nav.search_archive=Archiv
|
|
||||||
|
|
||||||
nav.admin_spaces=Bereiche
|
|
||||||
nav.admin_model=Workflowmodell
|
|
||||||
nav.admin_config=Konfiguration
|
|
||||||
nav.admin_profiles=Anwender Profile
|
|
||||||
nav.admin_processlist=Prozesse
|
|
||||||
nav.admin_process=Prozess
|
|
||||||
nav.admin_init=System Check
|
|
||||||
nav.admin_workflow_scheduler=Timer Service
|
|
||||||
nav.admin_rebuild_searchindex=Update Volltextindex
|
|
||||||
nav.admin_dms=DMS
|
|
||||||
nav.admin_model=Modelle
|
|
||||||
nav.admin_reporting=Reporting
|
|
||||||
nav.admin_textblocks=Text Blöcke
|
|
||||||
|
|
||||||
|
|
||||||
####################
|
|
||||||
# Login
|
|
||||||
####################
|
|
||||||
login.login_title=Anmeldung
|
|
||||||
login.login_error=Anmeldung fehlgeschlagen!
|
|
||||||
login.login_error_help=Bitte überprüfen Sie Ihr Passwort und Ihre UserID
|
|
||||||
login.authorization_title=Berechtigung
|
|
||||||
login.authorization_error=Fehlende Zugriffsberechtigung!
|
|
||||||
login.authorization_error_help=Auf die von Ihnen angeforderte Seite kann nicht zugegriffen werden.
|
|
||||||
login.logout_title=Sie haben sich erfolgreich abgemeldet
|
|
||||||
login.logout_help=Sie können dieses Browserfenster nun schließen oder sich erneut anmelden.
|
|
||||||
login.login=Anmelden
|
|
||||||
login.username=Username
|
|
||||||
login.password=Passwort
|
|
||||||
login.session_expired_title=Ihre Sitzung ist abgelaufen
|
|
||||||
login.session_expired_help=Aus Sicherheitsgründen wurde die aktuelle Sitzung geschlossen.
|
|
||||||
login.conversation_expired_title=Ihre Eingabedaten sind nicht mehr aktuell
|
|
||||||
login.conversation_expired_help=Bitte öffnen Sie den Vorgang erneut, um die Bearbeitung fortzusetzen, oder schließen Sie das Browserfenster.
|
|
||||||
login.optimisticlock_exception_title=Der Vorgang wurde zwischenzeitlich verändert.
|
|
||||||
login.optimisticlock_exception_help=Bitte öffnen Sie den Vorgang erneut, um die Bearbeitung fortzusetzen.
|
|
||||||
login.password_expired=Ihr Passwort läuft in wenigen Tagen ab. Bitte ändern Sie Ihr Passwort in Ihrem 'Benutzerprofil'.
|
|
||||||
|
|
||||||
|
|
||||||
##################################################
|
|
||||||
# View MESSAGES
|
|
||||||
##################################################
|
|
||||||
worklist.owner=Meine Aufgaben
|
|
||||||
worklist.author=Aktuelle Aufgaben
|
|
||||||
worklist.creator=Meine Vorgänge
|
|
||||||
worklist.creator_selection=Nur meine Vorgänge anzeigen
|
|
||||||
worklist.favorite=Lesezeichen
|
|
||||||
worklist.favorite.help=Lesezeichen hinzufügen/entfernen
|
|
||||||
worklist.all=Alle
|
|
||||||
worklist.in_progress=in Bearbeitung
|
|
||||||
worklist.archive=Archiv
|
|
||||||
worklist.archive_selection=Nur archivierte Vorgänge anzeigen
|
|
||||||
worklist.type=Vorgänge
|
|
||||||
worklist.type_workitem=Aktuell in Bearbeitung
|
|
||||||
worklist.type_workitemarchive=Archiviert
|
|
||||||
worklist.tasklist_by=Aufgaben von
|
|
||||||
worklist.created_by=Erstellt von
|
|
||||||
worklist.edited_by=Bearbeitet von
|
|
||||||
worklist.deletions=Gelöscht
|
|
||||||
worklist.search_phrase=Suchbegriff
|
|
||||||
worklist.workflowgroup=Workflow
|
|
||||||
worklist.workflowstatus=Status
|
|
||||||
worklist.space=Bereich
|
|
||||||
worklist.date_range=Zeitraum
|
|
||||||
worklist.date_range_help=Erstellt im Zeitraum
|
|
||||||
worklist.sortorder=Sortierung
|
|
||||||
worklist.sortorder_help=Trefferliste sortieren nach
|
|
||||||
worklist.sortorder_relevance=nach Relevanz
|
|
||||||
worklist.sortorder_lastupdate=nach Aktualiät
|
|
||||||
worklist.sortorder_newest=Neueste zuerst
|
|
||||||
worklist.sortorder_oldest=Älteste zuerst
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##################################################
|
|
||||||
# Profile
|
|
||||||
##################################################
|
|
||||||
profile.title=Benutzerprofil
|
|
||||||
profile.view=Benutzerprofile
|
|
||||||
profile.title_my_profile=Mein Profil
|
|
||||||
profile.sub_title_general=Allgemein
|
|
||||||
profile.sub_title_settings=Einstellungen
|
|
||||||
profile.lastlogin=Letzer Login
|
|
||||||
profile.userid=User-ID
|
|
||||||
profile.password=Passwort
|
|
||||||
profile.newpassword=Neues Passwort
|
|
||||||
profile.repeatpassword=Wiederholung
|
|
||||||
profile.passworderror=Die Passwörter sind nicht gleich.
|
|
||||||
profile.groups=Gruppen
|
|
||||||
profile.deputy=Vertretung
|
|
||||||
profile.firstname=Vorname
|
|
||||||
profile.lastname=Nachname
|
|
||||||
profile.displayname=Anzeigename
|
|
||||||
profile.displayname_error=Dieser Name wurde bereits vergeben. Bitte wählen Sie einen anderen Namen
|
|
||||||
profile.email_error=Bitte geben Sie eine gültige Email Adresse ein
|
|
||||||
profile.phone1=Telefon
|
|
||||||
profile.phone2=Telefon mobil
|
|
||||||
profile.company=Firma
|
|
||||||
profile.address=Adresse
|
|
||||||
profile.zip=Postleitzahl
|
|
||||||
profile.city=Ort
|
|
||||||
profile.country=Land
|
|
||||||
profile.state=Bundesland
|
|
||||||
profile.email=E-Mail
|
|
||||||
profile.website=Website
|
|
||||||
profile.aboutme=Über mich
|
|
||||||
profile.description=Anmerkungen
|
|
||||||
profile.locale=Spracheinstellung
|
|
||||||
profile.initials=Kürzel
|
|
||||||
|
|
||||||
myprofile.title=Mein Benutzerprofil
|
|
||||||
myprofile.locale=Sprache
|
|
||||||
|
|
||||||
|
|
||||||
##################################################
|
|
||||||
# space
|
|
||||||
##################################################
|
|
||||||
space.title=Bereich
|
|
||||||
space.view=Bereiche
|
|
||||||
space.sub_general=Allgemein
|
|
||||||
space.sub_team=Team
|
|
||||||
space.help_general=Geben Sie hier den Namen und eine Beschreibung für den Bereich ein.
|
|
||||||
space.help_team=Tragen Sie hier Teammitglieder für den Bereich ein.
|
|
||||||
|
|
||||||
|
|
||||||
space.name=Name
|
|
||||||
space.email=Email
|
|
||||||
space.adduser_error=Der Anwender '[username]' wurde nicht gefunden.
|
|
||||||
space.description=Beschreibung
|
|
||||||
space.processlist=Geschäftsprozesse
|
|
||||||
space.processdirectory=Verzeichnis
|
|
||||||
space.processselection=Auswahl
|
|
||||||
space.manager=Verantwortlich
|
|
||||||
space.team=Team
|
|
||||||
space.assist=Assistenz
|
|
||||||
|
|
||||||
space.help1=Tragen Sie mehrere Einträge in einzelne Zeilen ein
|
|
||||||
|
|
||||||
|
|
||||||
##################################################
|
|
||||||
# process
|
|
||||||
##################################################
|
|
||||||
process.title=Prozess
|
|
||||||
process.view=Prozesse
|
|
||||||
process.sub_general=Allgemein
|
|
||||||
process.sub_team=Team
|
|
||||||
process.sub_processlist=Workflows
|
|
||||||
process.sub_reports=Reports
|
|
||||||
process.sub_spaces=Bereiche
|
|
||||||
process.help_general=Geben Sie hier den Namen und eine Beschreibung für den Bereich ein.
|
|
||||||
process.help_team=Tragen Sie hier Teammitglieder für den Prozess ein.
|
|
||||||
process.help_processlist=Wählen Sie einzelne Workflows aus um diese mit dem Prozess zu verknüpfen.
|
|
||||||
process.help_spaces=Wählen Sie einzelne Bereiche aus um diese mit dem Prozess zu verknüpfen.
|
|
||||||
process.help_reports=Wählen Sie hier Reports aus, welche den Prozessverantwortlichen in der Managementsicht eingeblendet werden sollen.
|
|
||||||
|
|
||||||
process.name=Name
|
|
||||||
process.email=Email
|
|
||||||
process.adduser_error=Der Anwender '[username]' wurde nicht gefunden.
|
|
||||||
process.description=Beschreibung
|
|
||||||
process.processlist=Geschäftsprozesse
|
|
||||||
process.processdirectory=Verzeichnis
|
|
||||||
process.processselection=Auswahl
|
|
||||||
process.manager=Verantwortlich
|
|
||||||
process.team=Team
|
|
||||||
process.assist=Assistenz
|
|
||||||
process.spaces=Bereiche
|
|
||||||
process.help1=Tragen Sie mehrere Einträge in einzelne Zeilen ein
|
|
||||||
|
|
||||||
|
|
||||||
##################################################
|
|
||||||
# Organigram
|
|
||||||
##################################################
|
|
||||||
organigram.title=Organisation
|
|
||||||
organigram.process=Prozess
|
|
||||||
organigram.processes=Prozesse
|
|
||||||
organigram.processes.description=Prozesse & Verantwortlichkeiten
|
|
||||||
|
|
||||||
organigram.space=Bereiche
|
|
||||||
organigram.spaces=Bereiche
|
|
||||||
organigram.spaces.description=Fachbereiche & Abteilungen
|
|
||||||
|
|
||||||
roles_and_rights.title=Rollen & Rechte
|
|
||||||
|
|
||||||
##################################################
|
|
||||||
# textblocks
|
|
||||||
##################################################
|
|
||||||
textblock.view=Text Blöcke
|
|
||||||
textblock.title=Text Block
|
|
||||||
|
|
||||||
|
|
||||||
##################################################
|
|
||||||
# Forms
|
|
||||||
##################################################
|
|
||||||
form.space=Bereich
|
|
||||||
form.date=Datum
|
|
||||||
form.reminder=Wiedervorlage
|
|
||||||
form.appointment=Termin
|
|
||||||
form.followup=Wiedervorlage
|
|
||||||
form.none=keine
|
|
||||||
form.weekly=wöchentlich
|
|
||||||
form.monthly=monatlich
|
|
||||||
form.yearly=jährlich
|
|
||||||
form.deadline=Fällig
|
|
||||||
form.projectnumber=Projektnummer
|
|
||||||
form.projectname=Projektname
|
|
||||||
form.projectdate=Datum
|
|
||||||
form.contractnumber=Vertragsnummer
|
|
||||||
form.ordernumber=Bestellnummer
|
|
||||||
form.orderdate=Bestelldatum
|
|
||||||
form.description=Beschreibung
|
|
||||||
form.contact=Kontakt
|
|
||||||
form.contract=Vertrag
|
|
||||||
form.subject=Thema
|
|
||||||
form.startdate=Start
|
|
||||||
form.enddate=Ende
|
|
||||||
form.type=Typ
|
|
||||||
form.capacity=Umfang
|
|
||||||
form.invoicenumber=Rechnungsnummer
|
|
||||||
form.customer=Kunde
|
|
||||||
form.customernumber=Kundennummer
|
|
||||||
form.amount=Betrag
|
|
||||||
form.price=Betrag
|
|
||||||
form.total=Summe
|
|
||||||
form.quantity=Menge
|
|
||||||
form.unit=Einheit
|
|
||||||
form.amount_brutto=Brutto Betrag
|
|
||||||
form.invoicedate=Rechnungsdatum
|
|
||||||
form.tax=Mwst
|
|
||||||
form.order=Bestellung
|
|
||||||
form.project=Projekt
|
|
||||||
form.phone1=Tel.
|
|
||||||
form.phone2=Mobile
|
|
||||||
form.incoming_order=Auftrag
|
|
||||||
form.phone3=Fax
|
|
||||||
form.company=Firma
|
|
||||||
form.department=Abteilung
|
|
||||||
form.address=Adresse
|
|
||||||
form.zip=Postleitzahl
|
|
||||||
form.city=Ort
|
|
||||||
form.country=Land
|
|
||||||
form.state=Bundesland
|
|
||||||
form.email=E-Mail
|
|
||||||
form.website=Website
|
|
||||||
form.internet=Internet
|
|
||||||
form.firstname=Vorname
|
|
||||||
form.lastname=Nachname
|
|
||||||
form.other=Sonstiges
|
|
||||||
form.bankdata=Bankverbindung
|
|
||||||
form.bankcode=BLZ
|
|
||||||
form.codenumber=Konto
|
|
||||||
form.vatid=USt-IdNr
|
|
||||||
form.team=Team
|
|
||||||
form.responsible=Verantwortlich
|
|
||||||
form.comment.comment=neuer Kommentar
|
|
||||||
form.comment.history=Verlauf
|
|
||||||
form.justification=Begründung
|
|
||||||
|
|
||||||
form.attachments.files=Dateien
|
|
||||||
form.attachments.link=Link
|
|
||||||
form.attachments.addlink=Link hinzufügen
|
|
||||||
form.attachments.fileupload.button=Datei hinzufügen
|
|
||||||
form.attachments.fileupload.help=oder Datei hier ablegen...
|
|
||||||
form.attachments.checksum=Prüfsumme
|
|
||||||
|
|
||||||
form.reference.outgoing=Vorhandene Vorgänge verknüpfen
|
|
||||||
form.reference.incomming=Weitere Vorgänge
|
|
||||||
|
|
||||||
# Timesheet
|
|
||||||
form.timesheet.date=Datum
|
|
||||||
form.timesheet.duration=Dauer
|
|
||||||
form.timesheet.subject=Thema
|
|
||||||
form.timesheet.categories=Kategorien
|
|
||||||
form.timesheet.category=Kategorie
|
|
||||||
form.timesheet.status=Status
|
|
||||||
|
|
||||||
# Orderitems
|
|
||||||
orderitems.pos=Pos.
|
|
||||||
orderitems.description=Beschreibung
|
|
||||||
orderitems.amount=Betrag
|
|
||||||
orderitems.price=Betrag
|
|
||||||
orderitems.total=Summe
|
|
||||||
orderitems.quantity=Menge
|
|
||||||
orderitems.unit=Einheit
|
|
||||||
|
|
||||||
# Minutes
|
|
||||||
form.minutes.date=Datum
|
|
||||||
form.minutes.team=Teilnehmer
|
|
||||||
form.minutes.present=Anwesend
|
|
||||||
form.minutes.space=Bereich
|
|
||||||
form.minutes.subject=Thema
|
|
||||||
form.minutes.help_datdate=Wählen Sie hier ein Datum für das Protokoll aus.
|
|
||||||
form.minutes.help_team=Tragen Sie hier die Namen der Teilnehmer ein, oder deren Emailadresse um diese automatisch zu benachrichtigen.
|
|
||||||
form.minutes.help_subject=Geben Sie hier den Protokolltitel ein.
|
|
||||||
form.minutes.subject_minute=Protokollpunkt
|
|
||||||
form.minutes.description=Beschreibung
|
|
||||||
form.minutes.responsible=Verantwortlich
|
|
||||||
form.minutes.deadline=Termin
|
|
||||||
form.minutes.help_deadline=Wählen Sie hier ein Datum aus.
|
|
||||||
form.minutes.help_responsible=Wählen Sie hier einen Verantwortlichen aus.
|
|
||||||
|
|
||||||
|
|
||||||
##################################################
|
|
||||||
# ADMINISTRATION
|
|
||||||
##################################################
|
|
||||||
admin.timer.configuration=Konfiguration
|
|
||||||
admin.timer.start=Start
|
|
||||||
admin.timer.stop=Stop
|
|
||||||
admin.timer.interval=Intervall
|
|
||||||
admin.timer.hours=Stunden
|
|
||||||
admin.timer.minutes=Minuten
|
|
||||||
admin.confirm_rebuildindex=Volltextindizierung jetzt starten? Dieser Prozess kann mehrere Stunden in Anspruch nehmen!
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
####################
|
|
||||||
# Configuration
|
|
||||||
####################
|
|
||||||
config.title=Konfiguration
|
|
||||||
config.workflow=Workflow
|
|
||||||
config.views=Ansichten
|
|
||||||
config.additionalproperties=Weitere Eigenschaften
|
|
||||||
config.maxprojecthistorylength=max entries project history
|
|
||||||
config.maxprofilehistorylength=max entries profile history
|
|
||||||
config.maxworkitemhistorylength=max entries workitem history
|
|
||||||
config.sortby=Sortierung
|
|
||||||
config.sortorder=Reihenfolge
|
|
||||||
config.portlet.viewcount=Portlet Einträge
|
|
||||||
config.defaultprojectprocesslist=Vorgabe Workflows
|
|
||||||
config.sequencenumbers=Nummernkreise
|
|
||||||
config.workflowmodellist=Workflow Modelle
|
|
||||||
config.security=Sicherheit
|
|
||||||
config.enable_database_realm=Enable User Database
|
|
||||||
config.usergroups=Gruppen
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
####################
|
|
||||||
# Reporting
|
|
||||||
####################
|
|
||||||
report.title=Report
|
|
||||||
report.view=Reports
|
|
||||||
report.parameters=Parameter
|
|
||||||
report.result=Ausgabe Ergebnis
|
|
||||||
report.output=Ausgabe Format
|
|
||||||
report.encoding=Zeichenkodierung
|
|
||||||
report.page_size=Maximale Anzahl pro Seite
|
|
||||||
report.page_index=Seitennummer
|
|
||||||
report.sort_by=Sortierung nach
|
|
||||||
report.sortorder_reverse=Umgekehrte Reihenfolge
|
|
||||||
|
|
||||||
####################
|
|
||||||
# WOPI
|
|
||||||
####################
|
|
||||||
wopi_ok=Änderungen verwerfen
|
|
||||||
wopi_cancel=Bearbeitung fortsetzen
|
|
||||||
wopi_confirm_title=Dokument nicht gespeichert!
|
|
||||||
wopi_confirm_message= <p>Die Änderungen am aktuellen Dokument wurden noch nicht gespeichert. </p><p><span>Klicken Sie in der oberen Menüleiste auf das </span><img src="/layout/icons/wopi_save.png" style="position:absolute;"/><span style="margin-left: 18px;">, um Ihre Änderungen zu übernehmen.</span></p>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,556 +0,0 @@
|
||||||
###############################################################################
|
|
||||||
# Imixs Workflow Technology
|
|
||||||
# Copyright (C) 2003, 2008 Imixs Software Solutions GmbH,
|
|
||||||
# http://www.imixs.com
|
|
||||||
#
|
|
||||||
# Contributors:
|
|
||||||
# Imixs Software Solutions GmbH - initial API and implementation
|
|
||||||
# Ralph Soika
|
|
||||||
#
|
|
||||||
###############################################################################
|
|
||||||
# Global
|
|
||||||
timeZone=CET
|
|
||||||
datePattern=dd. MMM yyyy
|
|
||||||
datePatternShort=dd.MM.yyyy
|
|
||||||
datePatternLong=EEE, dd. MMM yyyy
|
|
||||||
dateTimePattern=dd. MMM yyyy (HH:mm)
|
|
||||||
dateTimePatternShort=dd.MM.yyyy HH:mm:ss
|
|
||||||
dateTimePatternLong=EEE, dd. MMM yyyy HH:mm:ss
|
|
||||||
|
|
||||||
de=Deutsch
|
|
||||||
en=Englisch
|
|
||||||
|
|
||||||
jquey.datepicker.regional=jquery.datepicker-en.js
|
|
||||||
|
|
||||||
|
|
||||||
##################################################
|
|
||||||
# ERROR MESSAGES
|
|
||||||
##################################################
|
|
||||||
error_title=Input Errors!
|
|
||||||
error_message=Please verify your input and correct input fields marked with a *
|
|
||||||
error_message_general_title=Sorry, an error has occurred!
|
|
||||||
error_message_general=We are sorry, unfortunately an unexpected error occurred. Please try again.
|
|
||||||
error_message_rollback_title=Sorry, the request could not be processed.
|
|
||||||
error_message_rollback=We are Sorry. A processing error occurred and your operation could not be saved. Please try again later.
|
|
||||||
error_message_mce_image_size=This data is to large, to be inserted. Please use a link instead!
|
|
||||||
javax.faces.component.UIInput.REQUIRED=*
|
|
||||||
javax.faces.component.UIInput.REQUIRED_detail=Input required
|
|
||||||
search_error_title=Invalid search term!
|
|
||||||
search_result=Searchresult
|
|
||||||
serach_hits=Hits
|
|
||||||
total_result=Total Searchresult
|
|
||||||
plugin_exception_title=A plugin error has occured!
|
|
||||||
plugin_exception_help=Please contact your administrator
|
|
||||||
model_exception_title=A model error has occured!
|
|
||||||
model_exception_help=Please contact your administrator
|
|
||||||
|
|
||||||
####################
|
|
||||||
# General actions
|
|
||||||
####################
|
|
||||||
action=Action
|
|
||||||
ok=OK
|
|
||||||
yes=Yes
|
|
||||||
no=No
|
|
||||||
submit=Submit
|
|
||||||
cancel=Cancel
|
|
||||||
add=Add
|
|
||||||
new=New
|
|
||||||
delete=Delete
|
|
||||||
archive=Archive
|
|
||||||
restore=Restore
|
|
||||||
remove=Remove
|
|
||||||
next=Next
|
|
||||||
prev=Prev
|
|
||||||
edit=Edit
|
|
||||||
edited=Edited
|
|
||||||
last_edit=Last Edit
|
|
||||||
open=Open
|
|
||||||
close=Close
|
|
||||||
save=Save
|
|
||||||
continue=Continue
|
|
||||||
send=Send
|
|
||||||
help=Help
|
|
||||||
search=Search
|
|
||||||
searchresult=Searchresult
|
|
||||||
filter=Search filter
|
|
||||||
modify=Change
|
|
||||||
print=Print
|
|
||||||
reset=Reset
|
|
||||||
read_more=more
|
|
||||||
confirm=Confirm
|
|
||||||
refresh=Update
|
|
||||||
cancel=Cancel
|
|
||||||
restart=Restart
|
|
||||||
update=Update
|
|
||||||
fullscreen=Fullscreen
|
|
||||||
|
|
||||||
|
|
||||||
####################
|
|
||||||
# General Help
|
|
||||||
####################
|
|
||||||
help_delete=Do you really want to delete this data?
|
|
||||||
help_wait_help=Plese wait...
|
|
||||||
help_wait_fordata=Please wait, your data will be requested...
|
|
||||||
empty_worklist=No tasks
|
|
||||||
empty_tasklist=No tasks
|
|
||||||
empty_data=No data available
|
|
||||||
discard_changes=The changes to the current document have not yet been saved. If you continue the process, your changes will be lost.
|
|
||||||
|
|
||||||
|
|
||||||
####################
|
|
||||||
# General Lables
|
|
||||||
####################
|
|
||||||
signed_in=Logged in
|
|
||||||
created=Created
|
|
||||||
modified=Last changed
|
|
||||||
workflow=Workflow
|
|
||||||
businessprocess=Business process
|
|
||||||
new_workitem=New Task
|
|
||||||
by=by
|
|
||||||
from=from
|
|
||||||
name=Name
|
|
||||||
forum=Forum
|
|
||||||
space=Section
|
|
||||||
sub_space=Subsection
|
|
||||||
status=Status
|
|
||||||
to=to
|
|
||||||
owner=Owner
|
|
||||||
creator=Creator
|
|
||||||
currenteditor=Current editor
|
|
||||||
participants=All editors
|
|
||||||
lasteditor=Last editor
|
|
||||||
comment=Comment
|
|
||||||
comments=Comments
|
|
||||||
version=Version
|
|
||||||
reference=Link
|
|
||||||
details=Details
|
|
||||||
documents=Documents
|
|
||||||
documents_select=Please select a document
|
|
||||||
documents_empty=No documents available
|
|
||||||
documents_upload=Add new documents
|
|
||||||
documents_upload_help=or drop documents here...
|
|
||||||
|
|
||||||
documents_storage=Saved documents
|
|
||||||
view=View
|
|
||||||
references=References
|
|
||||||
history=History
|
|
||||||
course=Course
|
|
||||||
versions=Versions
|
|
||||||
progress=Progress
|
|
||||||
description=Description
|
|
||||||
administration=Administration
|
|
||||||
searchresult=Searchresult
|
|
||||||
serachphrase=Serachphrase
|
|
||||||
please_choose= - please choose -
|
|
||||||
deleted=Deleted
|
|
||||||
weekly=Weekly
|
|
||||||
monthly=Monthly
|
|
||||||
yearly=Yearly
|
|
||||||
daily=Daily
|
|
||||||
hourly=Hourly
|
|
||||||
type=Type
|
|
||||||
summary=Summary
|
|
||||||
ai=AI Assistent
|
|
||||||
ai.prompt=How can I help you?
|
|
||||||
ai.question=Question
|
|
||||||
ai.answer=Answer
|
|
||||||
ai.ask_question=Ask question...
|
|
||||||
|
|
||||||
####################
|
|
||||||
# Month
|
|
||||||
####################
|
|
||||||
month_1=January
|
|
||||||
month_2=February
|
|
||||||
month_3=March
|
|
||||||
month_4=April
|
|
||||||
month_5=May
|
|
||||||
month_6=June
|
|
||||||
month_7=July
|
|
||||||
month_8=August
|
|
||||||
month_9=September
|
|
||||||
month_10=October
|
|
||||||
month_11=November
|
|
||||||
month_12=December
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
####################
|
|
||||||
# Navigation entries
|
|
||||||
####################
|
|
||||||
nav.home=Home
|
|
||||||
nav.login=Login
|
|
||||||
nav.logout=Logout
|
|
||||||
nav.my_settings=Settings
|
|
||||||
nav.about=About
|
|
||||||
nav.contact=Contact
|
|
||||||
nav.impressum=Impressum
|
|
||||||
nav.agb=AGB
|
|
||||||
nav.spaces=Sections
|
|
||||||
nav.processlist=Business Processes
|
|
||||||
nav.start_new_workflow=Start new task...
|
|
||||||
nav.search_documents=Search documents
|
|
||||||
nav.search_extended=Extended Search
|
|
||||||
nav.search_archive=Archive
|
|
||||||
|
|
||||||
nav.admin_spaces=Sections
|
|
||||||
nav.admin_model=Workflowmodell
|
|
||||||
nav.admin_config=Configuration
|
|
||||||
nav.admin_profiles=User Profiles
|
|
||||||
nav.admin_processlist=Process List
|
|
||||||
nav.admin_process=Process
|
|
||||||
nav.admin_init=System Check
|
|
||||||
nav.admin_workflow_scheduler=Timer Service
|
|
||||||
nav.admin_rebuild_searchindex=Update Fulltextindex
|
|
||||||
nav.admin_dms=DMS
|
|
||||||
nav.admin_model=Models
|
|
||||||
nav.admin_reporting=Reporting
|
|
||||||
nav.admin_textblocks=Text Blocks
|
|
||||||
|
|
||||||
|
|
||||||
####################
|
|
||||||
# Login
|
|
||||||
####################
|
|
||||||
login.login_title=Login
|
|
||||||
login.login_error=Login failed!
|
|
||||||
login.login_error_help=Please check your password and user ID
|
|
||||||
login.authorization_title=Authorization
|
|
||||||
login.authorization_error=Missing Authorization!
|
|
||||||
login.authorization_error_help=The page you requested can not be accessed.
|
|
||||||
login.logout_title=You are logged out!
|
|
||||||
login.logout_help=You can now close this browser window or log in again
|
|
||||||
login.login=Login
|
|
||||||
login.username=User name
|
|
||||||
login.password=Password
|
|
||||||
login.session_expired_title=Your session has expired
|
|
||||||
login.session_expired_help=For security purposes, the current session has been closed.
|
|
||||||
login.conversation_expired_title=Your input data is no longer valid
|
|
||||||
login.conversation_expired_help=Please open the task again to continue editing, or close your browser window.
|
|
||||||
login.optimisticlock_exception_title=The request has been changed in the meantime.
|
|
||||||
login.optimisticlock_exception_help=Please reopen the request to continue editing.
|
|
||||||
login.password_expired=Your password will expire in a few days. Please change your password by editing your 'User-Profile'.
|
|
||||||
|
|
||||||
|
|
||||||
##################################################
|
|
||||||
# View MESSAGES
|
|
||||||
##################################################
|
|
||||||
worklist.owner=My Task List
|
|
||||||
worklist.author=Current Tasks
|
|
||||||
worklist.creator=My Requests
|
|
||||||
worklist.creator_selection=Show my requests only
|
|
||||||
worklist.favorite=Bookmarks
|
|
||||||
worklist.favorite.help=Add/remove to Bookmarks
|
|
||||||
worklist.all=All
|
|
||||||
worklist.in_progress=in progress
|
|
||||||
worklist.archive=Archive
|
|
||||||
worklist.archive_selection=Show archive only
|
|
||||||
worklist.type=Requests
|
|
||||||
worklist.type_workitem=Currently in progress
|
|
||||||
worklist.type_workitemarchive=Archived
|
|
||||||
worklist.tasklist_by=Tasks of
|
|
||||||
worklist.created_by=Created by
|
|
||||||
worklist.edited_by=Edited by
|
|
||||||
worklist.deletions=Deleted
|
|
||||||
worklist.search_phrase=Search phrase
|
|
||||||
worklist.workflowgroup=Workflow
|
|
||||||
worklist.workflowstatus=Status
|
|
||||||
worklist.space=Section
|
|
||||||
worklist.date_range=Date
|
|
||||||
worklist.date_range_help=Created between
|
|
||||||
worklist.sortorder=Sort by
|
|
||||||
worklist.sortorder_help=Sort Search Result
|
|
||||||
worklist.sortorder_relevance=relevance
|
|
||||||
worklist.sortorder_lastupdate=last update
|
|
||||||
worklist.sortorder_newest=newest first
|
|
||||||
worklist.sortorder_oldest=oldest first
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##################################################
|
|
||||||
# Profile
|
|
||||||
##################################################
|
|
||||||
profile.title=Userprofile
|
|
||||||
profile.view=Userprofiles
|
|
||||||
profile.title_my_profile=My Profile
|
|
||||||
profile.sub_title_general=General
|
|
||||||
profile.sub_title_settings=Settings
|
|
||||||
profile.lastlogin=Last Login
|
|
||||||
profile.userid=User-ID
|
|
||||||
profile.password=Password
|
|
||||||
profile.newpassword=New Password
|
|
||||||
profile.repeatpassword=Repeat
|
|
||||||
profile.passworderror=The passwords are not the same.
|
|
||||||
profile.groups=Groups
|
|
||||||
profile.deputy=Deputy
|
|
||||||
profile.firstname=Firstname
|
|
||||||
profile.lastname=Lastname
|
|
||||||
profile.displayname=Username
|
|
||||||
profile.displayname_error=The name is already in use. Please choose another..
|
|
||||||
profile.email_error=Please enter a valid email address.
|
|
||||||
profile.phone1=Phone
|
|
||||||
profile.phone2=Mobil phone
|
|
||||||
profile.company=Company
|
|
||||||
profile.address=Address
|
|
||||||
profile.zip=Zip code
|
|
||||||
profile.city=City
|
|
||||||
profile.country=Country
|
|
||||||
profile.state=State
|
|
||||||
profile.email=Email
|
|
||||||
profile.website=Website
|
|
||||||
profile.aboutme=About me
|
|
||||||
profile.description=Description
|
|
||||||
profile.locale=Language setting
|
|
||||||
profile.initials=Initials
|
|
||||||
|
|
||||||
myprofile.title=My Profile
|
|
||||||
myprofile.locale=Language
|
|
||||||
|
|
||||||
|
|
||||||
##################################################
|
|
||||||
# space
|
|
||||||
##################################################
|
|
||||||
space.title=Section
|
|
||||||
space.view=Sections
|
|
||||||
space.sub_general=General
|
|
||||||
space.sub_team=Team
|
|
||||||
space.help_general=Enter a name and description.
|
|
||||||
space.help_team=Enter the team members.
|
|
||||||
|
|
||||||
|
|
||||||
space.name=Name
|
|
||||||
space.email=Email
|
|
||||||
space.adduser_error=The User-ID '[username]' was not found.
|
|
||||||
space.description=Description
|
|
||||||
space.processlist=Process List
|
|
||||||
space.processdirectory=Directory
|
|
||||||
space.processselection=Selection
|
|
||||||
space.manager=Manager
|
|
||||||
space.team=Team
|
|
||||||
space.assist=Assistance
|
|
||||||
|
|
||||||
space.help1=Enter multiple entries into separate lines
|
|
||||||
|
|
||||||
|
|
||||||
##################################################
|
|
||||||
# process
|
|
||||||
##################################################
|
|
||||||
process.title=Process
|
|
||||||
process.view=Processes
|
|
||||||
process.sub_general=General
|
|
||||||
process.sub_team=Team
|
|
||||||
process.sub_processlist=Workflows
|
|
||||||
process.sub_reports=Reports
|
|
||||||
process.sub_spaces=Sections
|
|
||||||
process.help_general=Enter a name and description.
|
|
||||||
process.help_team=Enter the team members.
|
|
||||||
process.help_processlist=Select individual workflows to associate it with this process.
|
|
||||||
process.help_spaces=Select specific sections to associate it with the process.
|
|
||||||
process.help_reports=Select reports, to be displayed to the managers of this process.
|
|
||||||
|
|
||||||
process.name=Name
|
|
||||||
process.email=Email
|
|
||||||
process.adduser_error=Der Anwender '[username]' wurde nicht gefunden.
|
|
||||||
process.description=Description
|
|
||||||
process.processlist=Process List
|
|
||||||
process.processdirectory=Directory
|
|
||||||
process.processselection=Selection
|
|
||||||
process.manager=Manager
|
|
||||||
process.team=Team
|
|
||||||
process.assist=Assistance
|
|
||||||
process.spaces=Sections
|
|
||||||
process.help1=Enter multiple entries into separate lines
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##################################################
|
|
||||||
# Organigram
|
|
||||||
##################################################
|
|
||||||
organigram.title=Organisation
|
|
||||||
organigram.process=Process
|
|
||||||
organigram.processes=Processes
|
|
||||||
organigram.processes.description=Processes and Responsibilities
|
|
||||||
|
|
||||||
organigram.space=Section
|
|
||||||
organigram.spaces=Sections
|
|
||||||
organigram.spaces.description=Sections & Departments
|
|
||||||
|
|
||||||
roles_and_rights.title=Roles & Rights
|
|
||||||
|
|
||||||
##################################################
|
|
||||||
# textblocks
|
|
||||||
##################################################
|
|
||||||
textblock.view=Text Blocks
|
|
||||||
textblock.title=Text Block
|
|
||||||
|
|
||||||
|
|
||||||
##################################################
|
|
||||||
# Forms
|
|
||||||
##################################################
|
|
||||||
form.space=Section
|
|
||||||
form.date=Date
|
|
||||||
form.reminder=Reminder
|
|
||||||
form.appointment=Appointment
|
|
||||||
form.followup=Follow-up
|
|
||||||
form.none=none
|
|
||||||
form.weekly=weekly
|
|
||||||
form.monthly=monthly
|
|
||||||
form.yearly=yearly
|
|
||||||
form.deadline=Deadline
|
|
||||||
form.projectnumber=Projectnumber
|
|
||||||
form.projectname=Projectname
|
|
||||||
form.projectdate=Date
|
|
||||||
form.contractnumber=Contractnumber
|
|
||||||
form.ordernumber=Ordernumber
|
|
||||||
form.orderdate=Orderdate
|
|
||||||
form.description=Description
|
|
||||||
form.contact=Contact
|
|
||||||
form.contract=Contract
|
|
||||||
form.subject=Subject
|
|
||||||
form.startdate=Start
|
|
||||||
form.enddate=End
|
|
||||||
form.type=Type
|
|
||||||
form.capacity=Capacity
|
|
||||||
form.invoicenumber=Invoicenumber
|
|
||||||
form.customer=Customer
|
|
||||||
form.customernumber=Customernumber
|
|
||||||
form.amount=Amount
|
|
||||||
form.price=Price
|
|
||||||
form.total=Total
|
|
||||||
form.quantity=Quantity
|
|
||||||
form.unit=Unit
|
|
||||||
form.amount_brutto=Amount incl
|
|
||||||
form.invoicedate=Invoicedate
|
|
||||||
form.tax=Tax
|
|
||||||
form.order=Order
|
|
||||||
form.project=Project
|
|
||||||
form.phone1=Phone
|
|
||||||
form.phone2=Mobile Phone
|
|
||||||
form.incoming_order=Order
|
|
||||||
form.phone3=Fax
|
|
||||||
form.company=Company
|
|
||||||
form.department=Department
|
|
||||||
form.address=Adress
|
|
||||||
form.zip=Zip Code
|
|
||||||
form.city=City
|
|
||||||
form.country=Country
|
|
||||||
form.state=State
|
|
||||||
form.email=Email
|
|
||||||
form.website=Website
|
|
||||||
form.internet=Internet
|
|
||||||
form.firstname=Firstname
|
|
||||||
form.lastname=Lastname
|
|
||||||
form.other=Other
|
|
||||||
form.bankdata=Bank
|
|
||||||
form.bankcode=Bankcode
|
|
||||||
form.codenumber=Codenumber
|
|
||||||
form.vatid=Vat-ID
|
|
||||||
form.team=Team
|
|
||||||
form.responsible=Responsible
|
|
||||||
form.comment.comment=New comment
|
|
||||||
form.comment.history=History
|
|
||||||
form.justification=Justification
|
|
||||||
|
|
||||||
form.attachments.files=Files
|
|
||||||
form.attachments.link=Link
|
|
||||||
form.attachments.addlink=Add Link
|
|
||||||
form.attachments.fileupload.button=Add File
|
|
||||||
form.attachments.fileupload.help=or drop files here...
|
|
||||||
form.attachments.checksum=Checksum
|
|
||||||
|
|
||||||
form.reference.outgoing=Refrences
|
|
||||||
form.reference.incomming=External Refrences
|
|
||||||
|
|
||||||
# Timesheet
|
|
||||||
form.timesheet.date=Date
|
|
||||||
form.timesheet.duration=Duration
|
|
||||||
form.timesheet.subject=Subject
|
|
||||||
form.timesheet.categories=Categories
|
|
||||||
form.timesheet.category=Category
|
|
||||||
form.timesheet.status=Status
|
|
||||||
|
|
||||||
# Orderitems
|
|
||||||
orderitems.pos=Pos.
|
|
||||||
orderitems.description=Description
|
|
||||||
orderitems.amount=Amount
|
|
||||||
orderitems.price=Price
|
|
||||||
orderitems.total=Total
|
|
||||||
orderitems.quantity=Quantity
|
|
||||||
orderitems.unit=Unit
|
|
||||||
|
|
||||||
# Minutes
|
|
||||||
form.minutes.date=Date
|
|
||||||
form.minutes.team=Team
|
|
||||||
form.minutes.present=Present
|
|
||||||
form.minutes.space=Space
|
|
||||||
form.minutes.subject=Subject
|
|
||||||
form.minutes.help_datdate=Select a date for the minutes.
|
|
||||||
form.minutes.help_team=Enter the names of the participants or their email address to automatically notify them.
|
|
||||||
form.minutes.help_subject=Enter the subject
|
|
||||||
form.minutes.subject_minute=Minute
|
|
||||||
form.minutes.description=Description
|
|
||||||
form.minutes.responsible=Responsible
|
|
||||||
form.minutes.deadline=Deadline
|
|
||||||
form.minutes.help_deadline=Select a date.
|
|
||||||
form.minutes.help_responsible=Choose the responsible person.
|
|
||||||
|
|
||||||
|
|
||||||
##################################################
|
|
||||||
# ADMINISTRATION
|
|
||||||
##################################################
|
|
||||||
admin.timer.configuration=Configuration
|
|
||||||
admin.timer.start=Start
|
|
||||||
admin.timer.stop=Stop
|
|
||||||
admin.timer.interval=Interval
|
|
||||||
admin.timer.hours=Hours
|
|
||||||
admin.timer.minutes=Minutes
|
|
||||||
admin.confirm_rebuildindex=Start rebuild search index? This process can take several hours to complete!
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
####################
|
|
||||||
# Configuration
|
|
||||||
####################
|
|
||||||
config.title=Configuration
|
|
||||||
config.workflow=Workflow
|
|
||||||
config.views=Views
|
|
||||||
config.additionalproperties=Additional Properties
|
|
||||||
config.maxprojecthistorylength=max entries project history
|
|
||||||
config.maxprofilehistorylength=max entries profile history
|
|
||||||
config.maxworkitemhistorylength=max entries workitem history
|
|
||||||
config.sortby=Sort by
|
|
||||||
config.sortorder=Sort order
|
|
||||||
config.portlet.viewcount=Portlet Count
|
|
||||||
config.defaultprojectprocesslist=Default Workflows
|
|
||||||
config.sequencenumbers=Sequence No.
|
|
||||||
config.workflowmodellist=Workflow Models
|
|
||||||
config.security=Security
|
|
||||||
config.enable_database_realm=Enable User Database
|
|
||||||
config.usergroups=Usergroups
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
####################
|
|
||||||
# Reporting
|
|
||||||
####################
|
|
||||||
report.title=Report
|
|
||||||
report.view=Reports
|
|
||||||
report.parameters=Parameter
|
|
||||||
report.result=Output Result
|
|
||||||
report.output=Output Format
|
|
||||||
report.encoding=Encoding
|
|
||||||
report.page_size=Maximum count per page
|
|
||||||
report.page_index=Page No.
|
|
||||||
report.sort_by=Sort By
|
|
||||||
report.sortorder_reverse=Reverse order
|
|
||||||
|
|
||||||
|
|
||||||
####################
|
|
||||||
# WOPI
|
|
||||||
####################
|
|
||||||
wopi_ok=Discard changes
|
|
||||||
wopi_cancel=Continue editing
|
|
||||||
wopi_confirm_title=Document not saved!
|
|
||||||
wopi_confirm_message= <p>The changes to the current document have not yet been saved. </p><p><span>Click the icon </span><img src="/layout/icons/wopi_save.png" style="position:absolute;"/><span style="margin-left: 22px;">in the top menu bar to apply your changes.</span></p>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
######################################################################
|
|
||||||
# Contains a list of supported EL Expressions used in Models
|
|
||||||
######################################################################
|
|
||||||
|
|
||||||
#{!teamController.isManagerOf(workflowController.workitem.item['process.ref'])}
|
|
||||||
#{!teamController.isManagerOf(workflowController.workitem.item['space.ref'])}
|
|
||||||
#{!teamController.isTeamMemberOf(workflowController.workitem.item['process.ref'])}
|
|
||||||
#{!teamController.isTeamMemberOf(workflowController.workitem.item['space.ref'])}
|
|
||||||
#{!teamController.isAssistOf(workflowController.workitem.item['process.ref'])}
|
|
||||||
#{!teamController.isAssistOf(workflowController.workitem.item['space.ref'])}
|
|
||||||
#{!teamController.isMemberOf(workflowController.workitem.item['process.ref'])}
|
|
||||||
#{!teamController.isMemberOf(workflowController.workitem.item['space.ref'])}
|
|
||||||
|
|
||||||
|
|
@ -1,58 +0,0 @@
|
||||||
##############################
|
|
||||||
# Imixs-Workflow
|
|
||||||
##############################
|
|
||||||
lucence.indexDir=lucene/office-workflow-index
|
|
||||||
index.fields=txtsearchstring,txtSubject,txtname,txtEmail,txtUserName,$creator,$workflowgroup,$workflowstatus,$WorkflowAbstract,$WorkflowSummary,txtworkflowhistory,space.name,process.name,_subject,_description,txtcommentlog,_childitems,invoice.number,order.number,cdtr.name,dbtr.name
|
|
||||||
index.fields.analyze=txtUsername
|
|
||||||
index.fields.noanalyze=type,$UniqueIDRef,$created,$modified,$ModelVersion,$creator,$participants,$ProcessID,datDate,$WorkflowGroup,space.ref,process.ref,txtemail,invoice.date,invoice.number,order.date,order.number,payment.date,payment.type,sequencenumber,cdtr.number,dbtr.number
|
|
||||||
index.fields.store=process.name,txtProcessName,txtWorkflowImageURL
|
|
||||||
index.fields.category=space.name,space.ref
|
|
||||||
|
|
||||||
##############################
|
|
||||||
# Model Setup
|
|
||||||
##############################
|
|
||||||
setup.system.model=system-de-1.3
|
|
||||||
model.default.data=system-de-1.3.0.bpmn
|
|
||||||
|
|
||||||
|
|
||||||
##############################
|
|
||||||
# Marty Security
|
|
||||||
##############################
|
|
||||||
security.setup.mode=auto
|
|
||||||
security.userid.input.mode=LOWERCASE
|
|
||||||
security.email.unique=true
|
|
||||||
#security.userid.input.pattern=
|
|
||||||
# Update Profile on login (OIDC/LDAP only)
|
|
||||||
#profile.login.event=10
|
|
||||||
|
|
||||||
|
|
||||||
##############################
|
|
||||||
# Mail
|
|
||||||
##############################
|
|
||||||
# mail.defaultSender=info@imixs.com
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##############################
|
|
||||||
# Imixs Archive
|
|
||||||
##############################
|
|
||||||
snapshot.history=1
|
|
||||||
snapshot.overwriteFileContent=false
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##############################
|
|
||||||
# Image reziser
|
|
||||||
##############################
|
|
||||||
image.fileExtension=jpg,gif
|
|
||||||
image.maxWidth=2048
|
|
||||||
|
|
||||||
|
|
||||||
##############################
|
|
||||||
# Office Setup
|
|
||||||
##############################
|
|
||||||
BASIC.maxviewentries=10
|
|
||||||
# Space selector (none, root, all)
|
|
||||||
search.filter.spaces=root
|
|
||||||
dms.search=true
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -1,7 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ejb-jar xmlns="https://jakarta.ee/xml/ns/jakartaee"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/ejb-jar_4_0.xsd"
|
|
||||||
version="4.0">
|
|
||||||
|
|
||||||
</ejb-jar>
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
|
|
||||||
version="2.2">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</faces-config>
|
|
||||||
|
|
@ -1,64 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<faces-config version="3.0"
|
|
||||||
xmlns="https://jakarta.ee/xml/ns/jakartaee"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-facesconfig_3_0.xsd">
|
|
||||||
|
|
||||||
|
|
||||||
<managed-bean>
|
|
||||||
<managed-bean-name>currentDate</managed-bean-name>
|
|
||||||
<managed-bean-class>java.util.Date</managed-bean-class>
|
|
||||||
<managed-bean-scope>request</managed-bean-scope>
|
|
||||||
</managed-bean>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Default navigation rules -->
|
|
||||||
<navigation-rule>
|
|
||||||
<from-view-id>/*</from-view-id>
|
|
||||||
<navigation-case>
|
|
||||||
<!-- redirect to last view -->
|
|
||||||
<from-outcome>home</from-outcome>
|
|
||||||
<to-view-id>/pages/home.xhtml</to-view-id>
|
|
||||||
<redirect />
|
|
||||||
</navigation-case>
|
|
||||||
<navigation-case>
|
|
||||||
<!-- redirect to last view -->
|
|
||||||
<from-outcome>sessionexpired</from-outcome>
|
|
||||||
<to-view-id>/sessionexpired.xhtml</to-view-id>
|
|
||||||
<redirect />
|
|
||||||
</navigation-case>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<navigation-case>
|
|
||||||
<!-- redirect to notes -->
|
|
||||||
<from-outcome>notes</from-outcome>
|
|
||||||
<to-view-id>/pages/notes.xhtml</to-view-id>
|
|
||||||
<redirect />
|
|
||||||
</navigation-case>
|
|
||||||
<navigation-case>
|
|
||||||
<from-outcome>board</from-outcome>
|
|
||||||
<to-view-id>/pages/notes_board.xhtml</to-view-id>
|
|
||||||
<redirect />
|
|
||||||
</navigation-case>
|
|
||||||
<navigation-case>
|
|
||||||
<from-outcome>search</from-outcome>
|
|
||||||
<to-view-id>/pages/workitems/worklist.xhtml</to-view-id>
|
|
||||||
<redirect />
|
|
||||||
</navigation-case>
|
|
||||||
|
|
||||||
<navigation-case>
|
|
||||||
<from-outcome>nologin</from-outcome>
|
|
||||||
<to-view-id>/loginerror.xhtml</to-view-id>
|
|
||||||
<redirect />
|
|
||||||
</navigation-case>
|
|
||||||
|
|
||||||
<navigation-case>
|
|
||||||
<from-outcome>logout</from-outcome>
|
|
||||||
<to-view-id>/logout.xhtml</to-view-id>
|
|
||||||
<redirect />
|
|
||||||
</navigation-case>
|
|
||||||
</navigation-rule>
|
|
||||||
</faces-config>
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<faces-config version="3.0"
|
|
||||||
xmlns="https://jakarta.ee/xml/ns/jakartaee"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-facesconfig_3_0.xsd">
|
|
||||||
|
|
||||||
<factory>
|
|
||||||
<exception-handler-factory>
|
|
||||||
org.imixs.workflow.office.util.ImixsExceptionHandlerFactory
|
|
||||||
</exception-handler-factory>
|
|
||||||
</factory>
|
|
||||||
|
|
||||||
<application>
|
|
||||||
|
|
||||||
<message-bundle>bundle.messages</message-bundle>
|
|
||||||
<locale-config>
|
|
||||||
<default-locale>de</default-locale>
|
|
||||||
<supported-locale>de</supported-locale>
|
|
||||||
<supported-locale>en</supported-locale>
|
|
||||||
</locale-config>
|
|
||||||
|
|
||||||
<resource-bundle>
|
|
||||||
<base-name>bundle.messages</base-name>
|
|
||||||
<var>message</var>
|
|
||||||
</resource-bundle>
|
|
||||||
|
|
||||||
<!-- application specific resource bundle -->
|
|
||||||
<resource-bundle>
|
|
||||||
<base-name>bundle.app</base-name>
|
|
||||||
<var>app</var>
|
|
||||||
</resource-bundle>
|
|
||||||
|
|
||||||
<!-- custom resource bundle -->
|
|
||||||
<resource-bundle>
|
|
||||||
<base-name>bundle.custom</base-name>
|
|
||||||
<var>custom</var>
|
|
||||||
</resource-bundle>
|
|
||||||
</application>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</faces-config>
|
|
||||||
|
|
@ -1,60 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<glassfish-ejb-jar>
|
|
||||||
|
|
||||||
<property name="default-role-mapping" value="true">
|
|
||||||
<description>Enable default group to role mapping</description>
|
|
||||||
</property>
|
|
||||||
|
|
||||||
|
|
||||||
<enterprise-beans>
|
|
||||||
|
|
||||||
<!-- RunAs declaration
|
|
||||||
<ejb>
|
|
||||||
<ejb-name>SequenceService</ejb-name>
|
|
||||||
<principal>
|
|
||||||
<name>IMIXS-WORKFLOW-Service</name>
|
|
||||||
</principal>
|
|
||||||
</ejb>
|
|
||||||
|
|
||||||
<ejb>
|
|
||||||
<ejb-name>DmsSchedulerService</ejb-name>
|
|
||||||
<principal>
|
|
||||||
<name>IMIXS-WORKFLOW-Service</name>
|
|
||||||
</principal>
|
|
||||||
</ejb>
|
|
||||||
|
|
||||||
<ejb>
|
|
||||||
<ejb-name>WorkflowSchedulerService</ejb-name>
|
|
||||||
|
|
||||||
<principal>
|
|
||||||
<name>IMIXS-WORKFLOW-Service</name>
|
|
||||||
</principal>
|
|
||||||
</ejb>
|
|
||||||
|
|
||||||
|
|
||||||
<ejb>
|
|
||||||
<ejb-name>UserGroupService</ejb-name>
|
|
||||||
<principal>
|
|
||||||
<name>IMIXS-WORKFLOW-Service</name>
|
|
||||||
</principal>
|
|
||||||
</ejb>
|
|
||||||
|
|
||||||
<ejb>
|
|
||||||
<ejb-name>SetupService</ejb-name>
|
|
||||||
<principal>
|
|
||||||
<name>IMIXS-WORKFLOW-Service</name>
|
|
||||||
</principal>
|
|
||||||
</ejb>
|
|
||||||
|
|
||||||
|
|
||||||
<ejb>
|
|
||||||
<ejb-name>SystemWorkitemService</ejb-name>
|
|
||||||
<principal>
|
|
||||||
<name>imixs-workflow-service</name>
|
|
||||||
</principal>
|
|
||||||
</ejb>
|
|
||||||
-->
|
|
||||||
|
|
||||||
</enterprise-beans>
|
|
||||||
|
|
||||||
</glassfish-ejb-jar>
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<glassfish-web-app>
|
|
||||||
<context-root>/</context-root>
|
|
||||||
|
|
||||||
|
|
||||||
<!--
|
|
||||||
The following mapping is necessary to map OpenID Connect roles to group names
|
|
||||||
Otherwise user groups are not resolved
|
|
||||||
-->
|
|
||||||
<security-role-mapping>
|
|
||||||
<role-name>org.imixs.ACCESSLEVEL.NOACCESS</role-name>
|
|
||||||
<group-name>org.imixs.ACCESSLEVEL.NOACCESS</group-name>
|
|
||||||
</security-role-mapping>
|
|
||||||
|
|
||||||
<security-role-mapping>
|
|
||||||
<role-name>org.imixs.ACCESSLEVEL.READERACCESS</role-name>
|
|
||||||
<group-name>org.imixs.ACCESSLEVEL.READERACCESS</group-name>
|
|
||||||
</security-role-mapping>
|
|
||||||
|
|
||||||
<security-role-mapping>
|
|
||||||
<role-name>org.imixs.ACCESSLEVEL.EDITORACCESS</role-name>
|
|
||||||
<group-name>org.imixs.ACCESSLEVEL.EDITORACCESS</group-name>
|
|
||||||
</security-role-mapping>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Default Mapping -->
|
|
||||||
<security-role-mapping>
|
|
||||||
<role-name>org.imixs.ACCESSLEVEL.AUTHORACCESS</role-name>
|
|
||||||
<group-name>org.imixs.ACCESSLEVEL.AUTHORACCESS</group-name>
|
|
||||||
</security-role-mapping>
|
|
||||||
<security-role-mapping>
|
|
||||||
<role-name>org.imixs.ACCESSLEVEL.MANAGERACCESS</role-name>
|
|
||||||
<group-name>org.imixs.ACCESSLEVEL.MANAGERACCESS</group-name>
|
|
||||||
<principal-name>IMIXS-WORKFLOW-Service</principal-name>
|
|
||||||
</security-role-mapping>
|
|
||||||
|
|
||||||
|
|
||||||
</glassfish-web-app>
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
||||||
<?xml version="1.1" encoding="UTF-8"?>
|
|
||||||
<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
|
|
||||||
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xmlns:s="urn:security:1.1"
|
|
||||||
xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
|
|
||||||
version="3.1" impl-version="2.0">
|
|
||||||
|
|
||||||
<assembly-descriptor>
|
|
||||||
<s:security>
|
|
||||||
<ejb-name>*</ejb-name>
|
|
||||||
<!-- This configuration is necessary to enable @runAs for the AdminPService -->
|
|
||||||
<s:missing-method-permissions-deny-access>false</s:missing-method-permissions-deny-access>
|
|
||||||
<!-- The following username can be set as a user profile to map an e-mail address -->
|
|
||||||
<s:run-as-principal>imixs-workflow-service</s:run-as-principal>
|
|
||||||
|
|
||||||
<!-- Disable see: https://github.com/imixs/imixs-office-workflow/issues/544
|
|
||||||
<s:security-domain>imixsrealm</s:security-domain>
|
|
||||||
-->
|
|
||||||
</s:security>
|
|
||||||
</assembly-descriptor>
|
|
||||||
|
|
||||||
</jboss:ejb-jar>
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<jboss-web>
|
|
||||||
<!-- Mail Ref -->
|
|
||||||
<resource-ref>
|
|
||||||
<res-ref-name>mail/org.imixs.workflow.mail</res-ref-name>
|
|
||||||
<res-type>jakarta.mail.Session</res-type>
|
|
||||||
<jndi-name>java:/mail/org.imixs.workflow.mail</jndi-name>
|
|
||||||
</resource-ref>
|
|
||||||
|
|
||||||
<context-root>/</context-root>
|
|
||||||
|
|
||||||
<!-- Disable this setting only for OpenID Connect -->
|
|
||||||
<security-domain>imixsrealm</security-domain>
|
|
||||||
|
|
||||||
|
|
||||||
</jboss-web>
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue