Zum Inhalt springen

Nach Betrag weiterleiten

Eine Eingangsrechnung über 500 € gibt die Geschäftsführung frei, eine bis 500 € die Kostenstellenverantwortung. Die Freigabe der Geschäftsführung bekommt einen Hinweis, warum sie sie bekommt.

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: route-by-amount
name: Nach Betrag weiterleiten
template: custom
trigger:
documentType: incoming-invoice
fields: []
start: route
steps:
- kind: script
name: route
label: Nach Betrag weiterleiten
script: route.ts
hook: onDocumentArrived
inputs:
- kind: field
key: totalGross
type: money
returns:
- key: lane
type: enumeration
values:
- management
- costCenter
branch: lane
exits:
- value: management
next: management
- value: costCenter
next: costCenter
next: costCenter
- kind: humanTask
name: management
label: Freigabe Geschäftsführung
taskKind: approve
assignees: []
fallback:
kind: role
role: owner
options:
excludeRequester: true
excludeActorsOfSteps: []
pickFile: false
next: approved
onRejected: rejected
- kind: humanTask
name: costCenter
label: Freigabe Kostenstelle
taskKind: approve
assignees:
- when: null
assignee:
kind: costCenterResponsible
fallback:
kind: role
role: Buchhaltung
options:
excludeRequester: true
excludeActorsOfSteps: []
pickFile: false
next: approved
onRejected: rejected
- kind: end
name: approved
label: Freigegeben
outcome: approved
- kind: end
name: rejected
label: Zurückgewiesen
outcome: rejected

Hook: onDocumentArrived · Eingaben: totalGross · Rückgaben: lane (management, costCenter)

import { defineScript, money } from '@acriva/workflow-sdk';
/** Above this gross amount, the management approves. */
const THRESHOLD = 500;
export default defineScript({
hook: 'onDocumentArrived',
outputs: { lane: ['management', 'costCenter'] },
run(ctx) {
const amount = ctx.document.fields.totalGross;
// Without an amount the step goes on to its default next step, the cost center's approval.
if (amount == null) return;
ctx.log('Gross total', money.format(amount));
if (amount > THRESHOLD) {
ctx.hint(`Über ${money.format(THRESHOLD)}: Die Geschäftsführung gibt frei.`);
return ctx.branch('management');
}
return ctx.branch('costCenter');
},
});

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 1249.5
  • Ausgang: management
  • Änderungen: Hinweis an der nächsten Aufgabe: „Über 500,00 €: Die Geschäftsführung gibt frei.“
  • Eingabe: totalGross 500
  • Ausgang: costCenter
  • Änderungen: keine