💡 Praxis-Beispiel: Sehen Sie sich unsere Dynamics 365 Case Study an – dort zeigen wir, wie wir X-Rechnung, ZUGFeRD und PDF-Rechnungen automatisch verarbeiten und direkt in Microsoft Dynamics 365 Finance & Operations buchen.
📋 Inhaltsverzeichnis
⏱️ Lesezeit: 13 Minuten
Das Problem: Manuelle Rechnungsprüfung kostet 18.000€/Jahr
Kennen Sie das? Ihre Buchhaltung verbringt 3-4 Stunden pro Tag
mit manueller Rechnungsprüfung:
- Rechnung aus E-Mail herunterladen
- PDF öffnen, Betrag, Datum, Rechnungsnummer ablesen
- Daten in ERP/Buchhaltungs-Software eintippen
- Rechnung mit Bestellung abgleichen (falls vorhanden)
- Bei Unstimmigkeiten: E-Mail an Lieferanten
- Rechnung archivieren (GoBD-konform)
Zeit pro Rechnung: 45 Minuten (Durchschnitt)
Fehlerquote: 8-12% (Tippfehler, falsches Feld, vergessene Rechnungen)
Beispiel: Bauunternehmen mit 1.200 Rechnungen/Jahr
| Metrik |
Wert |
| Rechnungen pro Jahr |
1.200 |
| Ø Zeit pro Rechnung (manuell) |
45 Min. |
| Gesamt-Aufwand pro Jahr |
900 Stunden |
| Stundensatz Buchhaltung |
40€/Std. |
| Kosten pro Jahr |
36.000€ |
| Fehler (8% von 1.200) |
96 Rechnungen |
| Ø Korrektur-Aufwand pro Fehler |
30 Min. |
| Fehler-Kosten pro Jahr |
1.920€ |
| GESAMT-KOSTEN |
37.920€/Jahr |
❌ Das Problem: Manuelle Rechnungsprüfung ist teuer, fehleranfällig
und bindet Ressourcen. Ihre Buchhaltung macht keine strategische Arbeit,
sondern Daten-Abtippen.
Die Lösung: KI-gestützte Automatisierung
Stellen Sie sich vor:
- Rechnung kommt per E-Mail rein
- KI extrahiert automatisch: Betrag, Datum, Rechnungsnummer, Lieferant, USt-ID
- KI validiert: Betrag > 0? Datum plausibel? USt-ID korrekt?
- KI prüft Duplikate: Wurde diese Rechnung schon erfasst?
- Confidence Score > 90%? → Auto-Approve + E-Mail an Prüfer
- Confidence Score < 90%? → Manuelle Prüfung + Felder sind schon vorausgefüllt
Zeit pro Rechnung: 2 Minuten (nur Validierung, falls Confidence < 90%)
Fehlerquote: 1-2% (nur bei schlechten Scans oder Handschrift)
Was macht die KI konkret?
| Aufgabe |
Manuell |
Mit KI |
| Betrag extrahieren |
45 Sek. |
0 Sek. ✅ |
| Datum extrahieren |
30 Sek. |
0 Sek. ✅ |
| Rechnungsnummer finden |
60 Sek. |
0 Sek. ✅ |
| Lieferant erkennen |
45 Sek. |
0 Sek. ✅ |
| USt-ID validieren |
120 Sek. |
0 Sek. ✅ |
| Duplikate prüfen |
180 Sek. |
0 Sek. ✅ |
| Daten eintippen |
300 Sek. |
0 Sek. ✅ |
| Manuelle Validierung (nur wenn nötig) |
- |
120 Sek. (bei 10% der Rechnungen) |
| GESAMT |
780 Sek. (13 Min.) |
12 Sek. Ø |
Zeitersparnis: 768 Sekunden (12,8 Min.) pro Rechnung = 98,5% schneller
ROI-Berechnung: 127% im ersten Jahr
Ausgangssituation (wie oben)
- 1.200 Rechnungen/Jahr
- 900 Stunden manueller Aufwand
- 36.000€ Personalkosten
- 1.920€ Fehler-Kosten
- GESAMT: 37.920€/Jahr
Mit KI-Rechnungsprüfung
| Kosten-Position |
Betrag |
| Implementierung (einmalig) |
|
| Intrexx-Entwicklung (5 Tage) |
6.000€ |
| n8n-Workflow (2 Tage) |
2.400€ |
| Testing + Rollout (1 Tag) |
1.200€ |
| Summe Implementierung |
9.600€ |
| Laufende Kosten (Jahr 1) |
|
| Claude Vision API (1.200 Rechnungen à 0,30€) |
360€ |
| n8n Cloud (optional, kann auch self-hosted 0€) |
240€ |
| Intrexx-Lizenz (Anteil für Rechnungen, 10%) |
1.200€ |
| Manuelle Validierung (10% der Rechnungen, 120 Std.) |
4.800€ |
| Summe laufende Kosten |
6.600€ |
| GESAMT Jahr 1 (Impl. + Laufend) |
16.200€ |
ROI-Rechnung
| Metrik |
Wert |
| Kosten vorher (manuell) |
37.920€ |
| Kosten nachher (Jahr 1) |
16.200€ |
| Ersparnis Jahr 1 |
21.720€ |
| Investition (Impl. + Jahr 1 laufend) |
16.200€ |
| Nutzen (Ersparnis Jahr 1) |
21.720€ |
| ROI Jahr 1 |
127% |
| Break-Even |
8,5 Monate |
| Ersparnis ab Jahr 2 (jährlich) |
31.320€ |
✅ ROI-Zusammenfassung
- 21.720€ Ersparnis im ersten Jahr
- 127% ROI (für jeden investierten Euro gibt es 2,27€ zurück)
- Break-Even nach 8,5 Monaten
- 31.320€ Ersparnis ab Jahr 2 (jährlich wiederkehrend)
- 3-Jahres-ROI: 74.960€ Gesamtersparnis bei 16.200€ Investition = 363% ROI
Technische Architektur (Intrexx + n8n + Claude)
┌─────────────────────────────────────────────────────────┐
│ EINGANGSRECHNUNG (E-Mail/Upload) │
└────────────────────────┬────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ INTREXX (Low-Code) │
│ • PDF-Upload via Drag-&-Drop │
│ • Datenbank-Eintrag erstellt (Status: "Neu") │
│ • afterSave-Trigger feuert Groovy Hook │
└────────────────────────┬────────────────────────────────┘
│
│ Groovy Hook sendet:
│ - PDF (Base64)
│ - Invoice ID
│ - Supplier Name (falls bekannt)
▼
┌─────────────────────────────────────────────────────────┐
│ n8n WEBHOOK NODE │
│ • Empfängt Request von Intrexx │
│ • Validiert API-Key │
└────────────────────────┬────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ n8n: BASE64 → BINARY NODE │
│ • PDF dekodieren │
└────────────────────────┬────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ CLAUDE VISION API (OCR + EXTRAKTION) │
│ Prompt: │
│ "Extrahiere aus dieser Rechnung: │
│ 1. Rechnungsnummer │
│ 2. Rechnungsbetrag (Brutto in EUR) │
│ 3. Rechnungsdatum (Format: YYYY-MM-DD) │
│ 4. Lieferant (Firma) │
│ 5. USt-ID │
│ 6. Confidence Score (0-100%) │
│ │
│ Antwort als JSON." │
└────────────────────────┬────────────────────────────────┘
│
│ Response:
│ {
│ "invoice_number": "RE-2026-001",
│ "amount": 1234.56,
│ "date": "2026-01-10",
│ "supplier": "Baustoff GmbH",
│ "vat_id": "DE123456789",
│ "confidence": 96
│ }
▼
┌─────────────────────────────────────────────────────────┐
│ n8n: VALIDATION NODE │
│ • Betrag > 0? │
│ • Datum in Vergangenheit < 90 Tage? │
│ • Rechnungsnummer nicht leer? │
│ • USt-ID-Format korrekt (DE + 9 Ziffern)? │
└────────────────────────┬────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ n8n: DUPLIKATE-CHECK NODE │
│ • Query Intrexx DB: Gibt es schon Rechnung mit │
│ gleicher Rechnungsnummer? │
│ • Gibt es Rechnung mit gleichem Betrag + Lieferant │
│ + Datum (±3 Tage)? │
└────────────────────────┬────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ n8n: IF NODE (Confidence) │
│ Confidence > 90% && Keine Duplikate? │
│ ├─ JA: Status = "Auto-Approved" │
│ └─ NEIN: Status = "Manuelle Prüfung" │
└────────────────────────┬────────────────────────────────┘
│
│ Callback an Intrexx REST API
│ (Extrahierte Daten + Status)
▼
┌─────────────────────────────────────────────────────────┐
│ INTREXX REST API HANDLER │
│ • Datenbank-Update: │
│ - invoice_number = "RE-2026-001" │
│ - amount = 1234.56 │
│ - invoice_date = "2026-01-10" │
│ - supplier_name = "Baustoff GmbH" │
│ - vat_id = "DE123456789" │
│ - ai_confidence = 96 │
│ - processing_status = "Auto-Approved" │
│ • Workflow-Trigger: E-Mail an Prüfer │
└────────────────────────┬────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ USER NOTIFICATION │
│ E-Mail: "Rechnung RE-2026-001 geprüft (Auto-Approved)"│
│ Link: https://intrexx.firma.de/invoices/1234 │
└─────────────────────────────────────────────────────────┘
Technologie-Stack
| Komponente |
Technologie |
Funktion |
| Frontend + DB |
Intrexx |
Upload-Formular, Datenbank, User-Interface |
| Workflow-Engine |
n8n |
Orchestrierung (Claude API, Validierung, Callback) |
| KI-Engine |
Claude Vision API |
OCR + Datenextraktion aus PDF |
| Integration Layer |
Webhooks (HTTPS + API-Key) |
Intrexx ↔ n8n Kommunikation |
| Archivierung |
Intrexx DMS (GoBD-konform) |
PDF/A-Export, 10 Jahre Aufbewahrung |
Implementierung in 3 Wochen (Schritt-für-Schritt)
Woche 1: Setup & Foundation
Tag 1-2: Intrexx Datenbank + UI
- Datenbank-Tabelle
invoices erstellen:
- id (Primary Key)
- invoice_number (VARCHAR 50)
- amount (DECIMAL 10,2)
- invoice_date (DATE)
- supplier_name (VARCHAR 200)
- vat_id (VARCHAR 20)
- invoice_pdf (FILE)
- processing_status (VARCHAR 50)
- ai_confidence (INT 0-100)
- created_at, updated_at (DATETIME)
- Upload-Formular bauen (Drag-&-Drop für PDF)
- Übersichts-Seite (Tabelle mit allen Rechnungen)
- Detail-Seite (einzelne Rechnung anzeigen + PDF-Preview)
Tag 3: n8n Setup
- n8n installieren (Docker oder Cloud)
- Ersten Webhook erstellen (Test mit Postman)
- Claude API-Key in n8n hinterlegen
Tag 4-5: Intrexx Groovy Hook
- afterSave-Event Handler in Intrexx
- Groovy Script schreiben (PDF → Base64 → n8n Webhook)
- Error-Handling (Try-Catch, Logging)
Woche 2: n8n Workflow + KI-Integration
Tag 6-7: n8n Workflow bauen
- Webhook Node (Empfang von Intrexx)
- Function Node (Base64 → Binary)
- Claude Vision Node (OCR + Extraktion)
- Function Node (JSON-Parsing + Validierung)
- IF Node (Confidence > 90%?)
Tag 8: Duplikate-Check
- HTTP Request Node (Intrexx REST API Query)
- Function Node (Duplikate-Logik: Rechnungsnummer + Betrag+Datum)
- IF Node (Duplikat gefunden?)
Tag 9-10: Callback an Intrexx
- HTTP Request Node (Intrexx REST API Update)
- Error-Trigger Node (bei Fehlern: Slack/E-Mail Alert)
- Testing (10 Test-Rechnungen durchlaufen lassen)
Woche 3: Testing, Optimierung, Rollout
Tag 11-12: User Acceptance Testing
- 50 echte Rechnungen durchlaufen lassen
- Fehleranalyse (welche Rechnungen hatten Confidence <90%?)
- Prompt-Optimierung (Claude Prompt anpassen für bessere Extraktion)
Tag 13: GoBD-Archivierung
- PDF/A-Konvertierung in Intrexx aktivieren
- Audit-Log (wer hat wann welche Rechnung validiert?)
- Backup-Strategie testen
Tag 14-15: Training & Rollout
- User-Training (Buchhaltung): Wie funktioniert das System?
- Dokumentation schreiben (Prozess-Diagramm, FAQ)
- Go-Live: System für alle Mitarbeiter freischalten
✅ Nach 3 Wochen: System ist live. Erste Rechnungen werden automatisch verarbeitet.
Buchhaltung spart ab Tag 1 Zeit.
Code-Beispiele (Groovy, n8n, Claude Prompt)
1. Intrexx Groovy Hook (afterSave)
// ==========================================
// Intrexx Event Handler: afterSave
// Trigger: Rechnung wurde hochgeladen
// ==========================================
import groovy.json.JsonOutput
import groovy.json.JsonSlurper
def invoiceFile = g_record.getFile("invoice_pdf")
if (invoiceFile == null) {
g_log.error("Keine Rechnung gefunden für ID: ${g_record.getIntegerValue('id')}")
return
}
// PDF zu Base64 konvertieren
def invoiceBase64 = invoiceFile.getBytes().encodeBase64().toString()
// n8n Webhook URL (aus Intrexx Config)
def n8nWebhookUrl = "https://n8n.your-company.de/webhook/invoice-check"
def apiKey = "YOUR_SECRET_API_KEY"
// Payload erstellen
def payload = [
invoice_id: g_record.getIntegerValue("id"),
pdf_base64: invoiceBase64,
supplier_name: g_record.getStringValue("supplier_name") ?: "",
upload_timestamp: new Date().format("yyyy-MM-dd'T'HH:mm:ss'Z'")
]
try {
def connection = new URL(n8nWebhookUrl).openConnection()
connection.setRequestMethod("POST")
connection.doOutput = true
connection.setRequestProperty("Content-Type", "application/json")
connection.setRequestProperty("X-API-Key", apiKey)
connection.setConnectTimeout(5000) // 5 Sek.
connection.setReadTimeout(30000) // 30 Sek.
def writer = new OutputStreamWriter(connection.outputStream, "UTF-8")
writer.write(JsonOutput.toJson(payload))
writer.flush()
writer.close()
def responseCode = connection.responseCode
if (responseCode == 200) {
def response = connection.inputStream.text
def json = new JsonSlurper().parseText(response)
g_record.setValue("processing_status", "In Verarbeitung")
g_record.setValue("n8n_workflow_id", json.workflow_id ?: "")
g_log.info("n8n Workflow gestartet für Invoice ID: ${g_record.getIntegerValue('id')}")
} else {
g_log.error("n8n HTTP Error ${responseCode} für Invoice ID: ${g_record.getIntegerValue('id')}")
g_record.setValue("processing_status", "Fehler beim Senden")
}
} catch (Exception e) {
g_log.error("n8n Request fehlgeschlagen: ${e.message}")
g_record.setValue("processing_status", "Fehler: ${e.message}")
}
2. Claude Vision Prompt (in n8n)
// n8n Node: Claude Vision API Call
{
"model": "claude-3-7-sonnet-20250219",
"max_tokens": 1024,
"messages": [
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": "application/pdf",
"data": "{{ $json.pdf_base64 }}"
}
},
{
"type": "text",
"text": `Du bist ein Experte für Rechnungsprüfung.
Extrahiere aus dieser Rechnung folgende Daten:
1. **Rechnungsnummer** (z.B. RE-2026-001, Inv-12345, etc.)
2. **Rechnungsbetrag** (Brutto in EUR, nur die Zahl)
3. **Rechnungsdatum** (Format: YYYY-MM-DD)
4. **Lieferant** (Firmenname)
5. **USt-ID** (Format: DE + 9 Ziffern, z.B. DE123456789)
6. **Confidence Score** (0-100%): Wie sicher bist du bei der Extraktion?
WICHTIG:
- Wenn ein Feld nicht gefunden werden kann: null
- Betrag ohne € Symbol, nur Zahl (z.B. 1234.56)
- Datum im ISO-Format (YYYY-MM-DD)
- Confidence Score: 100% = absolut sicher, 50% = unsicher
Antwort als JSON (ohne Erklärung):
{
"invoice_number": "...",
"amount": 1234.56,
"date": "2026-01-10",
"supplier": "Firma XY GmbH",
"vat_id": "DE123456789",
"confidence": 95
}`
}
]
}
]
}
3. n8n Duplikate-Check (Function Node)
// n8n Function Node: Duplikate-Check
const extractedData = $input.first().json;
const invoiceNumber = extractedData.invoice_number;
const amount = extractedData.amount;
const date = extractedData.date;
const supplier = extractedData.supplier;
// Intrexx REST API abfragen (vorherige Node hat Datenbank-Abfrage gemacht)
const existingInvoices = $('Intrexx_Query').all();
let isDuplicate = false;
let duplicateReason = "";
// Check 1: Rechnungsnummer exakt gleich
for (const invoice of existingInvoices) {
if (invoice.json.invoice_number === invoiceNumber) {
isDuplicate = true;
duplicateReason = `Duplikat: Rechnungsnummer ${invoiceNumber} existiert bereits (ID: ${invoice.json.id})`;
break;
}
}
// Check 2: Betrag + Lieferant + Datum (±3 Tage) gleich
if (!isDuplicate) {
const invoiceDate = new Date(date);
for (const invoice of existingInvoices) {
const existingDate = new Date(invoice.json.invoice_date);
const daysDiff = Math.abs((invoiceDate - existingDate) / (1000 * 60 * 60 * 24));
if (
invoice.json.amount === amount &&
invoice.json.supplier_name === supplier &&
daysDiff <= 3
) {
isDuplicate = true;
duplicateReason = `Duplikat-Verdacht: Gleicher Betrag (${amount}€) vom gleichen Lieferanten (${supplier}) am ${date} (±3 Tage)`;
break;
}
}
}
return {
...extractedData,
is_duplicate: isDuplicate,
duplicate_reason: duplicateReason
};
Häufig gestellte Fragen (FAQ)
Wie genau ist Claude Vision bei Rechnungen?
+
Claude Vision erreicht bei strukturierten Rechnungen
(Standard-Layouts wie DATEV, Lexware) 95-98% Genauigkeit
für Betrag, Datum, Rechnungsnummer.
Bei unstrukturierten Rechnungen (handschriftliche Notizen,
Scans schlechter Qualität) 85-92%.
Zum Vergleich: Menschen machen bei manueller Erfassung
8-12% Fehler (Tippfehler, falsche Felder).
Best Practice: 4-Augen-Prinzip – KI extrahiert,
Mensch validiert bei Confidence Score <90%.
Was kostet eine KI-Rechnungsprüfung im Vergleich zu DocuWare oder ABBYY?
+
DIY mit Claude Vision API: 0,30€ pro Rechnung (OCR + Extraktion)
Kommerzielle Lösungen:
- DocuWare: 2-5€/Rechnung
- ABBYY FlexiCapture: 1,50-3€/Rechnung
- Candis/Moss: 1-2€/Rechnung
Bei 300 Rechnungen/Monat:
Claude API: 1.080€/Jahr
vs. DocuWare: 7.200-18.000€/Jahr
Ersparnis: 85-94%
Zusätzliche Kosten DIY-Ansatz:
- Intrexx-Lizenz: ab 12.000€/Jahr (wird aber meist schon für andere Use Cases genutzt)
- n8n: 0€ (self-hosted)
- Entwicklung: 5-10 Tage à 1.200€ = 6.000-12.000€ einmalig
Break-Even: 5-8 Monate
Kann die KI auch GoBD-konforme Archivierung?
+
Die KI extrahiert nur Daten – GoBD-konforme Archivierung
macht Intrexx (DMS-Modul).
Anforderungen GoBD:
- Unveränderbarkeit: PDF/A-Konvertierung
- Versionierung: Audit-Log bei Änderungen
- Nachvollziehbarkeit: Wer hat wann was gemacht?
- 10 Jahre Aufbewahrung: Backup-Strategie
Intrexx erfüllt alle Punkte:
- PDF/A-Export (automatisch bei Upload)
- Datenbank-Trigger für Audit-Logs
- Rechte-Management (nur Finance darf löschen)
- Automatisches Backup (täglich)
Optional: Zertifizierte Archiv-Systeme (d.velop d3, ELO)
via Intrexx-Integration anbinden.
Was passiert bei Rechnungen in Fremdsprachen?
+
Claude Vision unterstützt 100+ Sprachen
(Englisch, Französisch, Spanisch, Italienisch, Polnisch, Türkisch, etc.).
Genauigkeit:
- Englisch/Französisch: 95%+
- Osteuropäische Sprachen: 90-93%
Best Practice: Prompt in Englisch schreiben,
Output-Sprache auf Deutsch forcieren.
Beispiel:
Extract invoice data from this document (language: French).
Return all values in German. Amount in EUR (convert if needed).
Bei häufigen Fremdsprachen-Rechnungen:
- Separate n8n-Workflows pro Sprache (optimierte Prompts)
- Auto-Detection via Language-Detection-Node (Zeile 1 der Rechnung analysieren)
Wie verhindere ich doppelte Rechnungen?
+
3-Stufen-Duplikate-Check:
1) Rechnungsnummer-Abgleich
SQL-Query in Intrexx: SELECT COUNT(*) WHERE invoice_number = ?
2) Betrag + Lieferant + Datum-Kombination
Gleicher Betrag am gleichen Tag vom gleichen Lieferant = 95% Duplikat
3) Semantic Search mit Embeddings
Claude erzeugt Vektor-Repräsentation der Rechnung, Similarity-Check gegen
alle Rechnungen der letzten 12 Monate, Threshold >0.92 = Duplikat-Warnung
Umsetzung in n8n:
3 IF-Nodes, bei Duplikat-Verdacht: Status "Manuelle Prüfung" +
E-Mail an Finance + Link zu beiden Rechnungen im UI.
🚀 Bereit für automatische Rechnungsprüfung?
Wir haben dieses System bei 8 Kunden implementiert –
durchschnittlicher ROI: 143% im ersten Jahr.
Nächster Schritt: Kostenloses 30-Min. Beratungsgespräch
Jetzt Termin vereinbaren
Weiterführende Artikel: