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
Abschnitt betitelt „Der Workflow“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: 1schemaVersion: 4sdk: '1.0.0'key: four-eyes-thresholdname: Vier Augen ab Schwellenwerttemplate: customtrigger: documentType: incoming-invoicefields: []start: announcesteps: - 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: rejectedDas Skript announce.ts
Abschnitt betitelt „Das Skript announce.ts“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.`, ); },});Was es tut
Abschnitt betitelt „Was es tut“Ein Test führt jeden dieser Fälle in der Sandbox aus und vergleicht das Ergebnis.
Eine Rechnung ohne Bruttobetrag
Abschnitt betitelt „Eine Rechnung ohne Bruttobetrag“- Eingabe:
totalGrossnull - Ausgang: der Standard-Nachfolger
- Änderungen: keine
Eine Rechnung über 5.000 €
Abschnitt betitelt „Eine Rechnung über 5.000 €“- Eingabe:
totalGross12480 - 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.“
Eine Rechnung über genau 5.000 €
Abschnitt betitelt „Eine Rechnung über genau 5.000 €“- Eingabe:
totalGross5000 - Ausgang: der Standard-Nachfolger
- Änderungen: keine