Ausgefüllte Stundenzettel automatisch einlesen (OCR)

Wenn auf deiner Veranstaltung auf Papier gearbeitet wird, willst du die ausgefüllten Stundenzettel am Ende schnell und sauber ins System bekommen — ohne jede Zeile von Hand abzutippen. Mit der Stundenzettel-Erkennung lädst du die eingescannten Zettel als PDF hoch, festiware liest die handschriftlich eingetragenen IST-Zeiten aus, ordnet sie den passenden Schichten zu und legt sie dir als Vorschläge zur Prüfung vor. Du kontrollierst jeden Zettel gegen das Foto, korrigierst bei Bedarf und gibst die Zeiten frei.

Diese Funktion ergänzt die normale Zeiterfassung. Wie deine Mitwirkenden ihre Zeiten selbst im Portal einreichen und wie du sie bestätigst, liest du unter Zeiterfassung: IST-Zeiten im Mitwirkendenportal erfassen und bestätigen.

Voraussetzungen

  • Die Stundenzettel-Erkennung ist ein Zusatzmodul im Professional-Tarif. Möchtest du sie nutzen, wende dich an den festiware-Support, damit sie für deine Instanz freigeschaltet wird.
  • In deiner festiware-Instanz ist ein Mistral-API-Schlüssel hinterlegt. Über den KI-Dienst Mistral läuft die Schrifterkennung.
  • Es besteht ein Auftragsverarbeitungsvertrag (AVV) mit Mistral. Ohne AVV und hinterlegten Schlüssel ist die Erkennung nicht nutzbar.
  • Die Zeiterfassung ist für dein Projekt aktiv.
  • Du darfst Schichten verwalten — dieselbe Berechtigung, die du zum Bestätigen und Ablehnen von Zeiten brauchst. Ohne dieses Recht ist die Funktion für dich ausgeblendet.
  • Deine Stundenzettel wurden aus festiware gedruckt und tragen die aufgedruckten QR-Codes. Über sie erkennt das System, zu welcher Person und zu welcher Schicht ein Zettel gehört.

Stundenzettel drucken

Drucke die Stundenzettel wie gewohnt aus festiware. Wähle in der Personen-Übersicht die betreffenden Personen aus und starte die Aktion Stundenzettel drucken (PDF).

Aktion „Stundenzettel drucken" in der Personen-Übersicht

