🌙
☀️
Insolvenzsteuer-Fachtagung 2025

KI im Steuerverfahren
und in der Steuerberatung

Wie Large Language Models und algorithmische Verfahren
Datenbestände auf Auffälligkeiten analysieren


Impulsreferat
StB Michel Braun
WTS, Düsseldorf
Impulsreferat
Stefan Werner
GKBp Land Brandenburg
(in nicht dienstlicher Eigenschaft)
anschließend Podiumsdiskussion
Moderation: Prof. Dr. Marc Desens · Universität Leipzig

Agenda


🧠

1 — Was kann ein LLM?

Sprachverständnis, Kontextanalyse und die Grenzen reiner Textmodelle

2 — Das Zusammenspiel

LLM als Orchestrator — Python als Ausführungsschicht

🔍

3 — Algorithmen & Methoden

Benford, Zeitreihen, Clustering, Ausreißer-Erkennung

📊

4 — Live-Workflow

Von der Fragestellung zum Prüfungsergebnis

01

Was kann ein LLM?

Sprachverständnis trifft auf steuerliches Fachwissen

LLM — Das Sprachmodell

Grundlagen

Was ein LLM kann

  • Natürliche Sprache verstehen — Fachbegriffe, Kontext, Intention
  • Steuerliches Wissen — AO, EStG, InsO, BMF-Schreiben
  • Code generieren — Python, SQL, DAX auf Zuruf
  • Ergebnisse interpretieren — Zahlen in Prüfungsfeststellungen übersetzen
  • Iterativ arbeiten — Hypothesen verfeinern im Dialog

Was ein LLM nicht kann

  • Rechnen — Keine garantierte arithmetische Korrektheit
  • Daten verarbeiten — Kein direkter Zugriff auf Dateien
  • Determinismus — Gleiche Frage ≠ immer gleiche Antwort
  • Aktualität — Wissen endet am Trainingsdatum
  • Verifizieren — Kann „halluzinieren"

Kernproblem: Ein LLM allein kann keine 50.000 Buchungssätze analysieren. Es braucht Werkzeuge — und genau hier kommt Code ins Spiel.

02

Das Zusammenspiel

LLM denkt — Python rechnet — Ergebnisse werden verstanden

Architektur: LLM + Code

LLMPythonAlgorithmen
👤Prüfer:inNatürlichsprachliche Anfrage
🧠LLM (Claude Code)Versteht Frage → plant Analyse → generiert Code → interpretiert Ergebnisse
🐍Pythonpandas, numpy, scipy
📈Visualisierungmatplotlib, plotly
🗄️DatenquellenCSV, IDEA, GDPdU
📋ExportExcel, PDF, HTML

Der Dialog mit dem LLM

Prompt → Code → Ergebnis

💬 „Analysiere die Kreditorenbuchungen der Gemeinschuldnerin auf Auffälligkeiten im Zeitraum 6 Monate vor Insolvenzantrag. Prüfe insbesondere auf ungewöhnliche Zahlungen an nahestehende Personen."

Python — vom LLM generiert import pandas as pd from datetime import timedelta # Daten laden und Zeitraum filtern df = pd.read_csv("buchungen_kreditoren.csv", parse_dates=["datum"]) insolvenz_datum = pd.Timestamp("2024-03-15") kritischer_zeitraum = df[ df["datum"] >= insolvenz_datum - timedelta(days=180) ] # Nahestehende Personen identifizieren (§ 138 InsO) nahestehende = lade_nahestehende_personen("gesellschafter.csv") verdaechtig = kritischer_zeitraum[ kritischer_zeitraum["empfaenger"].isin(nahestehende) ] # Statistische Ausreißer erkennen z_scores = berechne_z_scores(verdaechtig["betrag"]) ausreisser = verdaechtig[z_scores > 2.5]

Claude Code — Der Workflow

Praxis
💬Frage stellenNatürliche Sprache
🧠LLM plantAnalysestrategie
⚙️Code generiertPython / SQL / DAX
🔄AusführungSandbox-Umgebung
📊ErgebnisVisualisierung + Text

Entscheidend: Das LLM führt den Code aus, sieht das Ergebnis und kann iterativ nachfragen: „Die Verteilung ist auffällig — soll ich die Top-10 Buchungen einzeln prüfen?"

03

Algorithmen & Methoden

Das analytische Werkzeugset hinter der KI

Benford's Law

ZiffernanalyseKlassiker der Prüfung

Prinzip

In natürlich gewachsenen Zahlenreihen folgt die Verteilung der führenden Ziffern einer logarithmischen Gesetzmäßigkeit.

Abweichungen deuten auf Manipulation, fehlende Belege oder systematische Rundungen hin.

Insolvenz-Kontext: Auffällige Häufung bestimmter Beträge kurz vor Insolvenzantrag — Indizien für § 133 InsO (Vorsätzliche Benachteiligung)

Python import numpy as np def benford_analyse(betraege): # Erste Ziffer extrahieren erste_ziffer = [ int(str(abs(b))[0]) for b in betraege if b != 0 ] # Erwartete Benford-Verteilung erwartet = { d: np.log10(1 + 1/d) for d in range(1, 10) } # Chi-Quadrat-Test chi2, p_value = chi_quadrat_test( erste_ziffer, erwartet ) return chi2, p_value

Analytisches Werkzeugset

