Zum Inhalt springen

In Akte nach Feld ablegen

Nach der Freigabe legt das Skript eine Eingangsrechnung in die Akte ihres Lieferanten, die es über die Lieferantennummer findet. Fehlt die Nummer, benachrichtigt es die Buchhaltung, damit sie die Rechnung von Hand ablegt. Das Feld Lieferantennummer legt der Workflow selbst an. Ohne Skript geht es mit einer Karte: In die Lieferantenakte ablegen findet die Akte über ein eindeutiges Schlüsselfeld und legt eine fehlende an.

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: file-by-field
name: In Akte nach Feld ablegen
template: custom
trigger:
documentType: incoming-invoice
fields:
- key: vendorNumber
kind: text
labelDe: Lieferantennummer
labelEn: Vendor number
documentTypes:
- incoming-invoice
start: approve
steps:
- kind: humanTask
name: approve
label: Freigabe
taskKind: approve
assignees:
- when: null
assignee:
kind: costCenterResponsible
fallback:
kind: role
role: Buchhaltung
options:
excludeRequester: true
excludeActorsOfSteps: []
pickFile: false
next: file
onRejected: rejected
- kind: script
name: file
label: In die Lieferantenakte ablegen
script: file.ts
hook: onApproved
inputs:
- kind: field
key: vendorNumber
type: text
- kind: field
key: invoiceNumber
type: text
returns: []
exits: []
next: approved
- kind: end
name: approved
label: Freigegeben
outcome: approved
- kind: end
name: rejected
label: Zurückgewiesen
outcome: rejected

Hook: onApproved · Eingaben: vendorNumber, invoiceNumber · Rückgaben: keine

import { defineScript } from '@acriva/workflow-sdk';
export default defineScript({
hook: 'onApproved',
run(ctx) {
const { vendorNumber, invoiceNumber } = ctx.document.fields;
const number = vendorNumber?.trim();
if (!number) {
ctx.notify({
to: [{ role: 'Buchhaltung' }],
text: `Die freigegebene Rechnung ${invoiceNumber ?? 'ohne Nummer'} hat keine Lieferantennummer. Bitte legen Sie sie von Hand in die Akte des Lieferanten.`,
});
return;
}
// Already in the vendor's Akte, for example filed by hand: nothing to do.
if (ctx.document.files.some((file) => file.type === 'vendor' && file.number === number)) return;
ctx.fileInto({ type: 'vendor', number });
},
});

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

  • Eingabe: vendorNumber 70012, invoiceNumber RE-2026-1034, Ergebnis der letzten Aufgabe Approved
  • Ausgang: der Standard-Nachfolger
  • Änderungen: keine
  • Eingabe: vendorNumber null, invoiceNumber RE-2026-1035, Ergebnis der letzten Aufgabe Approved
  • Ausgang: der Standard-Nachfolger
  • Änderungen: Benachrichtigung an die Rolle Buchhaltung: „Die freigegebene Rechnung RE-2026-1035 hat keine Lieferantennummer. Bitte legen Sie sie von Hand in die Akte des Lieferanten.“
  • Eingabe: vendorNumber 70012, invoiceNumber RE-2026-1033, Ergebnis der letzten Aufgabe Approved
  • Ausgang: der Standard-Nachfolger
  • Änderungen: Ablage in die Akte vendor 70012