Zum Inhalt springen

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 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: normalize-vendor-names
name: Lieferantennamen vereinheitlichen
template: custom
trigger:
documentType: incoming-invoice
fields:
- key: vendorShortName
kind: text
labelDe: Lieferant (einheitlich)
labelEn: Vendor (normalized)
documentTypes:
- incoming-invoice
start: normalize
steps:
- 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: rejected

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);
},
});

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

  • Eingabe: vendorName TELEKOM 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: vendorName Bürobedarf Schmidt GmbH & Co. KG
  • Ausgang: der Standard-Nachfolger
  • Änderungen: Feld vendorShortName = Bürobedarf Schmidt
  • Eingabe: vendorName null
  • Ausgang: der Standard-Nachfolger
  • Änderungen: keine