Lieferantennamen vereinheitlichen
Derselbe Lieferant steht auf Rechnungen oft verschieden da: mal als „TELEKOM DEUTSCHLAND GMBH“, mal als „Telekom Deutschland GmbH“. Das Skript schreibt den Namen ohne Rechtsform, ohne doppelte Leerzeichen und ohne durchgehende Großbuchstaben in ein eigenes Feld, nach dem Sie suchen und sortieren können. Den erkannten Lieferanten selbst ändert es nicht.
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: normalize-vendor-namesname: Lieferantennamen vereinheitlichentemplate: customtrigger: documentType: incoming-invoicefields: - key: vendorShortName kind: text labelDe: Lieferant (einheitlich) labelEn: Vendor (normalized) documentTypes: - incoming-invoicestart: normalizesteps: - kind: script name: normalize label: Lieferantennamen vereinheitlichen script: normalize.ts hook: onDocumentArrived inputs: - kind: field key: vendorName type: text 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 normalize.ts
Abschnitt betitelt „Das Skript normalize.ts“Hook: onDocumentArrived · Eingaben: vendorName · Rückgaben: keine
import { defineScript } from '@acriva/workflow-sdk';
/** * A legal form at the end of a name, after a space or a comma: the combined forms (GmbH & Co. KG) come before their * parts, so the whole form goes. */const LEGAL_FORM = /[\s,]+(?:(?:gmbh|ag|se|ug)\s*&\s*co\.?\s*(?:kgaa|kg|ohg)|ug\s*\(haftungsbeschränkt\)|ggmbh|gmbh|mbh|kgaa|ag|se|kg|ohg|gbr|ug|e\.\s?k\.|e\.\s?v\.|ltd\.?|inc\.?)\.?$/i;
/** "TELEKOM DEUTSCHLAND" becomes "Telekom Deutschland"; a name in mixed case keeps its spelling (such as "IBM Deutschland"). */const capitalize = (name: string) => name === name.toUpperCase() ? name .toLowerCase() .split(' ') .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) .join(' ') : name;
export default defineScript({ hook: 'onDocumentArrived', run(ctx) { const vendor = ctx.document.fields.vendorName; if (vendor == null) return; // One space between words, then without the legal form, then in one way of writing. const spaced = vendor.replace(/\s+/g, ' ').trim(); const withoutForm = spaced.replace(LEGAL_FORM, '').trim(); const normalized = capitalize(withoutForm === '' ? spaced : withoutForm); ctx.log(`"${vendor}" becomes "${normalized}"`); // The standard field vendorName is Finance's: the script writes the declared field next to it. ctx.setField('vendorShortName', normalized); },});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 Name in Großbuchstaben
Abschnitt betitelt „Ein Name in Großbuchstaben“- Eingabe:
vendorNameTELEKOM DEUTSCHLAND GMBH - Ausgang: der Standard-Nachfolger
- Änderungen: Feld
vendorShortName=Telekom Deutschland
Ein Name mit GmbH & Co. KG und doppelten Leerzeichen
Abschnitt betitelt „Ein Name mit GmbH & Co. KG und doppelten Leerzeichen“- Eingabe:
vendorNameBürobedarf Schmidt GmbH & Co. KG - Ausgang: der Standard-Nachfolger
- Änderungen: Feld
vendorShortName=Bürobedarf Schmidt
Eine Rechnung ohne Lieferanten
Abschnitt betitelt „Eine Rechnung ohne Lieferanten“- Eingabe:
vendorNamenull - Ausgang: der Standard-Nachfolger
- Änderungen: keine