Skip to content

vibtellect/pdf-invoice-automation

Repository files navigation

PDF-Rechnungsverarbeitung mit KI

Docker License: MIT AWS Bedrock n8n

Vollautomatisierte Rechnungsverarbeitung: PDF-Upload → OCR → KI-Strukturierung → JSON-Export. Ein produktionsreifer Proof of Concept für den Mittelstand.


Überblick

Diese Demo zeigt einen lauffähigen PoC für automatische Rechnungsverarbeitung. Der Workflow verarbeitet PDF-Rechnungen in Echtzeit:

PDF-Upload (Webhook)
    ↓
AWS S3 (Speicherung)
    ↓
AWS Textract OCR (Text-Erkennung)
    ↓
AWS Bedrock Claude (KI-Strukturierung)
    ↓
Strukturiertes JSON Output
    ↓
ERP/FiBu-Anbindung (optional)

Keine manuellen Prozesse mehr: Vollautomatische Extraktion von Rechnungsnummern, Daten, Positionen und Beträgen.


Architektur

graph LR
    A["📄 PDF Upload<br/>(Webhook)"] -->|multipart/form-data| B["n8n<br/>(Workflow-Engine)"]
    B -->|AnalyzeDocument| C["AWS Textract<br/>(OCR)"]
    C -->|OCR-Text| D["AWS Bedrock<br/>(Claude 3.5 Sonnet)"]
    D -->|InvokeModel| E["KI-Parser<br/>(Prompt-basiert)"]
    E -->|JSON| F["📊 Strukturierte<br/>Rechnungsdaten"]
    F -->|Webhook Callback| G["ERP/FiBu/Webhook<br/>(optional)"]

    style A fill:#e8f5e9
    style B fill:#fff3e0
    style C fill:#ffe0b2
    style D fill:#ff9800
    style E fill:#ff6f00
    style F fill:#c8e6c9
    style G fill:#a5d6a7
Loading

Komponenten:

Komponente Rolle Version
n8n Workflow-Orchestrierung, Webhook-Handler 1.76.1
AWS Textract OCR, Tabellen- und Formulare-Erkennung API
AWS Bedrock Multimodales LLM für JSON-Strukturierung Claude 3.5 Sonnet
Docker Compose Container-Orchestrierung (lokal/Docker) 3.9

Voraussetzungen

Hardware

  • Docker Desktop/Engine: v20+
  • Docker Compose: v2.0+
  • 4 GB RAM (für n8n + OS)
  • 2 GB freier Speicher (n8n volumes)

Software & Accounts

  • AWS Account mit:
    • IAM User (Access Key + Secret Key)
    • Bedrock Model Access: Claude 3.5 Sonnet v2 in eu-central-1 aktiviert
    • Textract Permissions in der Region
    • S3 Access (wird beim Setup erstellt)

AWS Setup Checklist

  • IAM User erstellt (mit Policy aus iam/n8n-automation-policy.json)
  • Access Keys generiert (speichern für .env)
  • AWS Region auf eu-central-1 gesetzt (DSGVO-konform)
  • Bedrock → Model Access → Claude 3.5 Sonnet v2 aktiviert
  • AWS CLI lokal konfiguriert (oder Keys direkt in .env eintragen)

Quickstart

1. Repository klonen

git clone https://github.com/vibtellect/pdf-invoice-automation.git
cd pdf-invoice-automation

2. Environment vorbereiten

make setup

Dies erstellt .env aus .env.example. Öffne die Datei und füge deine AWS Credentials ein:

# .env
AWS_ACCESS_KEY_ID=AKIA...
AWS_SECRET_ACCESS_KEY=...
AWS_REGION=eu-central-1

3. Container starten

make up

Dies startet n8n auf http://localhost:5678.

4. Health Check

make smoke

Erwartet: OK - n8n UI erreichbar auf http://localhost:5678

5. Workflow importieren

make import

Dies öffnet den Browser auf der n8n UI. Alternativ manuell:

  1. Gehe zu http://localhost:5678
  2. Klicke auf WorkflowsImport from File
  3. Wähle workflows/pdf-invoice-processing.json
  4. Konfiguriere in jedem AWS-Node deine Credentials
  5. Aktiviere den Workflow mit dem Play-Button

6. Demo-Test

curl -X POST http://localhost:5678/webhook/invoice-processing \
  -F "file=@demo-rechnungen/rechnung-it-dienstleistung.pdf"

