Files
Projektwissen/.agents/skills/sn-bpmn/Anleitung.md
T
DanielandClaude Opus 5.5 96225b5e02 Rücksprungkanten an allen Elementen vorbeiführen (#12)
- Mit Lanes: ruecksprung_points() fährt senkrecht nur in den Gängen
  zwischen den Spalten (rechts der Quelle, links des Ziels) und waagrecht
  knapp unter Quelle bzw. Ziel und in einem Kanal am Poolboden. Das
  Kanalband wird nach der Platzierung an die letzte Lane angehängt: Die
  Elemente bleiben, wo sie sind, die Kante bleibt im eigenen Pool, jede
  Rücksprungkante hat eine eigene Kanalhöhe.
- Ohne Lanes: Kanal seitlich an allen Elementen zwischen Quelle und Ziel
  vorbei (parallele Zweige stehen versetzt). Steht ein Nachbar in der
  Zeile im Weg, unten hinaus bzw. oben hinein über die Lücke zwischen den
  Zeilen (zeile(), zeile_frei()).
- beispiel_lanes: Kante S4->S2 läuft nicht mehr durch S5, Pool um das
  Kanalband höher, externer Pool entsprechend tiefer. beispiel_prozess:
  Kanal bei x 50 statt 20. Referenzmodell unverändert.
- xfail für #12 entfernt; fünf neue Tests in test_md_to_bpmn.py.
- Belastungstest (126 Rücksprung-Varianten, mit/ohne Lanes): Kreuzungen
  durch Rücksprungkanten vorher in 31 Fällen, jetzt in keinem.
- Tests: python -m pytest -q -> 102 bestanden, 2 xfail (#13).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 13:13:37 +02:00

11 KiB
Raw Blame History

Markdown → BPMN 2.0 für PICTURE

md_to_bpmn.py wandelt eine einfache textuelle Prozessbeschreibung (.md) in eine standardkonforme BPMN-2.0-XML-Datei um, die sich über den BPMN-Import in PICTURE laden lässt. BPMN 2.0 ist ein offener, seit 2011 stabiler OMG-Standard – das Skript muss dafür kein PICTURE-internes Schema "lernen" und erzeugt keine PICTURE-spezifischen UUIDs.

Empfohlener Arbeitsablauf bei unstrukturiertem Ausgangstext

  1. Rohtext (Fließtext, Stichpunkte, Sitzungsnotizen o. ä.) bereitstellen.
  2. Daraus wird eine strukturierte Arbeitsschritt-.md in der unten beschriebenen Syntax abgeleitet und zur Prüfung vorgelegt.
  3. Fachlich prüfen und in der .md direkt anpassen (Reihenfolge, Verzweigungen, Verantwortliche, Formulierungen) – dabei gegen Modellierregeln.md abgleichen.
  4. Aus der freigegebenen .md die BPMN-2.0-Datei erzeugen und in PICTURE importieren.

Schritt 2 erfordert Interpretation von Fließtext und ist kein rein mechanischer Schritt – die Qualität hängt von der Klarheit der Quelle und der fachlichen Prüfung in Schritt 3 ab. Die fachlichen BPMN-Modellierregeln stehen in Modellierregeln.md.

Aufruf

python .agents/skills/sn-bpmn/md_to_bpmn.py <prozess.md> <ausgabe.bpmn>

Beispiel (aus dem Workspace-Root):

python .agents/skills/sn-bpmn/md_to_bpmn.py entwuerfe/antrag-pruefen.md entwuerfe/antrag-pruefen.bpmn

Versionierte Modelle in der Prozessbibliothek werden nicht einzeln, sondern gesammelt erzeugt: python scripts/pruefe_prozesse.py --erzeugen (siehe docs/leitfaden/08_prozessbibliothek.md).

Die erzeugte .bpmn-Datei kann anschließend über den BPMN-Import-Dialog in PICTURE geladen werden.

Diagramm vorab prüfen, ohne PICTURE

Um zu prüfen, ob md_to_bpmn.py selbst korrekt gerechnet hat (Struktur, Anschlusspunkte, Layout) – unabhängig davon, was ein Import-Werkzeug daraus macht – eignet sich ein originalgetreuer BPMN-Viewer. Im Repository liegt einer, offline und ohne Datenübertragung:

python scripts/vorschau.py entwuerfe/<name>.md     # oder eine .bpmn

Ohne Python: werkzeuge/vorschau/vorschau.html im Browser öffnen und die .bpmn hineinziehen (Details: werkzeuge/vorschau/README.md). Alternativ:

  • demo.bpmn.io – im Browser, kein Install nötig: .bpmn-Datei per Drag & Drop reinziehen.
  • Camunda Modeler – kostenlose Desktop-App, gleiche Rendering-Engine wie bpmn.io, auch offline.

Beide übernehmen importierte Anschlusspunkte originalgetreu, statt sie neu zu berechnen.

Markdown-Syntax

Kopfzeile (optional, vor dem ersten Schritt)

Prozess: <Name des Prozesses>

Schritte

Jeder Schritt ist eine Zeile der Form:

<ID> <Typ>: <Beschriftung>
  • ID: ein kurzes, eindeutiges Kürzel ohne Leerzeichen (z. B. S1, 3.3, A)

  • Typ (Groß-/Kleinschreibung egal):

    Schreibweise im .md Erzeugtes BPMN-Element
    Start Start-Ereignis
    Ende / End End-Ereignis
    Zwischenereignis / Intermediate Zwischen-Ereignis (Catch)
    Task / Aufgabe Aufgabe (Task)
    Manuelle Aufgabe Manuelle Aufgabe
    User Aufgabe User-Aufgabe
    Service Aufgabe Service-Aufgabe
    Script Aufgabe Script-Aufgabe
    Geschäftsregel Aufgabe Geschäftsregel-Aufgabe
    Sendeaufgabe Aufgabe (sendend)
    Empfangsaufgabe Aufgabe (empfangend)
    Teilprozess / Subprocess Geschlossener Teilprozess
    Aufruf Aufruf-Element (Call Activity)
    Gateway XOR Exklusives Gateway (XOR)
    Gateway OR / Gateway ODER Inklusives Gateway (OR)
    Gateway AND / Gateway UND Paralleles Gateway (AND)
    Gateway Ereignisbasiert Ereignisbasiertes Gateway
    Hinweis / Note Textuelle Anmerkung (unverbunden)
    Datenobjekt Datenobjekt (unverbunden)
    Datenspeicher Datenspeicher (unverbunden)
    Gruppe Gruppe (unverbunden)

    Vollständige Liste inkl. Bedeutung: Elementkatalog.md.

Typisierte Ereignisse

Start-, Zwischen- und Endereignisse können ein zweites Wort für die Art des Ereignisses bekommen: <Start|Zwischenereignis|Ende> <Kind>: <Beschriftung>. Mögliche <Kind>-Wörter: Nachricht, Zeit, Eskalation, Bedingung, Link, Fehler, Signal, Terminierung. Details und Einschränkungen (z. B. Terminierung nur als Endereignis, Link nur als Zwischenereignis) stehen in Elementkatalog.md und Modellierregeln.md.

S1 Start Nachricht: Antrag geht ein
S9 Zwischenereignis Zeit: 14 Tage Frist abwarten
S17 Ende Terminierung: Verfahren beendet

Ein Zwischenereignis ist standardmäßig empfangend (Catch); mit einem zusätzlichen dritten Wort sendend wird daraus ein auslösendes (Throw-) Ereignis, z. B. S2 Zwischenereignis Nachricht sendend: Status melden.

Geschlossene Pools und Nachrichtenflüsse

Externe Beteiligte (Bürger, andere Behörden, …), mit denen nur Nachrichten ausgetauscht werden, vor dem ersten Schritt deklarieren:

Extern: Bürger
Extern: Landratsamt

Unter einem Schritt erzeugt ~> <Name> einen ausgehenden, <~ <Name> einen eingehenden Nachrichtenfluss zu einem so deklarierten Beteiligten:

S8 Sendeaufgabe: Bescheid versenden
  ~> Bürger
  -> S9

Nachrichtenflüsse sind nur zwischen Pools erlaubt (siehe Modellierregeln.md) – das Ziel muss immer ein per Extern: deklarierter Name sein, nie eine Schritt-ID im selben Pool.

Verzweigungen / Sprünge

Unter einem Schritt können beliebig viele Pfeil-Zeilen stehen:

S3 Gateway XOR: Antrag vollständig?
  Ja -> S4
  Nein -> S3a
  • <Bezeichnung> -> <Ziel-ID> – beschriftete Kante (z. B. für Ja/Nein-Zweige)
  • -> <Ziel-ID> – unbeschriftete Kante (z. B. für parallele AND-Zweige oder einfache Weiterleitung)

Wichtig: Wenn ein Schritt keine Pfeil-Zeile hat, wird automatisch eine Kante zum nächsten Schritt in der Datei erzeugt. Ihr müsst also nur dort explizite Pfeile setzen, wo der Ablauf von der reinen Lesereihenfolge abweicht (Verzweigung, Sprung zurück, Zusammenführung).

Rücksprünge (Schleifen, z. B. „Nachforderung" zurück zur Prüfung) werden automatisch erkannt und an allen Elementen vorbei zurückgeführt: mit Lanes über einen Kanal am Boden des eigenen Pools, ohne Lanes seitlich am Diagramm.

Verantwortliche / Swimlanes

Schreibt ihr am Anfang der Beschriftung eines Schritts einen kurzen Namen gefolgt von einem Doppelpunkt, wird dieser als Verantwortlicher erkannt und daraus automatisch eine Swimlane gemacht:

V1 Task: Flurneuordnung: Gewannenkonzept festlegen
O3 Task: ÖbVI: Waldgrenzen verhandeln
O9 Task: LRA: Aufmessung im Ortstermin

Aus den drei unterschiedlichen Verantwortlichen entstehen drei Lanes in einem Pool; Schritte ohne Verantwortlichen-Angabe landen gesammelt in einer Lane „Nicht zugeordnet". Ohne jede Verantwortlichen-Angabe entsteht wie bisher ein Diagramm ohne Lanes.

Das ist eine Heuristik: Ein Doppelpunkt weit vorn in einer kurzen Beschriftung (max. 30 Zeichen, max. 4 Wörter, kein „?") wird als Verantwortlicher gedeutet. Enthält eine Beschriftung an dieser Stelle zufällig einen Doppelpunkt, der keine Zuständigkeit meint, entsprechend umformulieren.

Vollständige Beispiele

In beispiele/ neben dieser Datei, reine Syntaxbeispiele (fachlich nicht geprüft):

  • Ohne Lanes: beispiele/beispiel_prozess.md / beispiele/beispiel_prozess.bpmn
  • Mit Lanes und externem Beteiligten: beispiele/beispiel_lanes.md / beispiele/beispiel_lanes.bpmn

Referenzmodell (Test) – ein echter, größerer Prozess, gegen den Änderungen am Konverter geprüft werden (Byte-Vergleich plus Strukturtests in tests/test_referenzmodelle.py; die Prüfung „keine Kante durch ein Element“ läuft auch über die Syntaxbeispiele):

  • beispiele/referenz_gewannenfestlegung.md / .bpmn – 4 Lanes, externer Pool, 14 Gateways, verschachtelte Varianten; fachlich nicht abgenommen

Ein Test hält die .bpmn der Beispiele aktuell; nach einer Änderung am Konverter python scripts/pruefe_prozesse.py --erzeugen ausführen.

Einschränkungen der aktuellen Version

  • Es wird pro .md-Datei ein Diagramm (ein Prozess) erzeugt, keine mehrstufigen Prozessnetze mit verknüpften Teilprozess-Diagrammen.
  • Teilprozess (geschlossener Teilprozess) und Aufruf (Aufruf-Element) werden als Bausteine angelegt, aber ohne Inhalt bzw. ohne Verknüpfung zu einem Ziel-Prozess – Details bzw. Verknüpfung lassen sich in PICTURE nach dem Import nachtragen. Der aufgeklappte Teilprozess (Inhalt inline im selben Diagramm) wird noch nicht unterstützt.
  • Wiederholungs-Marker (Schleife, Multi-Instanz sequenziell/parallel) werden noch nicht unterstützt; bei Bedarf als Hinweis an der betroffenen Aktivität dokumentieren.
  • Assoziationen (gepunktete Linien) von Datenobjekten/-speichern zu Aktivitäten werden nicht automatisch gezeichnet; Datenobjekt/-speicher landen unverbunden im Diagramm und werden nach dem Import in PICTURE bei Bedarf manuell mit den betroffenen Aktivitäten verbunden.
  • Das automatische Layout ist ein einfacher Schichten-Algorithmus (ähnlich den meisten BPMN-Auto-Layouts) – bei komplexen Prozessen lohnt sich nach dem Import ein manuelles Nachjustieren einzelner Boxen und Beschriftungen. Das gilt besonders für geschlossene Pools (externe Beteiligte): Sie werden schlicht unterhalb des Hauptpools gestapelt.
  • Jede Kante bekommt in der erzeugten .bpmn-Datei einen eigenen Anschlusspunkt (Modellierregel 4, in Modellierregeln.md) statt eines gemeinsamen Mittelpunkts. Bei Task/Ereignis/Datenobjekt usw. werden dazu mehrere Punkte über die tatsächliche Kontur verteilt (Rechteckkante bzw. Kreisbogen). Ein Gateway bekommt dagegen nur einen der vier festen PICTURE-Eckpunkte (0°/90°/180°/270°) je Kante, nie einen Punkt dazwischen auf der Rautenkante – mehr als vier Kanten an einem Gateway (eingehend plus ausgehend) können sich damit nicht mehr eindeutig darstellen lassen, siehe Modellierregel 4. Wirkt das Ergebnis in einem Anzeige-Werkzeug trotzdem so, als würden Verzweigungen an einem Punkt zusammenlaufen, zuerst in einem originalgetreuen BPMN-Viewer (z. B. demo.bpmn.io, siehe unten) prüfen: Ein Viewer, der importierte Anschlusspunkte respektiert statt sie neu zu berechnen, zeigt die verteilten Punkte korrekt an.
  • Der BPMN-Import in PICTURE übernimmt die reine Ablaufstruktur zuverlässig; PICTURE-/FIM-spezifische Zusatzfelder (Fallzahl, Bearbeitungszeit, RACI usw.) sind kein Teil des BPMN-Standards und müssten nach dem Import ergänzt werden.