Zum Inhalt springen

Vier Augen ab Schwellenwert

Jede Eingangsrechnung gibt zuerst die Kostenstellenverantwortung frei. Liegt der Bruttobetrag über 5.000 €, folgt eine zweite Freigabe durch die Geschäftsführung, und zwar durch eine andere Person. Das Skript weist schon bei der ersten Freigabe darauf hin.

Der Workflow startet für jedes Dokument vom Typ incoming-invoice. Seine Datei workflow.yaml:

$schema: 'https://docs.acriva.de/schemas/workflow.schema.json'
format: 1
schemaVersion: 4
sdk: '1.0.0'
key: four-eyes-threshold
name: Vier Augen ab Schwellenwert
template: custom
trigger:
documentType: incoming-invoice
fields: []
start: announce
steps:
- kind: script
name: announce
label: Zweite Freigabe ankündigen
script: announce.ts
hook: beforeApproval
inputs:
- kind: field
key: totalGross
type: money
returns: []
exits: []
next: firstApproval
- kind: humanTask
name: firstApproval
label: Freigabe Kostenstelle
taskKind: approve
assignees:
- when: null
assignee:
kind: costCenterResponsible
fallback:
kind: role
role: Buchhaltung
options:
excludeRequester: true
excludeActorsOfSteps: []
pickFile: false
next: overThreshold
onRejected: rejected
- kind: condition
name: overThreshold
label: Über 5.000 €?
branches:
- when:
kind: compare
field: totalGross
operator: greaterThan
constants:
- '5000'
next: secondApproval
default: approved
- kind: humanTask
name: secondApproval
label: Zweite Freigabe Geschäftsführung
taskKind: approve
assignees:
- when: null
assignee:
kind: role
role: Geschäftsführung
fallback:
kind: role
role: owner
options:
excludeRequester: true
excludeActorsOfSteps:
- firstApproval
pickFile: false
next: approved
onRejected: rejected
- kind: end
name: approved
label: Freigegeben
outcome: approved
- kind: end
name: rejected
label: Zurückgewiesen
outcome: rejected

Hook: beforeApproval · Eingaben: totalGross · Rückgaben: keine

import { defineScript, money } from '@acriva/workflow-sdk';
/** Above this gross amount a second approval follows; the workflow's condition step "Über 5.000 €?" uses the same value. */
const THRESHOLD = 5000;
export default defineScript({
hook: 'beforeApproval',
run(ctx) {
const amount = ctx.document.fields.totalGross;
if (amount == null || amount <= THRESHOLD) return;
// Before an approval a script only reads; its one effect is a hint on the approval's task.
ctx.hint(
`Über ${money.format(THRESHOLD)}: Nach Ihrer Freigabe gibt die Geschäftsführung die Rechnung ein zweites Mal frei.`,
);
},
});

Ein Test führt jeden dieser Fälle in der Sandbox aus und vergleicht das Ergebnis.

  • Eingabe: totalGross null
  • Ausgang: der Standard-Nachfolger
  • Änderungen: keine
  • Eingabe: totalGross 12480
  • Ausgang: der Standard-Nachfolger
  • Änderungen: Hinweis an der nächsten Aufgabe: „Über 5.000,00 €: Nach Ihrer Freigabe gibt die Geschäftsführung die Rechnung ein zweites Mal frei.“
  • Eingabe: totalGross 5000
  • Ausgang: der Standard-Nachfolger
  • Änderungen: keine