Files
Workflow/tasks/decision_table.md

2.5 KiB

decision_table — Entscheidungstabelle (DMN-light)

Zweck: Ersetzt verschachtelte if-Kaskaden durch eine mehrspaltige Entscheidungstabelle. Mehrere Eingabewerte werden Zeile für Zeile gegen Regeln geprüft; die erste (hit_policy=first) bzw. alle (hit_policy=all) passenden Regeln setzen ihre <set>-Variablen. Passt keine Regel, greift optional der <default>-Zweig.

Parameter

Name Pflicht? Default Beschreibung
hit_policy nein first first = erste passende Regel gewinnt; all = alle passenden Regeln, letzte gewinnt bei gleichnamigen Variablen
inputs/in (var) ja Eingabespalten in Reihenfolge; var ist der Kontext-Variablenname. Reihenfolge = Reihenfolge der <when> je Regel
rules/rule ja Regelzeilen; jede muss genau so viele <when> haben wie es <in>-Spalten gibt
when (op) op=eq Vergleich je Spalte; siehe Operatoren unten
set (name) Zu setzende Kontextvariable der Treffer-Regel
default/set nein Greift, wenn keine Regel passt

Operatoren (op): eq, ne (Gleichheit, numerisch wenn beide Seiten numerisch, sonst String case-insensitiv), gt, gte, lt, lte (numerisch), contains (Teilstring, case-insensitiv), regex (PCRE ohne Delimiter), empty/notempty (Wert leer/nicht leer), any (passt immer, Platzhalter-Spalte).

Eingangswerte: Die unter <in var="…"/> genannten Kontextvariablen; Platzhalter in <when>- und <set>-Werten.

Ausgangswerte:

  • alle <set>-Variablen der Treffer-Regel(n)
  • <task_id>_matched — Anzahl passender Regeln (0 = Default griff bzw. nichts)

XML-Beispiel

<task type="decision_table" id="freigabe_regel">
  <config>
    <hit_policy>first</hit_policy>
    <inputs>
      <in var="summe"/>
      <in var="tg"/>
    </inputs>
    <rules>
      <rule>
        <when op="gt">5000</when>
        <when op="eq">TG1</when>
        <set name="freigeber">geschaeftsfuehrer</set>
        <set name="stufe">2</set>
      </rule>
      <rule>
        <when op="lte">5000</when>
        <when op="any"/>
        <set name="freigeber">sachgebietsleiter</set>
      </rule>
    </rules>
    <default>
      <set name="freigeber">registratur</set>
    </default>
  </config>
</task>

Hinweis: Jede Regel muss exakt so viele <when>-Spalten haben wie <inputs> definiert; sonst endet der Task mit Fehler. Numerische Vergleiche akzeptieren Dezimalkomma (1234,56).