Jeder Zettel trägt oben links einen QR-Code für die Person und pro Zeile einen kleinen QR-Code für die Schicht (unter dem Code steht die Job-Nummer, z. B. J#31667). Diese Codes sind wichtig: Nur damit ordnet die Erkennung den Zettel später sicher der richtigen Person und Schicht zu.

Achte auf einen sauberen, geraden Scan bei guter Beleuchtung. Je besser das Foto, desto zuverlässiger werden die handschriftlichen Zeiten erkannt.

Zettel, die vor August 2026 gedruckt wurden: Auf ihnen wurden die kleinen Zeilen-QR-Codes zu klein gedruckt und sind nicht lesbar. Die Erkennung funktioniert auf diesen Zetteln trotzdem — sie ordnet die Zeilen dann über die gedruckte Job-Nummer und das geplante Datum zu, was etwas mehr Prüfaufwand bedeutet. Neu gedruckte Zettel tragen die Codes in voller Größe. Wenn du ohnehin nachdruckst, lohnt es sich also.

Damit hast du die Zettel in der Hand, die deine Mitwirkenden ausfüllen und unterschreiben.

Ausgefüllte Zettel hochladen

Die ausgefüllten Zettel scannst du als ein PDF ein — mehrere Seiten und verschiedene Personen dürfen in einer Datei sein.

  1. Öffne die Schichten-Übersicht.
  2. Klicke oben rechts auf das Aktionen-Menü (…) und wähle Stundenzettel-Scans hochladen (OCR).
  3. Wähle das PDF aus (max. 20 MB) und bestätige.

Upload-Dialog für Stundenzettel-Scans

Du musst vorher keine Schichten auswählen — das PDF identifiziert sich über die QR-Codes selbst. Die Verarbeitung läuft im Hintergrund; die erkannten Zeiten erscheinen anschließend als Vorschläge.

Was im Hintergrund passiert

festiware zerlegt das PDF in einzelne Seiten und liest jede Seite aus.

Wer, und welche Schicht

Zuerst wird bestimmt, zu wem eine Seite gehört: über den Kopf-QR-Code, oder über die Zeilen-Codes, wenn der Kopf unlesbar ist. Nennt eine Seite ihre Person auf keinem dieser Wege — typisch für die zweite Seite eines mehrseitigen Zettels —, übernimmt festiware die Person der Vorseite. Solche Seiten werden dir aber immer zur Prüfung vorgelegt und nie automatisch bestätigt: Eine geerbte Person ist eine Annahme, keine Feststellung.

Anschließend wird jede Zeile einer Schicht zugeordnet. Welchen Weg das System dabei genommen hat, siehst du im Prüf-Fenster rechts oben an jeder Zeile:

Anzeige Bedeutung
mini_qr Über den kleinen QR-Code der Zeile — der sicherste Weg.
ocr_b Über die gedruckte Job-Nummer (J#…) unter dem Code, gelesen als Text.
date_soll Über das geplante Datum der Schicht — greift, wenn Code und Nummer nicht lesbar waren.
manual Du hast die Zeile im Prüf-Fenster selbst zugeordnet.

Zeiten und Konfidenz

  • Die handschriftlichen IST-Zeiten (Von, Bis, Pause) werden erkannt. Unsichere Werte werden nicht geraten, sondern bleiben leer.
  • Zu jeder Zeile ermittelt das System eine Konfidenz — also wie sicher die Erkennung ist.
  • Ein zusätzlicher Plausibilitäts-Check erhöht die Sicherheit: Ergibt Ende minus Beginn minus Pause genau die eingetragene Stundenzahl, ist die Zeile in sich stimmig und wird mit 0,99 als besonders sicher gewertet (Nachtschichten über Mitternacht werden dabei korrekt berücksichtigt).
  • Die erkannte Pause wird auf der Schicht gespeichert und von der erfassten Dauer abgezogen. Die Stunden, die du später in der Schichtübersicht und in Auswertungen siehst, sind also Netto-Zeiten.

Was automatisch übernommen wird

Eine Zeile wird nur dann ohne dein Zutun übernommen und freigegeben, wenn beide Bedingungen erfüllt sind:

  1. Die Konfidenz für Beginn und Ende liegt bei mindestens 0,85.
  2. Die Seite nennt ihre Person selbst — über den Kopf-QR-Code oder über die Zeilen-Codes.

Alles andere — unsichere, widersprüchliche, nicht zuordenbare Seiten und Seiten mit geerbter Person — wird für deine Prüfung zurückgehalten.

Warum die zweite Bedingung: Ohne sie könnte eine Folgeseite, deren Kopf-Code nicht lesbar war, die Zeiten einer fremden Person zugeschrieben bekommen — und zwar automatisch bestätigt, also ohne dass es jemandem auffällt. Seitdem gilt: Wer nicht sicher zugeordnet ist, wird gefragt.

Scans prüfen und freigeben

Die hochgeladenen Zettel findest du in der Übersicht Stundenzettel-Scans. Jede Zeile zeigt die Person, die Seite, den OCR-Status, die Konfidenz und zwei Spalten, die dir das Nacharbeiten erleichtern:

  • Nicht erkannt — wie viele Zeilen des Zettels keiner Schicht zugeordnet werden konnten. Steht hier eine Zahl, sind auf dem Papier mehr Einträge als im Prüf-Fenster: Genau diese Zeilen musst du von Hand nacherfassen.
  • Überprüft (und Überprüft von in der Detailansicht) — wann und von wem die Seite durchgesehen wurde. Ein Zettel kann nämlich vollständig automatisch bestätigt und trotzdem von niemandem angesehen worden sein; diese Spalte trennt beides.

Übersicht der Stundenzettel-Scans mit Status und Konfidenz

Zum Eingrenzen stehen dir mehrere Filter zur Verfügung: Prüf-Status (etwa Zu prüfen), Upload-Stapel (ein einzelner Upload), Hochgeladen (Zeitraum), Offene Vorschläge, Überprüft sowie Personentyp, Bereich und Team.

Öffne einen Scan — im Detail siehst du den Beleg, also das hochgeladene Foto.

Detailansicht eines Scans mit Belegbild

Starte nun über das Aktionen-Menü die Aktion Scan prüfen.

Aktionen-Menü mit der Aktion „Scan prüfen"

Es öffnet sich ein Fenster mit dem Beleg-Bild und einer Zeile pro erkanntem Eintrag. Für jede Zeile kannst du:

  • die Person ändern, falls sie falsch zugeordnet wurde,
  • die Schicht wechseln,
  • die Zeiten (Von, Bis, Pause) anpassen,
  • die Zeile annehmen oder ablehnen,
  • die Schicht als nicht erschienen melden.

Prüf-Fenster mit einer Zeile pro erkanntem Eintrag

Um die Person zu wechseln, klicke neben Person auf ändern und tippe den Namen in das Feld Person suchen …. Groß- und Kleinschreibung spielt keine Rolle, und du kannst auch den vollen Namen eingeben. Wähle anschließend unter Schicht die passende Schicht — die Liste lädt automatisch die Schichten der neu gewählten Person.

Unter den Zeitfeldern zeigt festiware dir die daraus entstehende Netto-Zeit — also Bis minus Von minus Pause. Änderst du einen Wert, rechnet sich die Anzeige sofort mit. So siehst du vor dem Übernehmen, welche Stundenzahl tatsächlich gebucht wird.

Vergleiche die Werte direkt mit dem Beleg und klicke auf Übernehmen. Deine Entscheidungen werden dabei gemeinsam gespeichert: Beanstandet festiware eine Zeile, wird der ganze Vorgang zurückgenommen und nichts geschrieben — du korrigierst die eine Zeile und übernimmst erneut, ohne dass ein Teil des Zettels schon gebucht wäre.

Über das Feld Danach öffnen steuerst du, wie es weitergeht: Nächsten Scan, Nächsten fraglichen Scan oder Nichts öffnen. festiware springt dabei in der Reihenfolge des Upload-Stapels weiter und überspringt Seiten, die du bereits überprüft hast — so arbeitest du einen Stapel von vorn nach hinten durch, ohne denselben Zettel zweimal in der Hand zu haben.

Annehmen, ablehnen, nicht erschienen oder unverändert lassen

  • Annehmen: Die — bei Bedarf korrigierten — Zeiten werden auf die Schicht geschrieben und direkt freigegeben.
  • Ablehnen: Der Vorschlag wird verworfen, es werden keine Zeiten geschrieben. Die Schicht selbst bleibt, wie sie war, also weiter offen. Der gescannte Beleg bleibt erhalten.
  • Nicht erschienen: Die Schicht wird als abgelehnt gespeichert und fällt aus der Abrechnung. Zeiten musst du dafür nicht angeben (siehe nächster Abschnitt).
  • Unverändert lassen: Zeilen zu Schichten, deren Zeiten schon feststehen, bietet festiware nicht zum Annehmen an. Sie bleiben unangetastet und zählen weder als Annahme noch als Ablehnung.

Nach dem Übernehmen meldet festiware dir, wie viele Zeilen angenommen, abgelehnt und unverändert geblieben sind. „Nicht erschienen" zählt dabei zu den Ablehnungen — beides bedeutet, dass diese Stunden nicht gebucht werden.

An die mitwirkende Person geht bei keiner dieser Entscheidungen eine E-Mail. Du überträgst hier den von ihr selbst unterschriebenen Papierzettel, es gibt also nichts anzukündigen. Möchte dein Team über abgelehnte Zeiten informiert werden, richtet ihr euch dafür ein Ereignis-Abonnement ein — das geht an eure Koordination im Backend.

Damit sind die geprüften Zeiten übernommen und erscheinen in der Stundenübersicht der jeweiligen Person.

Leere Zettel: Personen, die nicht gekommen sind

Ein leerer Stundenzettel heißt in der Regel: Die Person ist nicht zur Arbeit erschienen. Dafür gibt es an jeder Zeile die Schaltfläche Nicht erschienen.

Die Schicht wird damit auf Abgelehnt gesetzt und fließt nicht in die Abrechnung — in Auswertungen und im Stunden-Export zählen ausschließlich bestätigte Schichten. Zeiten brauchst du nicht einzutragen; das ist der Sinn der Schaltfläche. Als Begründung hinterlegt festiware automatisch einen internen Hinweis, den nur dein Team sieht.

Nicht erschienen steht dir bei jeder Zeile zur Verfügung — auch bei einer Schicht, deren Zeiten die Erkennung schon automatisch bestätigt hat. Genau das ist der Weg, eine irrtümlich freigegebene Schicht wieder zu schließen.

Brauchst du eine eigene Begründung oder willst du viele Schichten auf einmal ablehnen, nutze die Aktion Zeiterfassung ablehnen in der Schichten-Übersicht. Dort ist der Ablehnungsgrund ein Freitextfeld und du kannst mehrere Schichten gleichzeitig auswählen.

Bereits bestätigte Schichten nachbearbeiten

Manche Zeilen betreffen Schichten, deren Zeiten schon feststehen — etwa weil die Erkennung sie wegen hoher Konfidenz automatisch übernommen hat oder weil die Person ihre Zeiten vorher selbst im Portal eingereicht hat. Solche Zeilen erkennst du im Prüf-Fenster an dem Hinweis Diese Schicht wurde automatisch bestätigt. Annehmen und Ablehnen bietet festiware hier nicht an: An einer freigegebenen Schicht gibt es nichts mehr anzunehmen. Zur Verfügung stehen dir Nachbearbeiten und Nicht erschienen.

Stellst du beim Vergleich mit dem Beleg fest, dass die Zeiten nicht stimmen, klicke auf Nachbearbeiten. Die Zeile wird wieder bearbeitbar, und du kannst Zeiten und Pause korrigieren — auch auf eine andere, bereits bestätigte Schicht umhängen. Über Nachbearbeitung abbrechen lässt du die Schicht wieder unverändert.

Beim Übernehmen einer Nachbearbeitung gilt:

  • Die bestätigten Zeiten werden überschrieben.
  • Bei der Person wird ein Kommentar protokolliert: wer die Änderung vorgenommen hat und welcher Wert von alt auf neu geändert wurde.
  • Der Bestätigungsstatus der Schicht bleibt, wie er war — eine freigegebene Schicht bleibt freigegeben.
  • Beide Zeitfelder müssen gefüllt sein. Hat die Person gar nicht gearbeitet, ist Nicht erschienen der richtige Weg, nicht das Leeren der Felder.

Willst du Zeiten unabhängig von einem Stundenzettel korrigieren und die Person dabei aktiv informieren, nutze stattdessen die Aktion aus Zeiten abgeschlossener Schichten nachträglich korrigieren. Dort ist eine Begründung Pflicht und die Person erhält eine E-Mail.

Damit kannst du auch schon freigegebene Zeiten aus dem Prüf-Fenster heraus richtigstellen, ohne den Beleg zu verlassen.

Ein Stundenzettel pro Person

Sobald für eine Person ein Zettel erfolgreich eingelesen wurde, verwirft festiware weitere Zettel derselben Person. So können dieselben Schichten nicht zweimal in die Auswertung wandern — etwa wenn ein Blatt beim Scannen doppelt eingezogen wurde oder dasselbe PDF versehentlich zweimal hochgeladen wird.

Was das im Alltag bedeutet:

  • Beim Stapel-Upload bekommen die Seiten des überzähligen Zettels den Status Verworfen. Sie werden nicht an die Schrifterkennung geschickt, bleiben aber als Beleg erhalten. Du erhältst eine Benachrichtigung, die dir die betroffenen Personen namentlich nennt.
  • Beim Upload durch die Mitwirkenden selbst — im Mitwirkendenportal oder in der App für Mitwirkende — erscheint ein Hinweis, dass für diese Person bereits ein Stundenzettel eingelesen wurde. Der Zettel wird nicht gespeichert.
  • Mehrseitige Zettel sind davon nicht betroffen. Seiten, die zum selben Blatt gehören, erkennt festiware als ein Dokument.

Ein erneuter Versuch bleibt möglich, solange noch kein Zettel den Status Erledigt erreicht hat. Ist ein Scan fehlgeschlagen, widersprüchlich, unsicher oder von dir abgelehnt worden, darfst du denselben Zettel also nochmal in besserer Qualität hochladen. Genau dieser zweite Versuch ist der übliche Weg, einen schlecht lesbaren Scan zu retten.

Damit ist sichergestellt, dass jede Person mit genau einem eingelesenen Stundenzettel in der Abrechnung steht.

Prüf-Status verstehen

Status Bedeutung
Nicht zugeordnet Auf der Seite konnte keine Person erkannt werden (QR-Code fehlt oder ist unlesbar).
Zu prüfen Zeiten wurden gelesen, sind aber unsicher oder widersprüchlich — oder die Person der Seite ist nur von der Vorseite übernommen. Bitte prüfen.
In Bearbeitung Die Seite wird gerade verarbeitet.
Erledigt Die Zeiten wurden übernommen.
Verworfen Du hast den Scan abgelehnt — oder er wurde als weiterer Zettel einer Person automatisch verworfen.
Fehlgeschlagen Die Verarbeitung ist fehlgeschlagen.

Im Blick behalten, wer seinen Zettel abgegeben hat

Bei einer größeren Veranstaltung willst du nicht Scan für Scan durchsehen, um zu erkennen, von wem noch ein Zettel fehlt. Dafür kannst du dir ein Berechnungsfeld auf den Personentyp legen.

Wähle im Feld-Editor als Vorlage die Gruppe Stundenzettel. Sie bietet drei Felder:

  • Stundenzettel hochgeladen — Ja oder Nein. Weil das Feld eine Auswahl ist, kannst du die Personenliste danach filtern und dir in einem Klick alle anzeigen, von denen noch nichts da ist.
  • Stundenzettel-Seiten — wie viele Seiten für diese Person vorliegen.
  • Letzter Upload — wann der jüngste Zettel eingegangen ist.

Wie du ein Berechnungsfeld grundsätzlich anlegst und die Vorlage-Auswahl bedienst, liest du unter Berechnungsfelder – Twig-Referenz.

Damit siehst du in der Personenliste auf einen Blick, wessen Zettel noch aussteht.

Wer kann die Funktion nutzen

Die Stundenzettel-Erkennung sehen und nutzen nur Personen, die Schichten verwalten dürfen — dieselbe Berechtigung wie für das Bestätigen und Ablehnen von Zeiten. Für alle anderen ist die Funktion ausgeblendet.

Datenschutz

Zum Auslesen der Handschrift werden die einzelnen Stundenzettel-Seiten an den KI-Dienst Mistral übermittelt. Voraussetzung dafür ist ein Auftragsverarbeitungsvertrag (AVV) mit Mistral sowie ein in deiner Instanz hinterlegter Mistral-API-Schlüssel. Setze die Funktion nur ein, wenn diese Grundlagen geklärt sind.

Hat das Deine Frage beantwortet? Danke für Dein Feedback Es gab ein Problem beim Absenden Deines Feedbacks

Brauchst Du weitere Hilfe? Schreib uns! Schreib uns!