Zum Inhalt springen
/ Home / Knowledge / Minusstunden in Odoo: warum das Zeitkonto nur nach oben zählt

Minusstunden in Odoo: warum das Zeitkonto nur nach oben zählt

Tom Köhne
Odoo: ERP und CRM-Experte
OIT GmbH
Profil ansehen

Stand: 27.08.2026 · Alle Angaben getestet in Odoo 19 mit dem Modul hr_attendance 19.0.2.0. In Odoo 17 und 18 heißen einzelne Felder anders, das Grundverhalten ist identisch. In allen Screenshots sind personenbezogene Daten vor der Aufnahme unkenntlich gemacht worden.

Das Problem in drei Sätzen

Ein Mitarbeiter mit acht Stunden Tagessoll stempelt um 7:56 ein und um 14:14 wieder aus. Statt der erwarteten Minusstunden steht in der Anwesenheit eine glatte Null – und der Überstundensaldo bleibt unverändert. Das ist kein Fehler in der Konfiguration, sondern beabsichtigtes Verhalten: Odoo führt im Anwesenheitsmodul kein Arbeitszeitkonto, sondern einen Überstundenzähler, und der kann konstruktionsbedingt nur nach oben.

Warum Odoo keine Minusstunden bildet

Dahinter stecken zwei Mechanismen, die unabhängig voneinander in die gleiche Richtung wirken. Beide muss man kennen, weil man sonst am falschen Ende sucht.

1. Die theoretischen Stunden kennen den Plantag nicht

Das Feld expected_hours auf der Anwesenheit klingt wie „Tagessoll“, ist es aber nicht. Es berechnet die planmäßige Arbeitszeit ausschließlich innerhalb des Zeitfensters zwischen An- und Abmeldung. Wer früher geht, verkleinert damit sein eigenes Soll. Solange keine Überstundenzeile am Tag hängt, fällt das Feld auf den Ist-Wert zurück, und die Differenz ist zwangsläufig null.

Tag Gestempelt Ist „Theoretisch“ Überstunden
Normaltag 07:30 – 16:20 8,81 h 8,00 h +0,81 h
Früher gegangen 07:27 – 16:17 7,84 h 7,84 h 0,00 h
Halber Tag 07:56 – 14:14 5,30 h 5,30 h 0,00 h

In der zweiten und dritten Zeile fehlen 0,16 bzw. 2,70 Stunden gegen den Plan. Im System sind sie nicht vorhanden, weil das Soll auf den Ist-Wert mitgeschrumpft ist.

2. Die Überstundenregeln sind einseitig definiert

Seit Odoo 18 werden Überstunden über Regelwerke gebildet (Modell hr.attendance.overtime.rule). Eine typische Regel lautet „Basis: Menge, 8 Stunden pro Tag“ und liefert damit max(0, Ist − 8). Es gibt keinen Regeltyp, der eine Unterschreitung abbildet – weder mit fixer Stundenzahl noch mit „Soll aus dem Arbeitsvertrag“. Die Toleranzfelder zugunsten von Unternehmen und Mitarbeiter verschieben nur die Schwelle nach oben, sie kippen das Vorzeichen nicht.

Odoo-Überstundenregel mit Überschreitungsdauer 08:00 Stunden und beiden Toleranzen auf 00:00
Die Regel kennt nur eine Überschreitungsdauer. Ein Feld für Unterschreitungen gibt es nicht – deshalb bleibt das Ergebnis unterhalb von acht Stunden immer null.

Das Feld validated_overtime_hours, auf das viele schauen, ist lediglich die gespeicherte Kopie dieses Regelergebnisses. Und der Saldo am Mitarbeiter (total_overtime) summiert die Überstundenzeilen. Wo keine Zeile entsteht, gibt es auch nichts zu summieren.

Drei Wege, damit umzugehen