Demo

Das Repository enthält 3 realistische Demo-Rechnungen im Ordner demo-rechnungen/:

Datei Typ Positionen Bruttobetrag Seiten
rechnung-it-dienstleistung.pdf IT-Dienstleistung 5 16.428,00 EUR 2
rechnung-bueroausstattung.pdf Waren 4 1.583,92 EUR 1
rechnung-saas-lizenz.pdf SaaS 4 4.902,00 EUR 1

Zusätzlich gibt es textbasierte Varianten (.txt), um lokale Szenarien zu testen, wenn PDFs nicht verarbeitet werden können.

Webhook-Syntax

# Einfacher Upload
curl -X POST http://localhost:5678/webhook/invoice-processing \
  -F "file=@<PDF_PATH>"

# Mit Metadata (optional)
curl -X POST http://localhost:5678/webhook/invoice-processing \
  -F "file=@<PDF_PATH>" \
  -F "supplier_id=<ID>" \
  -F "reference=<REF>"

Erwarteter JSON Output

{
  "rechnungsnummer": "RE-2026-001",
  "datum": "2026-02-15",
  "lieferant": {
    "name": "Muster GmbH",
    "adresse": "Musterstraße 1, 12345 Berlin"
  },
  "kunde": {
    "name": "Dein Unternehmen GmbH"
  },
  "positionen": [
    {
      "bezeichnung": "Beratung Q1 2026",
      "menge": 10,
      "einzelpreis": 150.00,
      "gesamtpreis": 1500.00
    },
    {
      "bezeichnung": "Software-Lizenz",
      "menge": 1,
      "einzelpreis": 500.00,
      "gesamtpreis": 500.00
    }
  ],
  "nettosumme": 2000.00,
  "mwst_satz": 19,
  "mwst": 380.00,
  "bruttosumme": 2380.00,
  "waehrung": "EUR"
}

Die KI extrahiert vollautomatisch:

  • ✅ Rechnungsnummern & Daten
  • ✅ Lieferantendaten
  • ✅ Alle Positionen (beliebig viele)
  • ✅ Netto-, MwSt., Brutto-Beträge
  • ✅ Validierung der Arithmetik

Workflow-Details

Der n8n Workflow (workflows/pdf-invoice-processing.json) implementiert:

Schritt 1: Webhook-Empfang

  • Trigger: POST /webhook/invoice-processing
  • Input: Multipart-Form mit file (PDF)

Schritt 2: S3 Upload

  • Speichert PDF in AWS S3 mit Timestamp
  • Gibt S3-URI zurück

Schritt 3: AWS Textract OCR

  • AnalyzeDocument mit Features: TABLES, FORMS
  • Extrahiert strukturierten Text, Tabellen, Felder

Schritt 4: AWS Bedrock Invoke

  • Sendet OCR-Text + Prompt an Claude 3.5 Sonnet
  • Prompt aus prompts/invoice-parser-prompt.txt
  • Bedrock gibt JSON direkt zurück

Schritt 5: Validierung & Response

  • JSON-Parsing & Validierung
  • HTTP 200 + strukturierter JSON als Response
  • Fehler werden geloggt (HTTP 400 mit Fehlermeldung)

Schritt 6: Optional - ERP-Integration

  • Webhook-Callback an dein ERP/FiBu-System
  • Oder: Direkte Datenbankschreibweise (erfordert Erweiterung)

Tech Stack

Layer Technologie Notes
Orchestrierung n8n 1.76.1 Open-source, selbstgehostet
OCR AWS Textract Tabellen & Formulare
KI AWS Bedrock + Claude 3.5 Sonnet v2 Multimodal, kostengünstig
Storage AWS S3 DSGVO-konform (eu-central-1)
Container Docker Compose Lokale Entwicklung + Tests
Sprache JavaScript/n8n-Expressions Workflow-Logik
Protokolle HTTP (Webhook), REST APIs Standard-Integration

IAM-Permissions

Die Policy in iam/n8n-automation-policy.json gewährt:

Erlaubt:
- bedrock:InvokeModel (Claude)
- textract:AnalyzeDocument (OCR)
- s3:GetObject, s3:PutObject, s3:ListBucket
- CloudFormation (ReadOnly)
- CloudWatch Logs (ReadOnly)
- SSM Parameters (ReadOnly)

