ooligo
n8n-flow

Anomalieerkennung bei Kosten für externe Anwälte mit n8n

Difficulty
Fortgeschritten
Setup time
90min
For
legal-ops
Legal Ops

Stack

Ein n8n-Flow, der Rechnungen externer Anwälte aus Ihrem E-Billing-System abruft, LEDES-1998B-Positionen parst, Ihre Abrechnungsrichtlinien als deterministische Regeln anwendet, Claude für einen zweiten Durchlauf bei Anomalien einsetzt, die sich Regeln widersetzen (doppelte Timekeeper, Scope-Creep, außerhalb des Engagement-Letters), und jede Rechnung in eines von vier Buckets routet — automatische Genehmigung, automatischer Abzug mit Benachrichtigung, Slack-Reviewer-Queue oder Direktor-Eskalation — wobei jede Entscheidung in ein idempotentes Audit-Log geschrieben wird. Erzielt die 5–15% der Kosten für externe Anwälte, die manuelle Zeile-für-Zeile-Prüfung übersieht, zum Preis von etwa $0,04 Claude-Inferenz pro Rechnung.

Der vollständige Workflow wird unter apps/web/public/artifacts/legal-spend-anomaly-n8n/legal-spend-anomaly-n8n.json bereitgestellt (15 Knoten, ein einziger Trigger). Setup-Hinweise und Credential-Anweisungen befinden sich in der Geschwisterdatei _README.md.

Wann verwenden

Sie haben ein stetiges Volumen an Rechnungen externer Anwälte — mindestens 50 pro Monat über mehr als drei Kanzleien — die über ein E-Billing-System fließen, das LEDES per API bereitstellt (Brightflag, Onit, BusyLamp, SimpleLegal oder ein selbst gehostetes Äquivalent). Sie haben schriftliche Abrechnungsrichtlinien und eine Rate Card pro Kanzlei, und jemand im Team führt bereits eine Zeile-für-Zeile-Prüfung durch, sodass Sie die Flags des Flows gegen deren Funde validieren können. Der Gewinn liegt darin, diesen Prüfer von „jede Zeile scannen” auf „über die markierten Positionen entscheiden” umzulenken, was typischerweise den Durchsatz pro Prüferstunde um das Drei- bis Fünffache erhöht.

Wann NICHT verwenden

Überspringen Sie diesen Flow, wenn Ihr Rechnungsvolumen unter zwanzig pro Monat liegt — der Kalibrierungsaufwand übersteigt den erzielbaren Spend. Überspringen Sie ihn, wenn Sie keine Rate Card und keine genehmigte Timekeeper-Liste pro Mandat haben; der Flow stützt sich auf diese Tabellen für die regelbasierten Prüfungen, und ohne sie erledigt der KI-Durchlauf alle Arbeit und wird Verstöße halluzinieren. Überspringen Sie ihn, wenn Ihre Kanzleien nur PDF-Rechnungen senden; dieser Flow setzt LEDES voraus, und die PDF-Extraktionsvariante ist ein anderer Workflow mit deutlich schwächerer Recall-Rate. Überspringen Sie ihn, wenn Ihre Legal-Ops-Funktion aus einer Person besteht, die alles persönlich prüft und ihrer eigenen Mustererkennung mehr vertraut, als sie einem konfigurierten Modell vertrauen würde — in diesem Fall fügt der Flow Latenz hinzu, ohne Urteilsvermögen beizusteuern.

Setup

Der Flow setzt vier unterstützende Postgres-Tabellen voraus (matters, matter_approved_timekeepers, firm_billing_guidelines, invoice_audit_log) — das README beschreibt die Spalten und Indizes, die Upserts und den Wasserzeichenvergleich günstig machen. Richten Sie diese zuerst ein, befüllen Sie sie aus Ihrem bestehenden Mandatsverwaltungssystem oder Ihren Rate-Card-Tabellen, importieren Sie dann legal-spend-anomaly-n8n.json in n8n. Verdrahten Sie die vier Platzhalter-Credentials (Brightflag/Ihr E-Billing-System, Postgres, Anthropic, Slack) gemäß dem README. Führen Sie die sechsstufige Verifizierungssequenz im README durch, bevor Sie den Cron-Trigger aktivieren; überspringen Sie nicht die Idempotenz-Prüfung, da eine doppelte Audit-Log-Zeile das nächste Wasserzeichen verfälscht.

Kalibrierung ist der Teil, den die meisten Teams unterschätzen. Ziehen Sie hundert historische Rechnungen, die Ihr Team bereits manuell geprüft hat, führen Sie sie mit deaktiviertem Cron durch den Flow und vergleichen Sie die decision des Flows mit der tatsächlichen Disposition Ihres Teams. Rechnen Sie damit, den KI-System-Prompt in Claude — Anomaly Detection und die Schwellenwerte in Score + Route mindestens zweimal nachzujustieren, bevor die Routing-Verteilung wie die Ihres Teams aussieht. Die Schwellenwerte im Bundle sind Ausgangspunkte (KI-Schweregrad >= 0,8 eskaliert, Regelwertanteil >= 15% eskaliert, KI-Flag-Anzahl > 0 routet in die Reviewer-Queue) — sie werden sich ändern, sobald Sie Ihre Verteilung sehen.

Was der Flow tut

Daily Cron — 7am Mon-Fri löst den Lauf aus. Lookup Watermark liest das jüngste checked_at aus invoice_audit_log und fällt auf sieben Tage zurück, wenn die Tabelle leer ist, sodass erneute Läufe nach einem Ausfall nicht doppelt verarbeiten. Brightflag — List New Invoices fragt das E-Billing-System nach Rechnungen ab, die seit dem Wasserzeichen eingereicht wurden; Split Invoices verteilt eine Ausführung pro Rechnung. Fetch LEDES File lädt den LEDES-1998B-Blob herunter und Parse LEDES (ein Code-Knoten) teilt ihn in strukturierte Positionen auf — Timekeeper-ID, Klassifikation, Rate, Einheiten, Task-Code, Activity-Code, Narrative, Positionssumme. Load Matter + Rate Card holt das Mandat, die genehmigte Timekeeper-Liste mit Ratencaps und die Abrechnungsrichtlinien der Kanzlei in einem einzigen Round-Trip.

Rule-Based Checks ist ein deterministischer Durchlauf: Er markiert nicht genehmigte Timekeeper, Raten über der Card, Block-Billing (Einheiten über dem Schwellenwert der Kanzlei mit kurzer Narrative), vage Beschreibungen, die der Keyword-Liste der Kanzlei entsprechen, und Partner-klassifizierte Reisezeit, wenn die No-Travel-Class-Regel der Kanzlei gilt. Jedes Flag trägt einen Schweregrad (0–1) und einen geschätzten Dollareinfluss, aufsummiert zu rule_value_cents. Claude — Anomaly Detection macht dann einen einzigen Anthropic-API-Aufruf gegen claude-sonnet-4-6 mit den Positionen, dem Mandatsumfang und den Kanzleirichtlinien als Kontext und gibt ein JSON-Array von Befunden zurück, die Regeln nicht leicht ausdrücken können — doppelte Timekeeper bei derselben Aufgabe am selben Tag, Zeit unverhältnismäßig zum Umfang, Scope-Creep-Narrative, Arbeit außerhalb des Engagement-Letters. Der System-Prompt verbietet explizit das Erfinden von Positionsindizes oder das Behaupten von Verstößen, die nicht an eine spezifische Position gebunden sind, was der häufigste Fehlerfall bei LLM-basierter Rechnungsprüfung ist.

Score + Route kombiniert die beiden Durchläufe zu einer einzigen Entscheidung. Die vier Buckets — auto_approve, auto_deduct, reviewer_queue, escalate_director — werden über zwei if-Knoten geroutet. Eskalationen landen in #legal-ops-escalations mit einem Slack-Block-Kit-Payload, der die fünf wichtigsten Regel- und KI-Befunde zeigt; Reviewer-Queue- und Auto-Deduct-Entscheidungen landen in #legal-ops-invoice-review; Auto-Approve schreibt nur das Audit-Log. Jeder Zweig endet bei Audit Log Insert, das auf invoice_id upserted, sodass erneute Läufe sicher sind.

Kostenrealität

