Whistleblower — Hinweisgebersystem
HinSchG-konformes Hinweisgebersystem fuer anonyme und namentliche Meldungen, sichere Fallbearbeitung und automatische Fristenueberwachung.
Gesetzliche Grundlage
Hinweisgeberschutzgesetz (HinSchG)
Das Hinweisgeberschutzgesetz (HinSchG) setzt die EU-Whistleblowing-Richtlinie (EU) 2019/1937 in deutsches Recht um. Es ist seit dem 2. Juli 2023 in Kraft.
| Datum |
Pflicht |
| 02.07.2023 |
Inkrafttreten fuer Unternehmen ab 250 Beschaeftigten |
| 17.12.2023 |
Erweiterung auf Unternehmen ab 50 Beschaeftigten (ss 12 HinSchG) |
Sachlicher Anwendungsbereich (ss 2 HinSchG)
Das Gesetz schuetzt Hinweisgeber, die Informationen ueber Verstoesse melden, die unter anderem folgende Bereiche betreffen:
- Strafrecht — Straftaten nach StGB und Nebenstrafrecht
- Datenschutz — Verstoesse gegen DSGVO und BDSG
- Geldwaesche — Verstoesse gegen das Geldwaeschegesetz (GwG)
- Produktsicherheit — Verstoesse gegen Produktsicherheitsvorschriften
- Umweltschutz — Verstoesse gegen Umweltauflagen und -gesetze
- Arbeitsschutz — Verstoesse gegen Arbeitnehmerrechte und Arbeitsschutzvorschriften
- Lebensmittelsicherheit — Verstoesse gegen lebensmittelrechtliche Vorgaben
- Wettbewerbs- und Kartellrecht — Unlauterer Wettbewerb, Marktmanipulation
- Verbraucherschutz — Verstoesse gegen Verbraucherschutzvorschriften
- Steuerrecht — Steuerverstoesse bei Unternehmen
Geschuetzte Personengruppen (ss 1 HinSchG)
- Arbeitnehmerinnen und Arbeitnehmer
- Beamtinnen und Beamte
- Auszubildende und Praktikanten
- Freiwillige und ehrenamtlich Taetige
- Selbststaendige und Anteilseigner
- Mitglieder von Leitungs- und Aufsichtsorganen
- Personen, die im Rahmen einer Bewerbung Informationen erlangt haben
Fristen und Pflichten
| Pflicht |
Frist |
Rechtsgrundlage |
| Eingangsbestaetigung |
7 Tage nach Meldungseingang |
ss 17 Abs. 1 S. 2 HinSchG |
| Rueckmeldung ueber Folgemaßnahmen |
3 Monate nach Eingangsbestaetigung |
ss 17 Abs. 2 HinSchG |
| Aufbewahrung der Dokumentation |
3 Jahre nach Abschluss des Verfahrens |
ss 11 Abs. 5 HinSchG |
Schutz des Hinweisgebers
| Schutzmechanismus |
Rechtsgrundlage |
Beschreibung |
| Repressalienverbot |
ss 36 HinSchG |
Jede Benachteiligung wegen einer Meldung ist verboten |
| Beweislastumkehr |
ss 36 Abs. 2 HinSchG |
Arbeitgeber muss beweisen, dass Maßnahmen nicht mit Meldung zusammenhaengen |
| Schadensersatz |
ss 37 HinSchG |
Hinweisgeber hat Anspruch auf Ersatz des erlittenen Schadens |
| Vertraulichkeit |
ss 8 HinSchG |
Identitaet darf nur mit Einwilligung oder bei gesetzlicher Pflicht offengelegt werden |
Sanktionen (ss 40 HinSchG)
| Verstoß |
Bussgeld |
| Keine interne Meldestelle eingerichtet |
Bis zu 20.000 EUR |
| Behinderung einer Meldung |
Bis zu 50.000 EUR |
| Verstoß gegen Vertraulichkeitsgebot |
Bis zu 50.000 EUR |
| Repressalien gegen Hinweisgeber |
Bis zu 50.000 EUR |
Features
- Anonyme und namentliche Meldungen — Sichere Eingabe von Hinweisen, wahlweise anonym oder mit Kontaktdaten
- Mehrstufiger Fallbearbeitungs-Workflow — Neu → Bestaetigt → In Pruefung → Untersuchung → Massnahmen → Abgeschlossen
- Automatisches Fristen-Management — Ueberwachung der 7-Tage- und 3-Monate-Fristen gemaess ss 17 HinSchG mit Warnungen bei drohender Ueberschreitung
- Anonymer Kommunikationskanal — Sicherer Austausch zwischen Hinweisgeber und Ombudsperson ohne Identitaetspreisgabe
- Massnahmen-Tracking — Dokumentation und Nachverfolgung von Folgemaßnahmen
- Prioritaetsstufen — Klassifizierung nach Niedrig, Normal, Hoch, Kritisch
- Audit-Trail — Lueckenlose, revisionssichere Dokumentation aller Bearbeitungsschritte
- Kategorisierung — Vordefinierte Meldekategorien (Korruption, Betrug, Datenschutz, Diskriminierung, Umwelt, Wettbewerb, Produktsicherheit, Steuerhinterziehung)
- Statistik-Dashboard — Ueberblick ueber Meldungsaufkommen, Bearbeitungsstand und Fristeneinhaltung
Architektur
Bearbeitungs-Workflow
Komponenten
| Komponente |
Technologie |
Beschreibung |
| Frontend (Admin) |
Next.js / React |
SDK-Seite unter /sdk/whistleblower mit Tabs: Uebersicht, Neue Meldungen, In Untersuchung, Abgeschlossen, Einstellungen |
| API-Proxy |
Next.js API Route |
/api/sdk/v1/whistleblower/[[...path]]/route.ts — Proxy zum Backend |
| Backend-Handlers |
Go / Gin |
whistleblower_handlers.go — REST API fuer Meldungen, Nachrichten, Statistiken |
| Datenschicht |
Go |
store.go — PostgreSQL-Operationen, prepared statements |
| Datenmodell |
Go |
models.go — Structs fuer Report, Message, Measure, AuditEntry |
| TypeScript Types |
TypeScript |
lib/sdk/whistleblower/types.ts — Frontend-Typen, Deadline-Utilities |
| API Client |
TypeScript |
lib/sdk/whistleblower/api.ts — SDK-API-Aufrufe |
| DB-Schema |
SQL |
migrations/009_whistleblower_schema.sql |
API Endpoints
Alle unter /api/v1/whistleblower/, benoetigen X-Tenant-ID Header.
Admin-Endpoints
| Method |
Endpoint |
Beschreibung |
| GET |
/reports |
Meldungen auflisten (mit Filter und Paginierung) |
| POST |
/reports |
Neue Meldung erfassen |
| GET |
/reports/{id} |
Meldungsdetails inkl. Nachrichten, Massnahmen, Audit-Trail |
| PUT |
/reports/{id} |
Meldung aktualisieren (Status, Prioritaet, Zuweisung) |
| DELETE |
/reports/{id} |
Meldung loeschen |
| POST |
/reports/{id}/messages |
Nachricht an Hinweisgeber senden (Ombudsperson-Rolle) |
| GET |
/reports/{id}/messages |
Nachrichten-Verlauf abrufen |
| GET |
/statistics |
Statistiken (Gesamt, nach Kategorie, nach Status, ueberfaellige) |
Oeffentliche Endpoints (fuer Hinweisgeber)
| Method |
Endpoint |
Beschreibung |
| POST |
/public/reports |
Anonyme/namentliche Meldung einreichen |
| GET |
/public/reports/{accessKey} |
Meldungsstatus mit Zugangscode abfragen |
| POST |
/public/reports/{accessKey}/messages |
Nachricht als Hinweisgeber senden |
Frontend
SDK Admin-Seite (/sdk/whistleblower)
Die Seite bietet fuenf Tabs:
| Tab |
Inhalt |
| Uebersicht |
Statistik-Cards, HinSchG-Info-Box mit Fristen und Anwendungsbereich, Fristenwarnungen, alle Meldungen |
| Neue Meldungen |
Gefilterte Ansicht: nur Status "Neu" — Eingangsbestaetigung steht aus |
| In Untersuchung |
Gefilterte Ansicht: Status "Bestaetigt", "In Pruefung", "Untersuchung", "Massnahmen" |
| Abgeschlossen |
Gefilterte Ansicht: Status "Abgeschlossen" und "Abgelehnt" |
| Einstellungen |
Konfiguration (in spaeteren Versionen) |
Funktionen
- Meldung erfassen: Modal-Dialog fuer Titel, Beschreibung, Kategorie, Prioritaet, anonym/namentlich
- Falldetail-Drawer: Seitenleiste mit Beschreibung, Badges, Status-Transitions, Zuweisungen, Kommentare, Nachrichten-Verlauf
- Filter: Kategorie, Status, Prioritaet — kombinierbar
- Sortierung: Ueberfaellige Meldungen zuerst, dann nach Prioritaet, dann nach Datum
- Fristenwarnungen: Rote Alerts bei ueberschrittenen 7-Tage- oder 3-Monate-Fristen
Datenbank
Schema (Migration 009_whistleblower_schema.sql)
Tabelle: whistleblower_reports
| Spalte |
Typ |
Beschreibung |
id |
UUID |
Primaerschluessel |
tenant_id |
UUID |
Mandanten-Zuordnung |
reference_number |
VARCHAR |
Referenznummer (z.B. "WB-2026-000042") |
access_key |
VARCHAR |
Anonymer Zugangscode (XXXX-XXXX-XXXX) |
category |
VARCHAR |
Meldekategorie |
status |
VARCHAR |
Bearbeitungsstatus |
priority |
VARCHAR |
Prioritaetsstufe |
title |
VARCHAR |
Meldungstitel |
description |
TEXT |
Detailbeschreibung |
is_anonymous |
BOOLEAN |
Anonyme Meldung |
reporter_name |
VARCHAR |
Name (optional) |
reporter_email |
VARCHAR |
E-Mail (optional) |
assigned_to |
VARCHAR |
Zustaendige Person |
received_at |
TIMESTAMP |
Eingangszeitpunkt |
acknowledged_at |
TIMESTAMP |
Eingangsbestaetigung |
deadline_acknowledgment |
TIMESTAMP |
7-Tage-Frist (automatisch berechnet) |
deadline_feedback |
TIMESTAMP |
3-Monate-Frist (automatisch berechnet) |
closed_at |
TIMESTAMP |
Abschlusszeitpunkt |
Tabelle: whistleblower_messages
Anonymer Kommunikationskanal zwischen Hinweisgeber und Ombudsperson.
Tabelle: whistleblower_measures
Dokumentation von Folgemaßnahmen mit Status-Tracking (geplant, in Bearbeitung, abgeschlossen).
Tabelle: whistleblower_audit_trail
Lueckenlose, revisionssichere Protokollierung aller Bearbeitungsschritte.
Meldekategorien
| Kategorie |
Beschreibung |
Beispiele |
| Korruption |
Bestechung, Vorteilsnahme |
Schmiergeldzahlungen, Kickback-Vereinbarungen |
| Betrug |
Vermoegensdelikte |
Urkundenfaelschung, Bilanzbetrug |
| Datenschutz |
DSGVO/BDSG-Verstoesse |
Unerlaubte Datenweitergabe, fehlende Einwilligung |
| Diskriminierung |
Benachteiligung |
Mobbing, sexuelle Belaestigung, AGG-Verstoesse |
| Umwelt |
Umweltvergehen |
Illegale Entsorgung, Emissionsverstoesse |
| Wettbewerb |
Kartellrecht |
Preisabsprachen, Marktmanipulation |
| Produktsicherheit |
Sicherheitsmaengel |
Mangelhafte Produkte, fehlende Warnhinweise |
| Steuerhinterziehung |
Steuerverstoesse |
Steuerhinterziehung, illegale Steuergestaltung |
| Sonstiges |
Weitere Verstoesse |
Interne Richtlinienverstoesse |
Fristen-Tracking
Das System berechnet Fristen automatisch und warnt bei drohender Ueberschreitung:
| Frist |
Berechnung |
Warnstufe |
| 7-Tage-Eingangsbestaetigung |
received_at + 7 Tage |
Orange ab 2 Tage vorher, Rot bei Ueberschreitung |
| 3-Monate-Rueckmeldung |
acknowledged_at + 3 Monate |
Orange ab 14 Tage vorher, Rot bei Ueberschreitung |
Utility-Funktionen in types.ts:
getDaysUntilAcknowledgment(report) — Verbleibende Tage bis Eingangsbestaetigung
getDaysUntilFeedback(report) — Verbleibende Tage bis Rueckmeldungsfrist
isAcknowledgmentOverdue(report) — Prueft 7-Tage-Frist
isFeedbackOverdue(report) — Prueft 3-Monate-Frist
generateAccessKey() — Erzeugt Zugangscode im Format XXXX-XXXX-XXXX
Datei-Referenz
| Datei |
Beschreibung |
admin-compliance/app/sdk/whistleblower/page.tsx |
Frontend-Seite (Tabs, Filter, Modals, Detail-Drawer) |
admin-compliance/app/api/sdk/v1/whistleblower/[[...path]]/route.ts |
API-Proxy zum Backend |
admin-compliance/lib/sdk/whistleblower/types.ts |
TypeScript-Typen, Enums, Deadline-Utilities |
admin-compliance/lib/sdk/whistleblower/api.ts |
API-Client fuer SDK-Backend |
ai-compliance-sdk/internal/whistleblower/models.go |
Go-Datenmodelle |
ai-compliance-sdk/internal/whistleblower/store.go |
PostgreSQL-Store (CRUD, Queries) |
ai-compliance-sdk/internal/api/handlers/whistleblower_handlers.go |
REST-API-Handler |
ai-compliance-sdk/migrations/009_whistleblower_schema.sql |
Datenbankschema |