1. Abwesenheiten sauber buchen
Früher gehen wird als Urlaub, Gleitzeitabbau oder unbezahlte Freistellung beantragt. Der von Odoo vorgesehene Weg, ohne jede Entwicklung – verlangt aber Disziplin von allen Beteiligten.
2. Manuelle Korrekturzeile
Eine Überstundenzeile mit negativer Dauer reduziert den Saldo sofort. Gut für Einzelfälle und Korrekturen, ungeeignet als Dauerlösung – warum, steht im nächsten Abschnitt.
3. Echtes Zeitkonto nachbauen
Eine Automatisierung vergleicht je Mitarbeiter und Arbeitstag Soll gegen Ist und schreibt die Differenz – auch negativ. Der einzige Weg, wenn Minusstunden dauerhaft mitlaufen sollen.

Weg 3 im Detail – und die Falle darin

Die Rechnung selbst ist unspektakulär: Soll aus dem Arbeitszeitplan, abzüglich Feiertage und genehmigter Abwesenheiten, gegen die Summe der Anwesenheiten des Tages. Was die Differenz negativ macht, wird als Überstundenzeile mit negativer Dauer gebucht.

Die eigentliche Hürde liegt woanders, und sie kostet erfahrungsgemäß den ersten Anlauf: Odoo löscht selbst angelegte Überstundenzeilen bei jeder Neuberechnung. Es reicht, dass jemand die Abmeldezeit um sechs Sekunden korrigiert – die Regeln laufen neu, die eigene Zeile ist weg, der Saldo springt zurück. Ein reiner Nachtjob greift also zu kurz.

Funktionierend ist die Kombination aus zwei Bausteinen:

Automatisierungsregel auf der Anwesenheit
Ausgelöst bei Anmeldung und Abmeldung. Sie läuft nach Odoos eigener Neuberechnung und legt die Minuszeile sofort wieder an. Ohne diesen Baustein ist alles andere Makulatur.
Nachtjob als Netz
Läuft einmal täglich einige Tage rückwirkend. Fängt ab, was die Regel nicht mitbekommt: gelöschte Anwesenheiten und nachträglich genehmigter Urlaub.

Angenehmer Nebeneffekt, sobald eine Minuszeile am Tag hängt: die „theoretischen Stunden“ zeigen plötzlich das echte Tagessoll. Aus Soll 5,30 / Ist 5,30 / 0,00 wird Soll 6,00 / Ist 5,30 / −0,70. Die Anwesenheitsliste wird damit erstmals selbsterklärend.

Anwesenheit in Odoo mit gearbeiteter Zeit 05:18 und Überstunden minus 00:42, darunter die zugehörige negative Überstundenzeile
So sieht ein Fehltag danach aus: 05:18 gearbeitet bei sechs Stunden Soll, Überstunden −00:42, die Korrekturzeile hängt korrekt am Tag und ist genehmigt.

Vier Entscheidungen, die vorher zu treffen sind

Frage Empfehlung aus der Praxis
Ab welcher Abweichung? Eine Minute Toleranz genügt, um Stempel-Unschärfe herauszufiltern. Ohne jede Toleranz entstehen Zeilen über 36 Sekunden, die niemand lesen will.
Flexible Arbeitszeitpläne? Ausschließen. Bei Kalendern mit flexiblen Stunden – typisch bei Werkstudenten – gibt es kein belastbares Tagessoll, also auch kein sinnvolles Minus.
Tage ohne jede Stempelung? Nicht bewerten. Sonst bekommt jeder noch nicht eingetragene Krankheitstag sofort acht Minusstunden. Der Preis: wer gar nicht stempelt, fällt weiter durchs Raster.
Rückwirkend nachrechnen? Ja, aber erst als Probelauf ohne Schreiben. Die Zahlen sind meist unangenehmer als erwartet und sollten vor der Verbuchung besprochen sein.

Was das in der Praxis bewegt

Ein Beispiel aus einem Team mit zwölf Personen und knapp vier Monaten Historie: die Nachberechnung fand 136 Tage mit Fehlstunden, zusammen rund 152 Stunden. Zwei Mitarbeiter rutschten von einem positiven Überstundensaldo ins Minus, bei einem weiteren schrumpfte der Saldo von 31 auf 5 Stunden.

Odoo-Anwesenheitsliste, aufsteigend nach Überstunden sortiert, mit vielen negativen Werten von minus 07:14 bis minus 02:06
Die Anwesenheitsliste, aufsteigend nach Überstunden sortiert. Vorher endete diese Spalte bei null – jetzt stehen die Fehlstunden dort, wo sie hingehören.

Ebenso lehrreich war, was dabei sichtbar wurde: Die größten Einzelposten waren keine Mitarbeiter, die früher gegangen sind, sondern vergessene Stempelungen – Außentermine, Homeoffice-Tage, ein Arzttermin. Ein Zeitkonto ist damit auch ein Datenqualitäts-Werkzeug. Wenn diese Tage als Abwesenheit nachgetragen werden, verschwindet das Minus beim nächsten Lauf von selbst.

Grenzen und Vorsicht

Ein selbst gebautes Zeitkonto ist kein Modul, sondern eine Anpassung. Bei größeren Odoo-Updates muss die Logik geprüft werden, weil Feldnamen und Regelmechanik im Anwesenheitsmodul zwischen Versionen bereits mehrfach gewechselt haben. Und: ob und wie Minusstunden verrechnet werden dürfen, ist eine arbeitsrechtliche Frage – Arbeitsvertrag, Betriebsvereinbarung und Mitbestimmung entscheiden das, nicht die Software. Dieser Artikel ist eine technische Anleitung und keine Rechtsberatung.

Fazit

Odoo bildet im Standard kein Gleitzeitkonto ab, und keine Einstellung ändert das. Wer nur gelegentlich früher geht, ist mit sauber gebuchten Abwesenheiten am besten bedient. Wer ein echtes Konto mit Plus und Minus braucht, kommt an einer Automatisierung nicht vorbei – die aber überschaubar bleibt, wenn man die Löschmechanik der Überstundenregeln von Anfang an einplant.

Unterstützung bei Odoo?
Wir richten Odoo ein, passen Module an und bauen Automatisierungen wie die hier beschriebene – von der Zeiterfassung bis zur Buchhaltung. Mehr dazu auf unserer Seite Odoo: ERP und CRM.

Häufige Fragen

Kann man Minusstunden in Odoo einfach in den Einstellungen aktivieren?

Nein. Es gibt weder einen Schalter noch einen Regeltyp für Unterschreitungen. Die Toleranzfelder in den Anwesenheitseinstellungen verschieben nur die Schwelle, ab der Plusstunden zählen.

Warum steht bei früherem Gehen 0,00 statt eines negativen Werts?

Weil die theoretischen Stunden nur das Fenster zwischen An- und Abmeldung bewerten und damit auf den Ist-Wert schrumpfen. Die Regel bildet danach die Differenz, und die ist null.

Verkraftet der Überstundensaldo überhaupt negative Werte?

Ja. Der Saldo am Mitarbeiter summiert die Überstundenzeilen und verarbeitet negative Dauern anstandslos. Auch ein insgesamt negativer Saldo wird korrekt angezeigt.

Bleiben manuell angelegte Minuszeilen dauerhaft erhalten?

Nein. Sobald die Anwesenheit bearbeitet wird, laufen die Überstundenregeln neu und löschen die Zeile. Deshalb braucht es eine Automatisierung, die sie danach wieder anlegt.

Werden Urlaub und Feiertage richtig berücksichtigt?

Wenn die Berechnung sie abzieht, ja. Genehmigte Abwesenheiten und Feiertage liegen in Odoo als Kalenderausnahmen vor und reduzieren das Tagessoll, sodass an einem halben Urlaubstag nur die zweite Tageshälfte bewertet wird.


Tom Köhne
Dein Ansprechpartner
OIT GmbH
Profil ansehen

Hast du eine Frage zu diesem Artikel?

Schreib uns – wir antworten in der Regel innerhalb eines Werktages.