---
title: "Zeiterfassung für Wirtschaftsprüfer: 4 stille Fehler"
description: "Zeiterfassung für eine Wirtschaftsprüfungskanzlei gebaut: vier stille Fehler. Zu niedrige Summen, falsches Speichern, ein Mandant, der durchsickerte."
url: "https://madsalt.tech/de/blog/time-tracking-for-audit-firms/"
author: "Denys Zaichenko"
language: "de"
published: 2026-10-19
---

# Zeiterfassung für Wirtschaftsprüfer: 4 stille Fehler

Kurz gesagt

Bei der Zeiterfassung einer Wirtschaftsprüfungskanzlei geht es nicht um den Timer. Es geht um zwei Dinge: wer die Stunden welches Mandanten sehen darf und ob die Summen in den Berichten stimmen. Beim Bau eines Trackers für eine Kanzlei habe ich vier Fehler gefunden, die kein Bildschirm zeigte: Berichtssummen, die stillschweigend zu niedrig ausgefallen wären, etwa 30 Aktionen, die "gespeichert" meldeten, obwohl nichts gespeichert wurde, ein vertraulicher Mandant, dessen Existenz über Berichte und Tag-Zähler durchsickerte, und eine abgelehnte Buchung, die eine spätere Freigabe verbergen konnte. Jeden dieser Fehler prüft man in jedem Tool, ob gekauft oder selbst gebaut, in wenigen Minuten.

Ich bin Denys, Full-Stack- und KI-Entwickler. Zwischen Mai und Oktober 2026 ist eine Wirtschaftsprüfungskanzlei von einem Tool, in dem jeder jeden Mandanten öffnen konnte, auf einen Tracker umgestiegen, den ich eigens für sie gebaut habe, in 388 Commits. Die Kanzlei wird hier nicht genannt. Dieser Text richtet sich an Menschen, die eine Kanzlei führen und ihre Werkzeuge auswählen: was eine Wirtschaftsprüfungskanzlei von der Zeiterfassung braucht, welche vier Fehler ich gefunden habe und wie Sie jeden Tracker darauf prüfen.

## Was braucht eine Wirtschaftsprüfungskanzlei von der Zeiterfassung?

Eine Wirtschaftsprüfungskanzlei verkauft Stunden, die Projektzeiterfassung ist daher die Aufzeichnung, auf der das ganze Geschäft ruht. Die Kanzlei, für die ich gebaut habe, brauchte:

- **Stunden je Mandant, Projekt und Aufgabe.** Jede Buchung gehört zu genau einem Auftrag, sodass sich Stunden nach Mandant, Projekt und Person auswerten lassen.
- **Wochenstundenzettel mit Freigabe.** Die Mitarbeitenden reichen die Woche ein, der Projekt-Admin genehmigt oder lehnt jede Buchung ab, und nur genehmigte Stunden zählen.
- **Erinnerungen.** Wer vor der Frist noch einen leeren Stundenzettel hat, bekommt eine E-Mail. Seit September 2026 mahnt sie nur noch fehlende Stunden an und überspringt Personen mit Kapazität null.
- **Ressourcenplanung.** Wer in den kommenden Wochen an welchem Auftrag arbeitet, gemessen an der Kapazität jeder Person.
- **Vertrauliche Mandanten.** Der Inhaber kann einen Mandanten samt Projekten, Aufgaben und Zeiten auf ausgewählte Mitglieder beschränken.
- **Archivieren, nie löschen.** Ein ausgeschiedenes Mitglied wird deaktiviert und anonymisiert, ein abgeschlossenes Projekt archiviert, damit die Historie der Stundenzettel erhalten bleibt.

Rechnungen stellt das Tool nicht aus. Abrechnungsart und Stundenbudgets der Projekte liegen hinter einem eigenen Recht, und die Rechnungsstellung bleibt im Buchhaltungssystem der Kanzlei.

![Eine Woche Stunden, von der Buchung zum Bericht. Stunden erreichen die Berichte erst, wenn der Projekt-Admin sie freigibt. Freigegebene Woche: Mitarbeiter → Woche eingereicht → Projekt-Admin → Freigegeben → Berichte; Abgelehnte Buchung: Mitarbeiter → Woche eingereicht → Projekt-Admin → Zurück, mit Grund.](https://madsalt.tech/charts/de/time-tracking-for-audit-firms-week.svg)

*Abbildung 1. Der Ablauf des Wochenstundenzettels im Tracker der Kanzlei. Eine abgelehnte Buchung geht an die Person zurück, die sie erfasst hat.*

## Wer sollte in einer Wirtschaftsprüfungskanzlei wessen Stunden sehen?

Vor diesem Projekt konnte jeder in der Kanzlei jeden Mandanten und die Stunden aller anderen öffnen. Für eine Wirtschaftsprüfungskanzlei ist das zuerst ein Problem der Vertraulichkeit und erst dann eines der Software: Nicht jedes Mitglied soll jeden Mandanten sehen, und niemand muss die Woche eines Kollegen sehen, außer er genehmigt sie.

Das von der Kanzlei bestätigte Zugriffsmodell sieht so aus:

| Rolle                 | Sieht                                                  | Kann freigeben                           |
| --------------------- | ------------------------------------------------------ | ---------------------------------------- |
| Mitarbeiter           | Nur eigene Stunden                                     | Nichts                                   |
| Projekt-Admin         | Stunden des Teams in den eigenen Projekten             | Die Wochen des Teams in diesen Projekten |
| Inhaber               | Jeden Mandanten, jedes Projekt, jede Person            | Alles                                    |
| Vertraulicher Mandant | Nur für die Mitglieder sichtbar, die der Inhaber wählt | —                                        |

![Wer wessen Stunden sieht. Das von der Kanzlei bestätigte Zugriffsmodell. Die Datenbank setzt es durch, nicht der Bildschirm. Mitarbeiter: Mitarbeiter → Nur eigene Stunden; Projekt-Admin: Projekt-Admin → Team eigener Projekte → Gibt Wochen frei; Inhaber: Inhaber → Jeder Mandant, jede Person; Vertraulicher Mandant: Gesperrter Mandant → Nur gewählte Mitglieder.](https://madsalt.tech/charts/de/time-tracking-for-audit-firms-roles.svg)

*Abbildung 2. Standardrollen im Tracker der Kanzlei. Der Inhaber kann jede Rolle in einer Rechtematrix ändern.*

Der Inhaber gestaltet jede Rolle in einer Matrix aus Kästchen, Bereich gegen Aktion, und jede Regel liegt in der Datenbank statt in den Bildschirmen, sodass eine Seite nicht zeigen kann, was die Datenbank verweigert. Jedes Kästchen wurde vor dem Release an einer Kopie der Produktion getestet; wie und was dieser Test fand, steht in [Supabase RLS testen](https://madsalt.tech/de/blog/how-to-test-supabase-rls/).

Eine Frage konnte die Matrix nicht beantworten, sie kam von der Kanzlei selbst. Im Juni 2026 sah ein Mitglied mit der am stärksten eingeschränkten Rolle in der Ressourcenplanung andere Mitglieder und deren Projekte und hatte erwartet, nur sich selbst und einen Kollegen zu sehen. Soll ein eingeschränktes Mitglied die Personen in den eigenen Projekten sehen? Die Regel, auf die wir uns geeinigt haben: ja, nur in gemeinsamen Projekten, und die Kapazität und Abwesenheiten anderer bleiben verborgen.

Wie kommt man zu einem Zugriffsmodell, dem eine Kanzlei wirklich zustimmt? Ich habe den Kunden nicht gebeten, es aus dem Gedächtnis zu beschreiben. Ich habe einen Fragebogen mit 72 Fragen in 9 Abschnitten geschickt, die Rechteraster bereits so angekreuzt, wie das Live-System am 7. August 2026 arbeitete. Der Kunde korrigierte, was falsch war, und jede geänderte Zelle wurde markiert. Menschen korrigieren die Wirklichkeit besser, als sie sie beschreiben.

## Fehler 1: Berichtssummen wären zu niedrig ausgefallen

Die Seite Stundenzettel hat die Ansichten "Dieses Quartal" und "Jahr bis heute" für die ganze Kanzlei. Sie luden alle Zeitbuchungen des Zeitraums in einer einzigen Anfrage. Die Datenbank-API hinter der App liefert höchstens 1.000 Zeilen pro Anfrage, und wenn sie bei 1.000 stoppt, löst sie keinen Fehler aus. Sie gibt einfach die ersten 1.000 zurück.

Supabase dokumentiert diesen Standard: [Projekte liefern höchstens 1.000 Zeilen](https://supabase.com/docs/reference/javascript/select), solange das Limit in den API-Einstellungen nicht geändert wird.

Sobald die Kanzlei in einem Zeitraum über 1.000 Buchungen kam, wären Mitglieder und Wochen aus der Ansicht gefallen, und die Summen wären zu niedrig ausgefallen, ohne dass etwas auf dem Bildschirm darauf hinwies. Bei etwa 70 Buchungen pro Woche hätte die Ansicht "Jahr bis heute" um Mitte November 2026 die 1.000 Buchungen überschritten. Ein Code-Audit am 24. September 2026 fand es, bevor es geschah. Die Korrektur liest jeden Zeitraum seitenweise, und jeder Berichtsexport blättert jetzt genauso.

**So prüfen Sie Ihr Tool:** Wählen Sie einen langen Zeitraum, exportieren Sie die Rohbuchungen, addieren Sie sie selbst und vergleichen Sie mit der Berichtssumme. Weichen beide ab, schneidet der Bericht Zeilen ab.

## Fehler 2: "Gespeichert", obwohl nichts gespeichert wurde

Wenn die Datenbank eine Änderung wegen eines Rechts ablehnt oder weil eine Regel die Zwei-Faktor-Anmeldung verlangt, kann sie ohne jeden Fehler mit "0 Zeilen geändert" antworten. Etwa 30 Stellen in der App, die Datensätze ändern oder löschen, lasen diese Antwort als Erfolg und zeigten "gespeichert". Die Person macht weiter. Die Änderung ist nie passiert.

Die Korrektur lautet: im Zweifel ablehnen. Ein Schreibvorgang, der keine Zeile trifft, ist ein Fehler und wird als solcher angezeigt, und ein Test prüft jetzt, dass jeder Schreibpfad ihn so behandelt.

**So prüfen Sie Ihr Tool:** Melden Sie sich als Mitglied ohne Bearbeitungsrecht an, versuchen Sie etwas zu bearbeiten und laden Sie die Seite neu. Haben Sie "gespeichert" gesehen und der alte Wert ist zurück, lügt das Tool beim Speichern.

## Fehler 3: Ein vertraulicher Mandant sickerte durch Berichte

Manche Aufträge kennen nur die Personen, die daran arbeiten. Seit dem 24. August 2026 kann der Inhaber einen Mandanten auf namentlich genannte Mitglieder beschränken. Alle anderen bekommen für diesen Mandanten, seine Projekte, Aufgaben und Zeiten nichts zurück. Der Inhaber hat immer Zugriff, und dieser Zugriff wird daraus abgeleitet, wer heute die Inhaberrolle hat, nicht gespeichert, er wandert also mit der Rolle.

Den Mandanten aus der Mandantenliste auszublenden war der leichte Teil. Die Lecks lagen in den Seitentüren. Eine Prüfung am 8. September 2026 fand:

- **Drei Berichtsfunktionen ignorierten die Beschränkung**, weil sie mit Rechten laufen, die die normalen Zugriffsregeln umgehen, sodass die Stunden eines vertraulichen Mandanten in Berichten auftauchen konnten;
- **Zähler der Tag-Nutzung** in der Admin-Übersicht der Tags zählten die Projekte und Aufgaben des vertraulichen Mandanten mit, was verriet, dass der Auftrag existierte und wie groß er etwa war;
- **Fehlermeldungen unterschieden**: Der Versuch, einen echten, aber verborgenen Datensatz zu ändern, ergab "forbidden", bei einem erfundenen "not found", sodass jeder prüfen konnte, ob ein vertraulicher Mandant existiert.

Alle drei wenden jetzt dieselbe Prüfung an wie die Haupttabellen, und ein verborgener Datensatz sieht genau aus wie ein fehlender. Ein Projekt oder eine Buchung aus einem vertraulichen Mandanten herauszuverschieben braucht außerdem den Inhaber oder ein eigenes Recht, und jede solche Verschiebung wird protokolliert.

**So prüfen Sie Ihr Tool:** Beschränken Sie einen Mandanten auf eine einzige Person. Führen Sie dann als jemand anderes jeden Bericht aus, sehen Sie sich jeden Zähler und jeden Filter an, suchen Sie nach dem Namen des Mandanten und öffnen Sie einen direkten Link auf eines seiner Projekte. Sie sollten keine Spur finden, auch nicht in der Fehlermeldung.

## Fehler 4: Eine Ablehnung konnte durch eine spätere Freigabe verschwinden

Eine Woche kann Buchungen in mehreren Projekten haben, also genehmigen mehrere Personen. Lehnte ein Projekt-Admin eine Buchung ab und genehmigte ein anderer später seinen Teil, konnte die spätere Freigabe die ganze Woche abschließen und die Ablehnung verdecken. Das Verschieben von Buchungen zwischen Aufgaben oder das Wiedereröffnen einer Woche konnte sie auf dieselbe Weise verbergen.

Am 24. September 2026 wurde die Freigabelogik so geändert, dass eine Woche abgelehnt bleibt, solange eine abgelehnte Buchung noch aktiv ist, und ein Projekt-Admin eine abgelehnte Buchung nur archivieren kann, wenn er sie selbst abgelehnt hat. Eine Datenbankprobe spielt jetzt jeden dieser Fälle durch, und jeder muss PASS lauten.

**So prüfen Sie Ihr Tool:** Nehmen Sie zwei Genehmigende für eine Woche. Lehnen Sie als Erster eine Buchung ab, genehmigen Sie als Zweiter alles andere und sehen Sie nach, in welchem Zustand die Woche endet.

## Zeiterfassung für Wirtschaftsprüfer kaufen oder bauen?

Erst kaufen. Toggl, BigTime, ZenWorkflow und ähnliche Tools decken Timer, Wochenfreigaben und Mandantenabrechnung bereits ab, und Sie können diese Woche mit einem starten. Ein eigener Tracker lohnt sich, wenn die Kanzlei Regeln hat, die die Produkte nicht ausdrücken können, etwa vertrauliche Mandanten, die nur für namentlich genannte Mitglieder sichtbar sind, die Freigabe durch mehrere Projekt-Admins pro Woche oder Rollen, die der Inhaber Kästchen für Kästchen formen will.

Wie auch immer Sie sich entscheiden: Die vier Prüfungen oben dauern einen Nachmittag und sagen mehr als eine Funktionsliste. Jede Produktseite verspricht "granulare Berechtigungen". Wenige zeigen, was passiert, wenn man ein Kästchen abwählt.

## Grenzen dieses Berichts

- **Eine Kanzlei.** Das Zugriffsmodell, das Volumen von etwa 70 Buchungen pro Woche und der Fragebogen stammen aus einer einzigen Kanzlei.
- **Fehler 1 wurde abgefangen, bevor er auftrat.** Das Datum Mitte November ist eine Hochrechnung aus der Buchungsrate der Kanzlei, kein gemessener Vorfall.
- **Keine Rechnungsstellung.** Der Tracker führt Stunden, Abrechnungsart und Stundenbudgets, stellt Mandanten aber nichts in Rechnung, daher kann ich zu Abläufen von der Zeit bis zur Rechnung nichts sagen.

Die Zugriffsregeln hier sind Row Level Security von Postgres. Zwei Lücken, die eine Rollenmatrix nicht erfasst, habe ich separat beschrieben: [ein Nutzer, der zu zwei Organisationen gehört](https://madsalt.tech/de/notes/supabase-rls-user-in-two-organizations/) und [ein IF, das bei NULL offen bleibt](https://madsalt.tech/de/notes/plpgsql-if-not-null-fails-open/). Der Bau selbst steht in der [Fallstudie zur Zeiterfassung für eine Wirtschaftsprüfungsgesellschaft](https://madsalt.tech/de/work/audit-firm-time-tracking/), und diese Art von Arbeit gehört zu [internen Tools und Dashboards](https://madsalt.tech/de/services/internal-tools-dashboards/).

Sie wählen oder bauen eine Zeiterfassung für Ihre Kanzlei?

Gern tausche ich mich zu Zugriffsregeln und Freigaben aus. Ohne Verkaufsgespräch.

[Kontakt aufnehmen](https://madsalt.tech/de/#contact)
