146adc970a
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
55 lines
2.5 KiB
Markdown
55 lines
2.5 KiB
Markdown
# `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`).
|