Nach Lieferant weiterleiten
Rechnungen von IT-Lieferanten wie Telekom oder Dell gibt die IT frei, alle anderen die Kostenstellenverantwortung. Die Liste der IT-Lieferanten steht im Skript, und die Freigabe der IT bekommt einen Hinweis, warum sie sie bekommt.
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: route-by-vendorname: Nach Lieferant weiterleitentemplate: customtrigger: documentType: incoming-invoicefields: []start: routesteps: - kind: script name: route label: Nach Lieferant weiterleiten script: route.ts hook: onDocumentArrived inputs: - kind: field key: vendorName type: text returns: - key: lane type: enumeration values: - it - standard branch: lane exits: - value: it next: itApproval - value: standard next: costCenter next: costCenter - kind: humanTask name: itApproval label: Freigabe IT taskKind: approve assignees: - when: null assignee: kind: role role: IT fallback: kind: role role: Buchhaltung 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: rejectedDas Skript route.ts
Abschnitt betitelt „Das Skript route.ts“Hook: onDocumentArrived · Eingaben: vendorName · Rückgaben: lane (it, standard)
import { defineScript } from '@acriva/workflow-sdk';
/** The vendors of hardware, software and telephony; a vendor matches when its name starts with an entry, in any case. */const IT_VENDORS: readonly string[] = ['Telekom', 'Dell', 'Microsoft', 'DATEV', 'Vodafone'];
export default defineScript({ hook: 'onDocumentArrived', outputs: { lane: ['it', 'standard'] }, run(ctx) { const vendor = ctx.document.fields.vendorName; // Without a vendor the step goes on to its default next step, the cost center's approval. if (vendor == null) return; const name = vendor.toLowerCase(); const itVendor = IT_VENDORS.find((entry) => name.startsWith(entry.toLowerCase())); if (itVendor) { ctx.hint(`IT-Lieferant „${vendor}“: Die IT gibt frei.`); return ctx.branch('it'); } return ctx.branch('standard'); },});Was es tut
Abschnitt betitelt „Was es tut“Ein Test führt jeden dieser Fälle in der Sandbox aus und vergleicht das Ergebnis.
Ein IT-Lieferant
Abschnitt betitelt „Ein IT-Lieferant“- Eingabe:
vendorNameDell Technologies GmbH - Ausgang:
it - Änderungen: Hinweis an der nächsten Aufgabe: „IT-Lieferant „Dell Technologies GmbH“: Die IT gibt frei.“
Eine Rechnung ohne Lieferanten
Abschnitt betitelt „Eine Rechnung ohne Lieferanten“- Eingabe:
vendorNamenull - Ausgang: der Standard-Nachfolger
- Änderungen: keine
Ein anderer Lieferant
Abschnitt betitelt „Ein anderer Lieferant“- Eingabe:
vendorNameBürobedarf Schmidt KG - Ausgang:
standard - Änderungen: keine