Skonto-Erinnerung
Einen Tag nach der Freigabe einer Eingangsrechnung prüft das Skript, ob das Skonto noch gilt. Solange die Frist läuft, erinnert es die Buchhaltung mit dem letzten Zahltag und dem Betrag, den Sie sparen, und versieht die Rechnung mit dem Schlagwort „Skonto“. Skontofrist und Skontosatz sind Felder, die der Workflow selbst anlegt. Ohne Skript geht es mit einer Karte: Skontofrist überwachen liest die Skontobedingungen und gibt das Skontodatum der Freigabe als Frist.
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: skonto-remindername: Skonto-Erinnerungtemplate: customtrigger: documentType: incoming-invoicefields: - key: discountDays kind: number labelDe: Skontofrist (Tage) labelEn: Discount period (days) documentTypes: - incoming-invoice - key: discountPercent kind: number labelDe: Skonto (%) labelEn: Discount (%) documentTypes: - incoming-invoicestart: approvesteps: - 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: wait onRejected: rejected - kind: timer name: wait label: Einen Tag warten days: 1 daysBefore: 0 next: remind - kind: script name: remind label: An Skonto erinnern script: remind.ts hook: onTimer inputs: - kind: field key: invoiceNumber type: text - kind: field key: invoiceDate type: date - kind: field key: totalGross type: money - kind: field key: discountDays type: number - kind: field key: discountPercent type: number returns: [] exits: [] next: approved - kind: end name: approved label: Freigegeben outcome: approved - kind: end name: rejected label: Zurückgewiesen outcome: rejectedDas Skript remind.ts
Abschnitt betitelt „Das Skript remind.ts“Hook: onTimer · Eingaben: invoiceNumber, invoiceDate, totalGross, discountDays, discountPercent · Rückgaben: keine
import { date, defineScript, money } from '@acriva/workflow-sdk';
export default defineScript({ hook: 'onTimer', run(ctx) { const { invoiceNumber, invoiceDate, totalGross, discountDays, discountPercent } = ctx.document.fields; // Without the invoice date, the discount period or the discount there is nothing to remind of. if (invoiceDate == null || discountDays == null || discountPercent == null) return;
// The discount applies up to and including the last day of its period, counted in whole days. const deadline = date.addDays(invoiceDate, Math.trunc(discountDays)); if (ctx.today() > deadline) { ctx.log('Discount expired on', date.format(deadline)); return; }
const percent = String(discountPercent).replace('.', ','); const saving = totalGross == null ? '' : ` Das sind ${money.format(money.round((totalGross * discountPercent) / 100))}.`; ctx.notify({ to: [{ role: 'Buchhaltung' }], text: `Die Rechnung ${invoiceNumber ?? 'ohne Nummer'} ist freigegeben. ` + `Bei Zahlung bis ${date.format(deadline)} ziehen Sie ${percent} % Skonto ab.${saving}`, }); ctx.addTag('Skonto'); },});Was es tut
Abschnitt betitelt „Was es tut“Ein Test führt jeden dieser Fälle in der Sandbox aus und vergleicht das Ergebnis.
Das Skonto gilt noch
Abschnitt betitelt „Das Skonto gilt noch“- Eingabe:
invoiceNumberRE-2026-0815,invoiceDate2026-10-15,totalGross1190,discountDays14,discountPercent2, Ergebnis der letzten AufgabeApproved, heute2026-10-22 - Ausgang: der Standard-Nachfolger
- Änderungen: Benachrichtigung an die Rolle
Buchhaltung: „Die Rechnung RE-2026-0815 ist freigegeben. Bei Zahlung bis 29.10.2026 ziehen Sie 2 % Skonto ab. Das sind 23,80 €.“; Schlagwort „Skonto“
Die Skontofrist ist abgelaufen
Abschnitt betitelt „Die Skontofrist ist abgelaufen“- Eingabe:
invoiceNumberRE-2026-0702,invoiceDate2026-10-01,totalGross499.8,discountDays10,discountPercent3, Ergebnis der letzten AufgabeApproved, heute2026-10-22 - Ausgang: der Standard-Nachfolger
- Änderungen: keine
Eine Rechnung ohne Skonto
Abschnitt betitelt „Eine Rechnung ohne Skonto“- Eingabe:
invoiceNumberRE-2026-0911,invoiceDate2026-10-20,totalGross250,discountDaysnull,discountPercentnull, Ergebnis der letzten AufgabeApproved - Ausgang: der Standard-Nachfolger
- Änderungen: keine