Explizit verboten (DenySecurityCritical):
- IAM, Organizations, Billing (keine Privilege Escalation)
- S3 Delete Bucket (Sicherheit)
- RDS/DynamoDB Destroy (Datenschutz)

Zur Verwendung:

  1. AWS Console → IAM → Users → Create User (z.B. n8n-automation)
  2. Inline Policy hinzufügen
  3. JSON aus iam/n8n-automation-policy.json kopieren
  4. Access Keys generieren
  5. Keys in .env speichern

Makefile-Referenz

make help          # Zeige alle Targets
make setup         # Erstelle .env aus .env.example
make up            # Starte n8n Container
make down          # Stoppe Container
make logs          # Live Logs anzeigen
make smoke         # Health Check
make import        # Öffne n8n UI zum Workflow Import

Kosten (Richtwert)

Service Preis Beispiel
AWS Textract 1,50 USD / 1K Seiten 0,0015 USD/Seite
AWS Bedrock (Claude) Input: 0,003 USD/1K Token, Output: 0,015 USD/1K Token ~0,01 USD/Rechnung
AWS S3 0,023 USD/GB/Monat Negligible für Demo
n8n (Docker) Free (self-hosted) 0 USD

Beispiel: 100 Rechnungen pro Monat = ~2,00 USD AWS Kosten.


Logs & Debugging

n8n Logs ansehen

make logs

Spezifische Fehler debuggen

  1. Gehe zu http://localhost:5678
  2. Öffne den Workflow
  3. Klicke auf Executions → letzte Ausführung
  4. Klappt die Fehlerausgabe auf (roter Step)

Häufige Probleme

Problem Lösung
n8n Port 5678 wird nicht erreichbar make down && make up neustarten
AWS Credentials ungültig .env prüfen, IAM Access Keys rotieren
Bedrock Model nicht verfügbar AWS Console → Bedrock → Model Access → Claude 3.5 Sonnet aktivieren
Textract gibt nur Whitespace zurück PDF-Format prüfen (gescannte PDFs brauchen OCR-Features)

Sicherheit

DSGVO-Konformität

  • ✅ AWS Region: eu-central-1 (Daten in Deutschland)
  • ✅ Keine Speicherung von PDFs lokal (nur S3 mit TTL möglich)
  • ✅ Keine Weitergabe an Dritte (nur interne AWS Services)

Best Practices

  • .env enthält Credentials: Niemals in Git committen (siehe .gitignore)
  • Bedrock API-Calls loggen Eingaben nicht öffentlich (Check mit AWS CloudTrail)
  • IAM Policy restriktiv halten (mit DenySecurityCritical)
  • Webhook authentifizieren (nicht in Demo, aber für Production wichtig)

Nächste Schritte

Für Production:

  1. Authentifizierung hinzufügen (API-Key, OAuth)
  2. Fehler-Queue: Failed Invoices in Datenbank speichern
  3. Retry-Handling: Exponential Backoff für flüchtige Fehler
  4. ERP-Mapping: Feldmapping für DATEV/SAP/NetSuite
  5. Monitoring: CloudWatch Alarms für Fehlerquote
  6. Database: PostgreSQL statt SQLite für Transaktionen

Für erweiterte Szenarien:

  • Multi-Supplier Validation: Lieferanten-spezifische Validierungsregeln
  • Document Classification: ML-basierte Rechnungstyp-Erkennung
  • Receipt-Matching: Automatisches Zuordnen zu Bestellungen (PO-Matching)
  • Tax Compliance: Automatische Prüfung von Steuersätzen pro Branche

Support & Kontakt

Wenn du den PoC auf Produktionsniveau heben möchtest:

Ich helfe dir dabei, saubere Schnittstellen, Monitoring und Skalierbarkeit aufzubauen.


Disclaimer

Anonymisiertes Praxisbeispiel basierend auf realen Projektmustern

Diese Demo zeigt typische Rechnungsformate aus Beratung, IT-Dienstleistung und SaaS. Echte Produktivierung erfordert Anpassung an deine spezifischen Rechnungsformate, Lieferanten und Validierungsregeln.


Lizenz

MIT License © 2026 Vitalij Bojatschkin / BOJATSCHKIN LTD.

Siehe LICENSE für Details.


Weitere Ressourcen


Made with ❤️ for German Mittelstand

About

PDF-Rechnungsverarbeitung mit KI – n8n + AWS Textract + Bedrock

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors