Files
Workflow/tasks/decision_table.md
T

55 lines
2.5 KiB
Markdown
Raw Normal View History

# `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**
```xml
<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`).