Algorithmen
MethodeEinsatzgebietInsolvenz-Relevanz
Benford's LawZiffernverteilung in BetragsfeldernManipulierte Rechnungen, Scheinbuchungen
Z-Score / IQRStatistische Ausreißer-ErkennungUngewöhnlich hohe Einzelzahlungen
ZeitreihenanalyseTrends und Brüche im ZeitverlaufPlötzliche Umsatzeinbrüche / -spitzen
Clustering (k-Means)Gruppierung ähnlicher TransaktionenIdentifikation atypischer Geschäftspartner
Duplikat-ErkennungFuzzy Matching auf BelegenDoppelzahlungen, Scheinrechnungen
NetzwerkanalyseBeziehungsgeflechte zwischen KontenNahestehende Personen (§ 138 InsO)
Gap-AnalyseLücken in NummernkreisenFehlende Rechnungen, Belegmanipulation

Netzwerkanalyse — § 138 InsO

Graph-AlgorithmenAnfechtung

Warum Graphen?

Verflechtungen zwischen Gemeinschuldner, Geschäftsführern, Gesellschaftern und Geschäftspartnern werden in tabellarischen Daten leicht übersehen.

Ein Graph-Algorithmus erkennt automatisch:

  • Direkte und indirekte Verbindungen
  • Kreisförmige Zahlungsströme
  • Ungewöhnliche Zentralität einzelner Konten
  • Cluster nahestehender Personen
Python import networkx as nx # Zahlungsnetzwerk aufbauen G = nx.DiGraph() for _, row in buchungen.iterrows(): G.add_edge( row["absender"], row["empfaenger"], weight=row["betrag"] ) # Zyklen finden → Ringbuchungen zyklen = list(nx.simple_cycles(G)) # Zentralste Knoten → Schlüsselpersonen zentral = nx.betweenness_centrality(G) verdaechtig = sorted( zentral.items(), key=lambda x: x[1], reverse=True )[:5]
04

Live-Workflow

Von der Frage zur Prüfungsfeststellung — Schritt für Schritt

Konkreter Anwendungsfall

Insolvenzanfechtung
1️⃣

Daten bereitstellen

GDPdU-Export oder CSV der FiBu — Buchungsjournal, Kontenstammdaten, Gesellschafterliste

2️⃣

Frage formulieren

„Gibt es Zahlungen an Gesellschafter in den letzten 12 Monaten vor Antrag, die über dem Durchschnitt liegen?"

3️⃣

LLM generiert & führt aus

Automatisch: Datenimport → Verknüpfung → Filterung → Statistische Analyse → Visualisierung

4️⃣

Ergebnis & Iteration

Tabelle + Grafik + textliche Einordnung. Nachfragen: „Zeige die Gegenkonten dieser Buchungen."

Ergebnis-Interpretation durch das LLM

Mehrwert

Mehr als nur Zahlen

  • Kontextualisierung — Einordnung in §§ 129 ff. InsO
  • Risikobewertung — Priorisierung der Auffälligkeiten
  • Formulierungshilfe — Entwurf für Prüfungsbericht
  • Visualisierung — Automatische Diagramme
  • Querverweise — Verbindungen zwischen Feststellungen

Beispiel-Output des LLM:

„In den 180 Tagen vor Insolvenzantrag wurden 23 Zahlungen an den Gesellschafter-GF M. identifiziert, Gesamtvolumen 187.340 €. Der Durchschnittsbetrag liegt 3,2 Standardabweichungen über dem Median aller Kreditorenzahlungen. 7 Buchungen haben identische Beträge (8.900 €) — mögliche Indizien für § 133 InsO."

Effizienz in der Praxis


95%Weniger Zeitaufwand
für Datenaufbereitung
Iterationen
ohne Mehraufwand
7+Algorithmen
in einem Durchlauf
0Zeilen Code
selbst geschrieben

Der Paradigmenwechsel: Die Prüferin / der Prüfer wird vom Datenhandwerker zum Datendirigenten. Die fachliche Kompetenz bleibt entscheidend — das Werkzeug ändert sich.

05

Grenzen & Verantwortung

Was bleibt Aufgabe des Menschen?

Verantwortungsvoller Einsatz

Wichtig
⚖️

Mensch entscheidet

KI liefert Hinweise — die rechtliche Würdigung trifft der Prüfer

🔒

Datenschutz

§ 30 AO: Steuergeheimnisdaten nicht in Cloud-LLMs. Lokale oder abgesicherte Umgebungen

Verifikation

Jedes LLM-Ergebnis plausibilisieren — Stichproben, Gegenproben, Vier-Augen-Prinzip

Merksatz: KI ist ein Werkzeug, kein Ersatz für steuerliche Urteilskraft. Das LLM findet die Nadel — der Prüfer entscheidet, ob sie relevant ist.

Zusammenfassung

LLM + Code =
Intelligente Prüfung

Das LLM versteht die Frage. Python liefert die Antwort.
Der Prüfer trägt die Verantwortung.


🧠Verstehen
Analysieren
📊Visualisieren
⚖️Entscheiden

Insolvenzsteuer-Fachtagung 2025 · Vielen Dank für Ihre Aufmerksamkeit

StB Michel Braun · WTS, Düsseldorf   |   Stefan Werner · GKBp Land Brandenburg (in nicht dienstlicher Eigenschaft)
Moderation: Prof. Dr. Marc Desens · Universität Leipzig