Internes ERP für die Teamsteuerung
Internes Produkt eines IT-Unternehmens
Monat abschließen
früher 18–37 Stunden
1–2 Stunden
Jeden Monat gewinnt HR und Buchhaltung zwei bis vier volle Arbeitstage zurück – Zeit, die ihnen bisher für andere Aufgaben gefehlt hat.
Urlaub beantragen
früher Chatverläufe und Erinnerungen
30 Sekunden
Die Mitarbeiterin antwortet einem Telegram-Bot, die Führungskraft drückt einen Knopf. Kein Login, keine Schulung — für keinen der dreißig
Daten erfassen
früher vier Eingabestellen
Einmal
Von dort erreicht der Antrag den Teamkalender, den Urlaubsstand und die Lohnabrechnung von allein. Abweichungen können gar nicht erst entstehen
Strittige Zeile finden
früher nach der Auszahlung
Vor der Auszahlung
Strittige Beträge stehen im Entwurf, und jeder lässt sich bis zur Formel mit eingesetzten Zahlen aufklappen — solange das Geld noch da ist
Hinweis zu den Daten
Das System ist intern, der Zugang zu seinen Produktivdaten ist geschlossen: echte Daten werden nicht offengelegt. Auf den Aufnahmen und in den Beispielen dieses Cases steht ein Demonstrationsdatensatz eines Unternehmens derselben Größe: 30+ Mitarbeitende, 6 Teams. Beträge, Namen, Teamzusammensetzung und Urlaubsstände auf den Aufnahmen sind exemplarisch, an der Mechanik ändert das nichts: die Demonstrationsdaten laufen durch dieselben Berechnungsregeln wie die Produktivdaten. Der Datensatz ist deterministisch — ein erneutes Laden ergibt dieselben Zahlen. Die Oberfläche auf den Aufnahmen ist englisch.
Kontext
Die Aufgabe
Gebraucht wurde ein System, in dem ein Antrag nur einmal erfasst wird – und Kalender, Urlaubsstand und Betrag in der Abrechnung automatisch aktualisiert werden und in der Historie erhalten bleiben. Ein Unternehmen mit 30+ Mitarbeitenden passte nicht mehr in Chats und Tabellen: Die Prozesse existierten, waren aber nirgends dokumentiert. Die Regeln steckten im Kopf der HR-Managerin, die Daten lagen an fünf unverbundenen Stellen.
- Urlaubs- und Freistellungsanträge kamen als private Nachrichten. Eine Woche später konnten weder Führungskraft noch Mitarbeiter rekonstruieren, was vereinbart war.
- Der Urlaubsstand wurde von Hand gezählt. Beim Ausscheiden wurde daraus regelmäßig ein Streitfall.
- Stunden aus den Trackern wurden per Copy-and-paste in eine Tabelle übertragen — ein bis zwei Arbeitstage im Monat und dazu Übertragungsfehler.
- Die Lohnabrechnung entstand in einer Tabelle: ohne Änderungshistorie, mit Formeln, die bei Einstellung oder Austritt mitten im Monat zerbrachen.
- Feiertage, Krankheit und Überstunden wurden aus dem Gedächtnis geführt. Der Zugriff auf Auszahlungsdaten beruhte auf Vertrauen.
So ein Aufbau trägt bis zum ersten Streit über die Abfindung, bis zu einem Auszahlungsfehler, der ein Quartal später auffällt, und bis zum Urlaub der HR-Managerin selbst — dann zeigt sich, dass niemand mehr den Monat abschließen kann.
Ansatz
Die Lösung
Das Team musste keinen einzigen Tag geschult werden. Die Mitarbeitenden arbeiten ohnehin in einem Messenger, der bereits offen ist: Ein Antrag dauert eine halbe Minute, Login und Anleitung entfallen. Die Führungskraft genehmigt mit einem Klick direkt aus der Benachrichtigung heraus. Die Oberfläche müssen nur HR und Administratoren kennenlernen – also diejenigen, die ohnehin täglich im Panel arbeiten.
Das Herzstück der Architektur ist die fehlende Doppelerfassung. Eine einzige Genehmigung aktualisiert Teamkalender, Lohnabrechnung und Urlaubsstand von selbst, und die Antwort erreicht die Mitarbeiterin in demselben Chat, in dem sie gefragt hat.
Im System stecken Personal und Teamstruktur, Abwesenheiten, Urlaubsstand, Arbeitszeiterfassung und Lohnberechnung. Jeder dieser Bereiche bekommt weiter unten einen eigenen Abschnitt.
- Der Mitarbeiter schickt den Antrag an den Telegram-Bot
- Der Antrag erscheint sofort im Panel des Arbeitgebers
- Der Arbeitgeber genehmigt mit einem Knopf
- Die Antwort kommt in denselben Chat
- Kalender, Lohnabrechnung und Stand haben sich selbst aktualisiert
Abgezogen werden 3 Tage, es bleiben 13. 13:02
Der Termin wurde im Teamkalender eingetragen. 13:04
Der Termin steht im gemeinsamen Kalender und verschwindet wieder, wenn der Antrag storniert wird.
Abgezogen wird vom ältesten Guthaben, damit keine Tage verfallen.
Zwischen dem Antrag und der abgeschlossenen Lohnabrechnung liegt ein Klick. HR überträgt den Urlaub weder in den Kalender noch in die Abrechnung: das passiert von selbst. In der Historie bleibt, wer wann genehmigt hat.
Personal
Personal und Teamstruktur
Die IT-Abteilung ist in Teams gegliedert: Leadership & PMO, Platform, Web, Mobile, QA und DevOps. Jedes hat seine eigene Leitung — daraus ergeben sich der Genehmigungsweg der Anträge und die Adressierung der Benachrichtigungen.
Fünf Vertragsformen und vier Vergütungsmodelle laufen im System gleichzeitig.
Teams und Leitungen
Vertragsformen
Vergütungsbedingungen
Eintritt und Austritt
Die Mitarbeiterliste mit Filtern nach Status und Team.
Abwesenheiten
Urlaub, Krankheit, Freistellung
Drei Arten von Abwesenheit mit unterschiedlichen Regeln — und das ist wesentlich, denn wer sie zu einem einzigen „Antrag“ verschmilzt, verliert den Sinn jeder einzelnen.
Alle drei stehen in der Mitarbeiterkarte zusammen mit dem Tagesstand und der Historie.
Urlaub
Krankheit
Freistellung
Stand, Ansprüche und Verbrauch im Jahr, aufgeschlüsselt nach Jahren mit Verfallsdaten.
Stand
Urlaubstage verbuchen: Anspruch und Abzug
Der Urlaubsstand wird als Bewegungsjournal geführt, so wie es die Buchhaltung tut. Jede Änderung des Standes ist ein eigener Eintrag mit Datum, Quelle und Urheber. Früher lag der Stand als einzelnes Feld in der Mitarbeiterkarte und wurde nirgends berechnet. Den Stand als einzelne Zahl zu halten, ist eine typische Architekturfalle von B2B-Systemen: ein Streit beim Ausscheiden verlangt die Historie, nicht eine Zahl. Die Basisnorm liegt bei 28 Kalendertagen.
- Der Anspruch — ein Zwölftel des Jahreskontingents für jeden vergangenen Monat. Die Berechnung läuft jeweils am Ersten des Monats. Nur im Eintrittsjahr wird der Anspruch tagesgenau anteilig berechnet; Abwesenheiten mindern den Anspruch nicht. Naives Runden ergäbe im Jahr 27,96 statt 28, deshalb bucht der Monat die Differenz der kumulierten gerundeten Werte: die Jahressumme entspricht dem Kontingent exakt.
- Der Abzug läuft nach FIFO. Die Regel ist zugunsten der Mitarbeitenden gewählt: Zuerst werden die ältesten Tage verbraucht, deshalb geht der übertragene Rest vor dem frischen Anspruch weg und weniger verfällt.
- Übertrag und Verfall — eigene Journaleinträge: ein nicht genutzter Rest wird für ein Jahr übertragen und verfällt danach, einmal jährlich nach Zeitplan.
- Die Korrektur — ein Eintrag mit Pflichtkommentar und Urheber, zugänglich über eine eigene Berechtigung. Ins Minus geht der Stand nicht: die Prüfung sitzt sowohl im Formular als auch im Service.
- Urlaub über den Stand hinaus blockiert den Antrag nicht: die Tage werden in einen bezahlten und einen unbezahlten Teil geteilt — die bezahlten werden aus dem Journal abgezogen, die unbezahlten mindern die Basis ohne Ausgleich.
Integrationen
Arbeitszeiterfassung
Das System zwingt das Team nicht, die Erfassung in einer neuen Oberfläche noch einmal zu führen — es holt die Daten dort ab, wo die Menschen ohnehin arbeiten, und bringt sie auf eine Form.
Die Quelle wird jeder Person einzeln zugewiesen.
Hubstaff — Zeit und Aktivität
Worksection — Projekte und Aufgaben
Google Calendar — der Teamkalender
Telegram und REST-API
Synchronisation nach Zeitplan
Stunden mit Projektbezug und Aktivitätsanteil; die Zeit der letzten Synchronisation ist sichtbar.
Geld
Lohnberechnung
Eine Lohnabrechnung entsteht mit einer einzigen Aktion. Das System stellt die Abrechnung aus allen aktiven Mitarbeitenden zusammen, übernimmt die erfassten Stunden, genehmigten Abwesenheiten, Feiertage und wiederkehrenden Zuschläge – und berechnet jede Zeile.
Die Abrechnung durchläuft einen Zyklus: Zusammenstellen → Entwurf → genehmigt → ausgezahlt. Nach der Genehmigung sind die Beträge eingefroren: spätere Änderungen an Stunden oder Abwesenheiten verändern einen bereits abgeschlossenen Monat nicht mehr. Genau dafür baut man solche Systeme — Historie lässt sich nicht rückwirkend umschreiben.
Vertrauen
Nachvollziehbarkeit: jeder Betrag lässt sich zerlegen
Die Hauptfrage an jedes Lohnsystem lautet „woher kommt diese Zahl“. Hier beantwortet sie das System selbst: jede Zeile klappt bis zur Formel mit eingesetzten Zahlen auf — Basis für gearbeitete Tage, Feiertagsausgleich, Zuschläge, Produktivitätskoeffizient, Minderungsfaktor, Bruttosumme und Auszahlungsbetrag.
Die vollständige Berechnung kann den Mitarbeitenden geöffnet werden. Dieselbe Berechnung geht als PDF an die Buchhaltung.
Prüfungen
Datenqualitätskontrolle
Das System markiert selbst die Zeilen, die man nicht ungeprüft abschließen darf: null Stunden bei einer Person auf Stundenbasis, eine nicht genehmigte Freistellung im Zeitraum, ein fehlender Wechselkurs, eine feste Zahlung trotz Abwesenheiten. Jede Markierung erklärt, was genau nicht stimmt und wie es sich auf den Betrag ausgewirkt hat.
Fehler stehen im Entwurf, vor dem Abschluss des Zeitraums. Das ist um eine Größenordnung günstiger.
Auszahlungen
Boni, Auszahlungen und Ausgleiche
Alles, was den Endbetrag beeinflusst, lebt im System und geht automatisch in die Berechnung ein — keine separaten Prämientabellen, die HR anschließend von Hand zusammenführt.
Einmal in der Mitarbeiterkarte eingestellt, greift es in jedem folgenden Zeitraum.
Wiederkehrende Zuschläge
Einmalige Prämien und Ausgleiche
Abzüge
Ausgleich von Abwesenheiten
Überstunden und Währung
Zuschläge mit Gültigkeitszeiträumen und Aktiv-Schalter.
Auswertung
Berichte zu einer Person
Eine Führungskraft braucht den vollständigen Überblick über einen konkreten Mitarbeitenden. Auf einer Seite stehen die durchschnittlichen Stunden pro Tag, die gesamte Arbeitszeit, der Aktivitätsanteil, Urlaubstage, Krankheitstage und Freistellungen, der Produktivitätsindex, die geltenden Zuschläge und ihre Auswirkungen auf die Lohnsumme sowie der Verlauf der Arbeitszeit und die Auszahlungshistorie.
Gesondert ein Zähler der Tage bis zum Vertragsende: für die Suche nach Ersatz bleibt Zeit.
Chronologie
Zeitrahmen und Rhythmus der Entwicklung
Die tatsächliche Entwicklungszeit liegt bei etwa 80 Personenstunden. Das sind rund zwei Arbeitswochen eines Entwicklers: darin stecken Personal und Abwesenheiten, Arbeitszeiterfassung, Lohnberechnung, Integrationen und der Urlaubsstand.
Die aktive Phase waren April und Mai: etwa 60 Stunden, drei Viertel der gesamten Zeit. In dieser Phase entstand alles, was mit der Lohnberechnung zu tun hat: der Kern der Berechnung, die Vergütungsregeln, die zweite Stundenquelle und die externen Integrationen. Davor rund 20 Stunden für Gerüst, Personal, Rechte, API und Zeiterfassung: am 25. April 2026 erschienen im Panel echte Benutzerkonten, und das Unternehmen führte sein Personal nicht mehr in Tabellen. Danach gezielte Ergänzungen an einem bereits laufenden Produkt.
Die Zahlen stammen aus der Repository-Historie: Commits sind über die Abstände zwischen ihnen zu Arbeitssitzungen gruppiert, die Stunden sind also eine Untergrenze und kein Export aus einem Zeittracker.
Die Module kamen an, sobald sie fertig waren, nicht als ein Release am Ende. Die gemergten Pull Requests fielen auf April, Mai und Juli, und die Auslieferung auf dem Hauptbranch wurde jedes Mal von Hand gestartet. So lässt sich arbeiten, wenn der Rücksprung auf die vorige Version einen Befehl kostet und auf jedem Branch eine Pipeline aus Stil → Analyse → Tests läuft, drei Schritte parallel.
Zum Start bekam das Team keinen Rohbau, sondern einen arbeitsfähigen Kreislauf — Personal, Abwesenheiten und Zeiterfassung, — und nutzte ihn, während Vergütungsregeln, Integrationen und Urlaubsstand noch geschrieben wurden. Für uns die übliche Reihenfolge: zuerst das, was man morgen benutzen kann, dann das, was Geld rechnet. Auf „wenn alles fertig ist“ musste niemand einen Tag warten.
Wirkung
Kommerzielle Wirkung: Stunden und Geld
Das System amortisiert sich durch eingesparte Arbeitszeit und vermiedene Fehler – bevor sie überhaupt auf der Abrechnung landen. Die Stunden sind leicht zu zählen: unten steht die Arbeit, die früher jeden Monat manuel erledigt wurde, und was davon übrig ist. Fehler sind schwerer zu beziffern, doch eine einzige Unterzahlung, die ein Quartal später auftaucht, kostet mehr als ein ganzer eingesparter Monat.
| Was jeden Monat manuel erledigt wurde | Früher | Jetzt |
|---|---|---|
| Lohnabrechnung in einer Tabelle zusammenstellenRoster, Stunden, Abwesenheiten, Zuschläge, Abgleich der Summen | 8–16 Std. | 1–2 Std. |
| Stunden aus den Trackern übertragenExport, Kopieren, Zuordnung zu Projekten | 4–8 Std. | 0 |
| Urlaubsstände zählen und abgleichenAnsprüche, Überträge, Verfall | 2–4 Std. | 0 |
| Anträge in Chats, Tabelle und Kalender führenDerselbe Urlaub an vier Stellen | 3–6 Std. | 0 |
| Streit „wie viele Tage habe ich“ klärenChat hervorholen, nachrechnen, erklären | 1–3 Std. | 0 |
| Handarbeit pro Monat | 18–37 Std. | 1–2 Std. |
Eine Schätzung für ein Unternehmen mit 30 Mitarbeitern — setzen Sie Ihre eigenen Mengen und die Sätze Ihrer HR-Managerin und Buchhaltung ein, um den Betrag in Geld zu erhalten.
Was das System in einem Jahr und in zwei Jahren bringt. Jeden Monat gibt es HR und Buchhaltung zwei bis vier volle Arbeitstage zurück. Im Jahr summiert sich das auf 24–52 Arbeitstage, in zwei Jahren auf 48 bis 105. Die gesamte Entwicklung samt Integrationen, Urlaubsjournal und Routing der Benachrichtigungen brauchte etwa 80 Personenstunden — rund zehn Arbeitstage —, deshalb kommt die investierte Zeit in den ersten drei bis fünf Monaten des Betriebs zurück, und danach ist es reiner Gewinn.
Die zwanzig Stunden, die das System bis zum Start gebracht haben, waren schon im ersten Monat wieder drin. Danach summiert sich die Wirkung nur: das System gibt weiterhin dieselben zwei bis vier Tage monatlich zurück, solange das Unternehmen es nutzt. Gerechnet wird in Zeit, deshalb lassen sich die Zahlen auf jedes Unternehmen übertragen: Sätze einsetzen, Betrag ablesen.
Anderthalb bis vier Arbeitswochen im Jahr, die HR und Buchhaltung sich aus der Routine zurückholen. Das ist der langweiligste und der verlässlichste Teil der Amortisation.
Über- und Unterzahlung, ein strittiger Ausgleich beim Austritt, ein vergessener Zuschlag. Ein solcher Fehler kostet mehr als ein Monat eingesparter Stunden — und taucht im unpassendsten Moment auf.
Ein Kreislauf für alle Prozesse. Der Stack ist offen: keine Lizenzen, Betrieb in der eigenen Infrastruktur, Weiterentwicklung mit eigenen Kräften ohne Bindung an einen Anbieter.
Wirkung
Praktische Wirkung: weniger im Kopf behalten
Am teuersten ist die Last, die im Kopf bleibt. Den aktuellen Stand im Blick behalten, wissen, wem man schreiben muss, wissen, was vor der Auszahlung zu prüfen ist – all das kostet Aufmerksamkeit, auch wenn man gerade mit etwas anderem beschäftigt ist. Das System nimmt diese Last ab.
- Mitarbeiter behalten keinen Tagesstand im Kopf, suchen nicht, wem sie schreiben sollen, füllen kein Formular aus. Ein Kanal — der, der ohnehin offen ist. Zu lernen gibt es nichts: eine Oberfläche, die man sich aneignen müsste, existiert für sie schlicht nicht.
- Die Führungskraft muss nicht herausfinden, wer aus dem Team an diesen Tagen sonst noch weg ist — das steht in der Benachrichtigung selbst. Die Entscheidung fällt mit einem Knopf, ohne Wechsel in ein anderes System und ohne späteres Zurückkommen.
- HR behält die Regeln für Anspruch, Übertrag und Verfall nicht im Kopf — die behält das System. Und prüft nicht von Hand, ob nichts vergessen wurde: auffällige Zeilen markieren sich selbst.
- Die Buchhaltung muss nicht ermitteln, woher ein Betrag stammt: die Berechnung klappt bis zur Formel mit eingesetzten Zahlen auf.
- Das Unternehmen hängt nicht mehr an einem einzelnen Menschen. Die Regeln leben im System. Die HR-Managerin kann in Urlaub gehen, krank werden oder kündigen — die Ordnung bleibt.
- Niemand gleicht Kalender, Tabelle und Abrechnung von Hand miteinander ab — eine Abweichung zwischen ihnen kann gar nicht erst entstehen.
Drei Kniffe, mit denen das gelingt:
- Das System entscheidet für den Menschen alles, was es selbst entscheiden kann. Arbeitstage, Feiertage im Land der jeweiligen Person und der Währungskurs werden automatisch eingesetzt. Gefragt wird nur, was wirklich eine menschliche Entscheidung verlangt.
- Der Hinweis kommt im Moment der Entscheidung. Tagesstand und Überschneidungen mit Urlauben der Kolleginnen und Kollegen stehen direkt im Antrag, dort, wo entschieden wird. Man muss sie nicht in einem eigenen Bericht suchen.
- Fehler fängt das System ab. Null Stunden bei Stundenbasis, eine nicht genehmigte Freistellung, ein fehlender Kurs — all das ist im Entwurf markiert. Eine Prüfliste vor dem Monatsabschluss muss niemand im Kopf haben.
Fundament
Technisches Fundament: warum das trägt
Ein internes System lebt Jahre und überdauert mehrere Besetzungen des Teams. Verlässlichkeit misst sich hier deshalb an einem: Lässt sich in zwei Jahren eine Berechnungsregel gefahrlos ändern, ohne abgeschlossene Zeiträume zu zerstören. Unten stehen sechs Stützen, jede davon im Code überprüfbar.
21 Modelle und 42 Klassen in der Service-Schicht: die Geschäftslogik ist aus Controllern und Panel in Services ausgelagert. Die Lohnberechnung ist ein eigener Kern aus Kalkulator, Roster-Builder, Durchschnittsverdiensten und Arbeitstagen. Die Stundenquellen liegen hinter einer gemeinsamen Schnittstelle: der Resolver entstand für den zweiten Tracker und kostete den Kalkulator 7 Einfügungen und 8 Löschungen, ein dritter kommt ohne Eingriff hinzu. Die Module sind über Events und Queues verbunden.
Der Code hält sich an PSR-12 und einen einheitlichen Formatter, darüber läuft die statische Analyse PHPStan auf Level fünf mit einer Erweiterung für Laravel — Typen und Modellzugriffe werden vor dem Start geprüft. Die Pipeline „Stil → Analyse → Tests“ läuft auf jedem Branch, drei Schritte parallel.
64 Testklassen, 497 Testmethoden, 11.656 Zeilen Tests. Geprüft werden die Vergütungsmodelle, Anspruch, Übertrag und Verfall von Urlaubstagen, die API und die Tracker-Synchronisation. Die Tests laufen auf einer In-Memory-Datenbank, eine eigens hochgefahrene Datenbank braucht der Lauf nicht.
Das Schema beschreiben 55 Migrationen mit 1.844 Zeilen, eindeutige Indizes stehen in 21 Migrationsdateien. Der Urlaubsstand wird als Bewegungsjournal gehalten, ein genehmigter Zeitraum ist unveränderlich. Hintergrundjobs und regelmäßige Läufe sind idempotent: ein ausgefallener Lauf wird vom nächsten nachgeholt, ohne Dopplungen.
Die Auslieferung geht in zwei Slots: die neue Version wird im freien gebaut, das Umschalten ist ein Symlink-Wechsel, der Rücksprung auf die vorige Version ein einziger Befehl. Vor der Migration wird ein Datenbank-Backup gezogen, nach dem Umschalten läuft ein Health-Check mit automatischem Rücksprung. Die lokale Umgebung startet mit einem Befehl in Containern.
17 Architekturentscheidungen sind samt Begründung und verworfenen Alternativen festgehalten — einen Abschnitt zu Alternativen hat jede davon. Daneben liegen 9 Changelog-Einträge und 18 Spezifikationen: 13 aktive und 5 im Archiv. Das System lässt sich an ein anderes Team übergeben, ohne die Logik aus dem Code zu rekonstruieren.
Ziehen Sie das Bild, um es zu betrachten
Wir bauen dasselbe System für Ihr Unternehmen
Abwesenheiten und Genehmigungen, Zeiterfassung, Lohnabrechnung, Boni und Ausgleiche, Integrationen mit Ihren Diensten — der gesamte Prozess wird an Ihre Regeln angepasst.. Wir berechnen anhand Ihrer Zahlen, wie viele Stunden das System HR und Buchhaltung jeden Monat abnimmt, und zeigen anhand von Beispieldaten, wie die Verwaltung damit funktioniert.
Der vorhandene Kern lässt sich als Grundlage nehmen: Berechnungskern, Urlaubsjournal, Rechte und Integrationen sind bereits geschrieben, mit Tests abgedeckt und dokumentiert. Das muss niemand noch einmal schreiben — und Sie bekommen Code, den jedes Team weiterentwickeln kann.
Geeignet für Unternehmen mit 20–300 Mitarbeitenden: Produktstudios und Outsourcing-Unternehmen, verteilte Teams in mehreren Ländern, Agenturen und Fertigungsbetriebe.