Die Zeit eines Tickets zu messen und diese Zeit abzurechnen, sind zwei verschiedene Probleme. Beim einen geht es um die Produktivität des Teams: Wie viel tatsächliche Zeit hat der Techniker aufgewendet? Beim anderen geht es um den Vertrag: Wie viele Stunden hat der Kunde bereits verbraucht und wie viele bleiben ihm noch? Beides zu verwechseln ist der Fehler, den wir im Betrieb am häufigsten sehen – und genau dort beginnt die Wahl zwischen ActualTime und Contract Hours.
Das Problem: drei Ebenen von „Zeit“ im GLPI
Bevor Sie ein Plugin wählen, lohnt es sich, drei Dinge zu unterscheiden, die GLPI unterschiedlich behandelt:
- Geschätzte Zeit – die Dauer, die Sie für die Aufgabe geplant haben.
- Tatsächliche Zeit – wie lange der Techniker wirklich gebraucht hat, mit Stoppuhr gemessen.
- Abrechenbare Zeit – was in die Vertragsabrechnung eingeht, bereits gerundet und mit kaufmännischen Regeln.
Das native Feld Dauer der Aufgabe (in Sekunden in actiontime gespeichert) deckt die Grundlagen ab, erfordert aber manuelle Eingabe und weiß nichts über Verträge. Hier kommen die beiden Plugins ins Spiel.
ActualTime (TICGAL)
ActualTime ist ein kostenloses Open-Source-Plugin von TICGAL. Es fügt der Ticketaufgabe Schaltflächen für Start, Pause und Stopp hinzu und misst die tatsächliche Zeit, die der Techniker damit verbringt. Beim Stoppen speichert es diese gemessene Zeit in der Dauer der Aufgabe. Der Fokus ist ehrlich und eng: aus „Ich glaube, ich habe etwa 40 Minuten gebraucht“ eine gemessene Zahl zu machen. Es kennt weder Vertrag noch Guthaben noch Abrechnung – und muss es auch nicht, denn sein Ziel ist eine Aufwandskennzahl, keine Abrechnung.
Contract Hours (NexTool)
Contract Hours ist ein lizenziertes Modul von NexTool für alle, die Stundenpakete verkaufen. Die Stoppuhr sitzt in der Timeline des Tickets, aber sie erzeugt etwas anderes: Beim Stoppen wird die Zeit auf die konfigurierte abrechenbare Mindesteinheit gerundet (Standard 15 Minuten), wird zu einer automatischen privaten TicketTask und wird vom Guthaben des mit diesem Ticket verknüpften Vertrags abgebucht. Es bringt mit, was ActualTime fehlt: monatliches Kontingent pro Vertrag, Verbrauchsauszug, ein Dashboard „Stundenverbrauch“ für den Kunden in der vereinfachten Oberfläche, Warnungen bei abgelaufenem oder überschrittenem Vertrag und seit Version 3.6 nicht abrechenbare Stunden (Kulanz) – Zeit, die erfasst, aber nicht vom Guthaben abgezogen wird.
Direkter Vergleich
| Kriterium | Native Dauer (manuell) | ActualTime (TICGAL) | Contract Hours (NexTool) |
|---|---|---|---|
| Wie die Zeit erfasst wird | Manuelle Eingabe | Stoppuhr in der Aufgabe | Stoppuhr in der Timeline |
| Misst tatsächliche Zeit | Nein (was Sie eingeben) | Ja | Ja |
| Abrechenbare Rundung | Nein | Nein | Ja (konfigurierbares Minimum, Vielfaches von 5) |
| Verknüpfung mit Vertrag | Nein | Nein | Ja (pro Einheit; Gruppe UND Kategorie) |
| Guthaben / Stundenkontingent | Nein | Nein | Ja (monatliches Kontingent + Warnungen) |
| Nicht abrechenbare Stunden (Kulanz) | Nein | Nein | Ja (Schalter pro Aufgabe) |
| Auszug / Verbrauchsbericht | Nativ (eingeschränkt) | Einfach | Detailliert pro Zyklus / Zeitraum |
| Dashboard für den Kunden | Nein | Nein | Ja („Stundenverbrauch“) |
| Wo die Zeit gespeichert wird | actiontime | actiontime | actiontime (maßgebliche Quelle) + Guthaben |
| Lizenz | Nativ | Kostenlos (GPL) | Lizenziert |
| Unterstütztes GLPI | 10 und 11 | 10 und 11 | nur 11 |
Der Zielkonflikt, auf den es im Betrieb ankommt
Im Betrieb haben wir beide eingesetzt: ActualTime bei Kunden, bei denen die interne Produktivität der Schmerzpunkt war, Contract Hours dort, wo der Stundenvertrag im Zentrum der Abrechnung stand. Ein Detail, das erst im laufenden Betrieb auffällt: Beide schreiben am Ende in dasselbe native Feld, actiontime der Aufgabe. ActualTime speichert dort die tatsächlich gemessene Zeit; Contract Hours behandelt actiontime der Aufgabe als maßgebliche Quelle (ab 3.4.2) und erstellt eine private Aufgabe mit der bereits gerundeten Zeit. Laufen beide im selben Ticket, ohne Regel, wem die Aufgabe „gehört“, entstehen zwei konkurrierende Dauern – die rohe Messung des Technikers im Konflikt mit der gerundeten abrechenbaren Buchung. Deshalb haben wir uns entschieden, die Ebenen zu trennen: ActualTime als interne Kennzahl (nie abrechenbar) und Contract Hours als vertragliche Ebene, und nie zuzulassen, dass beide im selben Ticket Aufgaben anlegen. Der Grund ist einfach: Die Zahl auf der Kundenrechnung muss die gerundete, vertragsbewusste sein, nicht die rohen Sekunden – und gerade diese rohen Sekunden braucht die Leitung zur Kapazitätsplanung. Zwei Zielgruppen, zwei Zahlen, zwei Werkzeuge.
Ein häufiger Fehler ist, von ActualTime eine Antwort auf „Wie viele Stunden bleiben im Vertrag?“ zu erwarten. Dieses Konzept kennt es nicht. Jeder Kunde, der versucht hat, so etwas durch Export von ActualTime-Daten in eine Tabelle nachzubauen, sah die Zahl innerhalb von Wochen von der Realität abweichen. Hinzu kommt die Rundungsdifferenz: Contract Hours rundet bis zur abrechenbaren Mindesteinheit auf (standardmäßig 15 Minuten, aus Kompatibilitätsgründen mit GLPI ein Vielfaches von 5). Eine Aufgabe von 3 Minuten wird mit 15 abgerechnet. In einem Monat mit vielen kurzen Tickets ist die Differenz zwischen tatsächlicher Gesamtzeit (ActualTime) und abgerechneter Gesamtzeit (Contract Hours) erheblich – und genau diese Differenz verhandeln Sie mit dem Kunden oder übernehmen sie als Kulanz über den Schalter für nicht abrechenbare Zeit.
Messen Sie die Differenz selbst
Da beide Plugins in das native Feld actiontime (in Sekunden) schreiben, lässt sich die erfasste Zeit direkt in der Datenbank beziffern, ohne von einer Plugin-Tabelle abzuhängen. Summieren Sie pro Techniker und Monat und vergleichen Sie mit der abgerechneten Gesamtzeit im Auszug von Contract Hours:
-- Hours logged per technician in the month (native actiontime field, in seconds)
SELECT u.name AS technician,
ROUND(SUM(tt.actiontime) / 3600, 2) AS logged_hours
FROM glpi_tickettasks tt
JOIN glpi_users u ON u.id = tt.users_id_tech
WHERE tt.date BETWEEN '2026-06-01' AND '2026-06-30 23:59:59'
AND tt.actiontime IS NOT NULL
GROUP BY tt.users_id_tech
ORDER BY logged_hours DESC;
Stimmt diese Summe mit der tatsächlich gemessenen Zeit überein, weicht aber von der abgerechneten ab, besteht die Differenz aus Rundung plus Kulanzstunden – und eine solche Information ist Verhandlungsgrundlage, kein Fehler.
Empfehlung je Szenario
- Nutzen Sie ActualTime, wenn die Frage lautet: „Ist mein Team produktiv?“ Sie möchten den tatsächlichen Aufwand messen, interne Kennzahlen speisen und rechnen nicht nach Stunden ab. Keine Kosten, einfache Installation.
- Nutzen Sie Contract Hours, wenn Sie Stundenpakete verkaufen und der Kunde fragt: „Wie viel habe ich schon verbraucht und wie viel bleibt?“ Sie brauchen Guthaben, Auszug, abrechenbare Rundung, Kunden-Dashboard und Warnung bei Überschreitung. Es ist eine Investition, die sich aber beim ersten Vertrag bezahlt macht, den Sie nicht mehr zu niedrig abrechnen.
- Nutzen Sie beide, wenn Sie intern die tatsächliche UND extern die abrechenbare Zeit wollen, sofern auf getrennten Ebenen: ActualTime als Kennzahl (nicht abrechenbar) und Contract Hours für die Abrechnung, mit der klaren Regel, dass pro Ticket nur eines davon Aufgaben anlegt.
- Bleiben Sie beim nativen Feld, wenn das Volumen gering ist und die manuelle Dauer ausreicht. Installieren Sie kein Plugin für ein Problem, das Sie nicht haben.
Kosten und Aufwand
ActualTime ist kostenlos (GPL): Die Kosten sind die üblichen bei einem Plugin – den Build für Ihre GLPI-Version validieren und es in das Upgrade-Fenster einplanen. Contract Hours ist lizenziert, aber der eigentliche Einführungsaufwand liegt nicht im Timer, sondern im Vertragsmodell: Kontingent festlegen, die Gruppe und die Kategorie zuordnen, die jeden Vertrag bestimmen (die Regel ist UND, nicht ODER), die abrechenbare Mindesteinheit konfigurieren und festlegen, wer welchen Vertrag im Dashboard sieht. Eine halbe Stunde Klicken und einige Stunden kaufmännischer Entscheidungen. Der Nutzen zeigt sich beim ersten Monatsabschluss, bei dem der Auszug fertig für den Kunden vorliegt, ohne Tabelle.
Bei NexTool führen wir beide Modelle in GLPI-Installationen von B2B-Kunden ein und betreuen sie. Wenn Ihr Engpass darin liegt, Ticketstunden in eine belastbare Abrechnung zu verwandeln – mit Guthaben, Auszug und einem Dashboard, das der Kunde versteht –, löst das Modul Contract Hours des Plugins NexTool genau diese Aufgabe. Wenn noch offen ist, welche Ebene für Ihren Betrieb sinnvoll ist, sprechen Sie mit uns.
Geprüft vom Team von NexTool Solutions.