Kostenstellen-Zuordnung aus einer Datentabelle
Wie Kostenstelle vom Lieferanten, nur steht die Zuordnung nicht im Skript, sondern in einer Datentabelle kostenstellenZuordnung: eine Zeile je Zuordnung mit Lieferant, Kostenstelle und Sachkonto, die die Buchhaltung ohne neue Version des Workflows ändert oder aus Excel hochlädt. Das Skript fragt alle Zeilen des Lieferanten ab. Bei genau einer setzt es Kostenstelle und Sachkonto, zwei Felder, die der Workflow selbst deklariert; bei keiner oder mehreren bekommt die Freigabe einen Hinweis, damit die Rechnung von Hand kontiert oder aufgeteilt wird. Der Lieferant muss so in der Tabelle stehen, wie er auf der Rechnung erkannt wird. Steht in der Tabelle eine Zeile je Lieferant, setzt eine Karte die Kontierung der Rechnung ohne Skript: Kontierung aus einer Datentabelle.
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: cost-center-mappingname: Kostenstellen-Zuordnung aus einer Datentabelletemplate: customtrigger: documentType: incoming-invoicefields: - key: costCenter kind: text labelDe: Kostenstelle labelEn: Cost center documentTypes: - incoming-invoice - key: glAccount kind: text labelDe: Sachkonto labelEn: G/L account documentTypes: - incoming-invoicestart: allocatesteps: - kind: script name: allocate label: Kostenstelle zuordnen script: allocate.ts hook: onDocumentArrived inputs: - kind: field key: vendorName type: text - kind: table key: kostenstellenZuordnung returns: [] exits: [] next: approve - 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: approved onRejected: rejected - kind: end name: approved label: Freigegeben outcome: approved - kind: end name: rejected label: Zurückgewiesen outcome: rejectedDas Skript allocate.ts
Abschnitt betitelt „Das Skript allocate.ts“Hook: onDocumentArrived · Eingaben: vendorName, Datentabelle kostenstellenZuordnung · Rückgaben: keine
import { defineScript } from '@acriva/workflow-sdk';
export default defineScript({ hook: 'onDocumentArrived', async run(ctx) { const vendor = ctx.document.fields.vendorName; if (vendor == null) return; // Every row of the vendor: a vendor may be mapped to more than one cost center. const [mapping, ...others] = await ctx.tables.query('kostenstellenZuordnung', { lieferant: vendor, }); if (mapping === undefined) { ctx.hint( `Für „${vendor}“ gibt es keine Kostenstellen-Zuordnung. Bitte kontieren Sie die Rechnung von Hand.`, ); return; } if (others.length > 0) { const costCenters = [mapping, ...others].map((row) => row.kostenstelle).join(', '); ctx.hint( `„${vendor}“ ist mehreren Kostenstellen zugeordnet (${costCenters}). Bitte teilen Sie die Rechnung von Hand auf.`, ); return; } if (mapping.kostenstelle) ctx.setField('costCenter', mapping.kostenstelle); if (mapping.sachkonto) ctx.setField('glAccount', mapping.sachkonto); },});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 Lieferant ohne Zuordnung
Abschnitt betitelt „Ein Lieferant ohne Zuordnung“- Eingabe:
vendorNameNeue Firma AG - Datentabelle
kostenstellenZuordnung: 3 ZeilennummerZ-001,lieferantTelekom Deutschland GmbH,kostenstelle4400,sachkonto4920nummerZ-002,lieferantDeutsche Bahn AG,kostenstelle4300,sachkonto4663nummerZ-003,lieferantDeutsche Bahn AG,kostenstelle4100,sachkonto4663
- Ausgang: der Standard-Nachfolger
- Änderungen: Hinweis an der nächsten Aufgabe: „Für „Neue Firma AG“ gibt es keine Kostenstellen-Zuordnung. Bitte kontieren Sie die Rechnung von Hand.“
Ein Lieferant mit einer Zuordnung
Abschnitt betitelt „Ein Lieferant mit einer Zuordnung“- Eingabe:
vendorNameTelekom Deutschland GmbH - Datentabelle
kostenstellenZuordnung: 3 ZeilennummerZ-001,lieferantTelekom Deutschland GmbH,kostenstelle4400,sachkonto4920nummerZ-002,lieferantDeutsche Bahn AG,kostenstelle4300,sachkonto4663nummerZ-003,lieferantDeutsche Bahn AG,kostenstelle4100,sachkonto4663
- Ausgang: der Standard-Nachfolger
- Änderungen: Feld
costCenter=4400; FeldglAccount=4920
Ein Lieferant mit mehreren Zuordnungen
Abschnitt betitelt „Ein Lieferant mit mehreren Zuordnungen“- Eingabe:
vendorNameDeutsche Bahn AG - Datentabelle
kostenstellenZuordnung: 3 ZeilennummerZ-001,lieferantTelekom Deutschland GmbH,kostenstelle4400,sachkonto4920nummerZ-002,lieferantDeutsche Bahn AG,kostenstelle4300,sachkonto4663nummerZ-003,lieferantDeutsche Bahn AG,kostenstelle4100,sachkonto4663
- Ausgang: der Standard-Nachfolger
- Änderungen: Hinweis an der nächsten Aufgabe: „„Deutsche Bahn AG“ ist mehreren Kostenstellen zugeordnet (4300, 4100). Bitte teilen Sie die Rechnung von Hand auf.“