Pro Rechnung: Ein Claude Sonnet 4.6-Aufruf bei etwa 4–6K Input-Token (Positionen + Mandat + Richtlinien) und 500–1.000 Output-Token, also etwa $0,04 pro Stück zu aktuellen Preisen. Bei 500 Rechnungen pro Monat sind das etwa $20 Inferenz. Die Postgres-Abfragen sind günstig (Einzelzeilen-Reads auf indizierten Spalten plus ein Upsert). Der E-Billing-API- und LEDES-Fetch sind auf der kostenlosen Seite Ihres bestehenden Anbietervertrags. n8n selbst gehostet ist die lineare Fixkosten; n8n Cloud Starter für $24/Monat deckt dieses Volumen mit Puffer.

Die Arbeitskosten-Mathematik macht diesen Flow rentabel. Ein Prüfer, der Zeile für Zeile vorgeht, braucht 10–15 Minuten pro Rechnung; der Flow reduziert das auf 2–4 Minuten bei den in die Queue gestellten Positionen (Slack-Zusammenfassung lesen, ins Audit-Log klicken, entscheiden) und null bei den Auto-Approve- und Auto-Deduct-Pfaden. Bei 500 Rechnungen pro Monat mit einem 60/30/10-Split über Auto-Approve, Reviewer-Queue und Eskalation spart der Flow etwa 50 Prüferstunden pro Monat bei Inferenzkosten von $20 plus einer oder zwei Betriebsstunden zum Justieren der Schwellenwerte. Der erzielbare Spend selbst ist die größere Position: 5–15% des monatlichen Spend für externe Anwälte ist das Band, das in Anbieter-Fallstudien (Brightflag, Onit) und unseren eigenen Rücktests berichtet wird, und das überwiegt die Betriebskosten um zwei Größenordnungen bei jedem Portfolio über $200K/Monat.

Seien Sie ehrlich bezüglich der Amortisationszeit. Der erste Monat ist Kalibrierung, keine Einsparung. Monate zwei und drei sind, wenn sich die Routing-Verteilung stabilisiert und der erzielbare Spend in Ihrer AP-Abweichung zu sehen beginnt.

Erfolgsmetrik

Verfolgen Sie monatlich den erzielten Spend — den Dollarwert von auto_deduct plus den Dollarwert von Reviewer-bestätigten Abzügen aus der Queue, dividiert durch den gesamten Spend für externe Anwälte in diesem Monat. Die zu schlagende Zahl ist die Ihrer manuellen Baseline. Wenn der Flow in Monat drei nicht mindestens 3% erzielt, liegt ein Kalibrierungsproblem vor, kein Flow-Problem; ziehen Sie das Audit-Log, sampeln Sie 30 Rechnungen und vergleichen Sie sie mit den manuellen Notizen Ihres Teams.

Sekundärmetrik: Prüferzeit pro markierter Rechnung. Wenn sie steigt statt sinkt, gibt die Slack-Nachricht dem Prüfer nicht genügend Kontext für eine schnelle Entscheidung — passen Sie den Block-Kit-Payload in Slack — Reviewer Queue an, um die spezifischen Positionsnummern und Dollarbeträge einzuschließen, nicht nur die Flag-Kategorien.

Vergleich mit Alternativen

Im Vergleich zur integrierten Compliance-Engine des E-Billing-Anbieters (Brightflags „AI review”, Onits Rules-Engine): Die Regeln des Anbieters sind kompetent, aber ihr KI-Durchlauf ist intransparent, Sie können den Prompt nicht anpassen und keine benutzerdefinierten Prüfungen hinzufügen, ohne für ein Professional-Services-Engagement zu zahlen. Dieser Flow gibt Ihnen den Prompt, die Schwellenwerte und das Audit-Log — alles editierbar. Im Vergleich zu einem eigenen Python-Skript: gleiche Logik, viel höhere Betriebslast (Sie besitzen den Cron, die Retries, die Credential-Rotation, die Observability) und kein visueller Debugger, wenn eine LEDES-Datei einer neuen Kanzlei seltsam parst. Im Vergleich zum Status quo eines Rechtsanwaltsfachgehilfen, der jede Rechnung liest: Der Fachgehilfe ist in den ersten Monaten bei neuartigen Mustern genauer, danach ist die Recall-Rate des Flows bei codierten Regeln höher und die Zeit des Fachgehilfen wird für die echten Urteilsfälle freigesetzt.

Das Argument für die n8n-Version gegenüber einem Lambda- oder Make.com-Build ist der visuelle Graph plus die Per-Knoten-Retry-Semantik — wenn die Anthropic API an einem geschäftigen Morgen rate-limitet, behandelt n8ns automatisches Retry mit Backoff am httpRequest-Knoten das ohne Code, und Sie können den Retry sehen.

Fallstricke

Schlecht kommunizierte Auto-Abzüge schaden Kanzleibeziehungen. Schutz: Der Slack — Reviewer Queue-Payload enthält immer die Begründungskette aus dem Regel- und KI-Durchlauf, und das Audit-Log behält das vollständige rule_flags_json und ai_flags_json. Bevor ein Auto-Abzug an die Kanzlei kommuniziert wird, generieren Sie die kanzleigerichtete Notiz aus der Audit-Log-Zeile, nicht aus einer vorlagenbasierten „wir haben X abgezogen”-Nachricht — Kanzleien akzeptieren Kürzungen, wenn sie die spezifische Position, die spezifische Richtlinie und den spezifischen Dollareinfluss sehen.

Schwellenwert-Anpassung ist mandatstypabhängig. Prozessuales hat andere Muster (große Discovery-Batches sehen wie Block-Billing aus, sind es aber nicht) als transaktionales (jedes Block-Billing ist verdächtig). Schutz: Die Load Matter + Rate Card-Abfrage gibt matter_type zurück, und der Rule-Based Checks-Code-Knoten ist der richtige Ort für eine Verzweigung. Liefern Sie den v1-Flow mit globalen Schwellenwerten aus, dann spezialisieren Sie innerhalb von vier Wochen.

Neue Kanzleien produzieren falsch-positive Ergebnisse, bis Sie eine Baseline haben. Schutz: Fügen Sie eine WHERE invoices_seen_count < 5-Prüfung vorgelagert hinzu und erzwingen Sie decision = reviewer_queue für jede Kanzlei unter diesem Schwellenwert, unabhängig davon, was Regeln und KI sagen. Das Bundle enthält diese Prüfung standardmäßig nicht; fügen Sie sie vor dem Go-live hinzu, wenn Sie neue Kanzleien öfter als einmal pro Quartal onboarden.

LEDES-Parsing bricht lautlos, wenn eine Kanzlei eine fehlerhafte Datei sendet. Schutz: Der Parse LEDES-Code-Knoten gibt parse_error: 'empty_or_malformed_ledes' zurück statt zu werfen, und die nachgelagerten Knoten schreiben eine Zeile in das Audit-Log mit decision: auto_approve (dem Standard) — was falsch ist. Fügen Sie einen if-Knoten nach Parse LEDES hinzu, der Parse-Fehler nach #legal-ops-escalations mit dem Kanzleinamen und der Rechnungs-ID routet, damit ein Mensch die Kanzlei um eine saubere Datei bitten kann.

Claude kann Verstöße bei einer umfangreichen Rechnung halluzinieren. Schutz: Der System-Prompt verbietet das Erfinden von Positionsindizes; der Score + Route-Knoten behandelt KI-Befunde als beratend, es sei denn, Schweregrad >= 0,8 (Eskalation) oder KI-Anzahl > 0 neben Regelbefunden (Reviewer-Queue). Lassen Sie niemals ein reines KI-Flag einen auto_deduct auslösen.

Stack

n8n (Cloud oder selbst gehostet) ist der Orchestrator. Claude Sonnet 4.6 über die Anthropic Messages API erledigt den Anomalie-Durchlauf. Postgres hält die Mandatsdatenbank, Rate Cards, Abrechnungsrichtlinien und das Audit-Log. Slack empfängt die Reviewer-Queue und Direktor-Eskalationen. Ihr E-Billing-System (Brightflag in den Bundle-Standardeinstellungen; tauschen Sie Host und Pfad für Onit, BusyLamp, SimpleLegal oder einen selbst gehosteten Endpunkt aus) ist die Wahrheitsquelle für neue Rechnungen und das eventuelle Write-Back-Ziel, wenn Sie den Flow erweitern, um Abzüge zurückzuschieben statt sie per E-Mail zu senden.

Dieser Flow ist die Betriebsschicht des Legal-Spend-Managements; die Richtlinienschicht sind Ihre schriftlichen Outside-Counsel-Richtlinien, die die regelbasierten Prüfungen kodieren. Die beiden funktionieren nur zusammen — die Richtlinien ohne den Flow sind aspiratorisch; der Flow ohne die Richtlinien ist ein Modell, das versucht, Ihre Richtlinie zu erfinden.

Files in this artifact

Download all (.zip)