Files

26 lines
1.5 KiB
Markdown
Raw Permalink Normal View History

# `calc` — Berechnung
**Zweck:** Wertet einen oder mehrere arithmetische bzw. logische Ausdrücke aus und schreibt die Ergebnisse als Kontextvariablen — über einen sicheren eigenen Parser (kein `eval`).
**Parameter**
| Name | Pflicht? | Default | Beschreibung |
|---|---|---|---|
| `<var name="…" expr="…"/>` | ja (min. 1) | — | Wiederholbar. `name` = Ziel-Kontextvariable, `expr` = Ausdruck (Fallback: Element-Text statt `expr`-Attribut). |
Unterstützte Operatoren: `+ - * / %`, `== != < > <= >=`, `and`/`or`/`not` (XML-freundliche Alternative zu `&&`/`||`/`!`). Funktionen: `round(x, stellen)`, `ceil`, `floor`, `abs`, `min`, `max`, `len`, `upper`, `lower`, `concat(...)`, `ifelse(bedingung, dann, sonst)`. `true`/`false` werden zu `1`/`0`. Dezimalkomma (`1,50`) wird toleriert.
**Eingangswerte:** Beliebige Kontextvariablen via `{{platzhalter}}` — sie werden vor dem Parsen aufgelöst.
**Ausgangswerte:** Jede `<var>` wird unter ihrem `name` in den Kontext geschrieben. Vorherige `<var>`-Zeilen sind in nachfolgenden sofort verfügbar. Bei Auswertungsfehler bricht der Task mit `error` ab.
```xml
<task type="calc" id="berechne">
<var name="brutto" expr="{{netto}} * 1.19" />
<var name="rabatt" expr="round({{brutto}} * {{rabatt_pct}} / 100, 2)" />
<var name="endsumme" expr="{{brutto}} - {{rabatt}}" />
<var name="grosskunde" expr="{{endsumme}} > 10000" />
<var name="info" expr="concat('Endsumme: ', {{endsumme}}, ' EUR')" />
</task>
```