Arbeitszeit / Zeiterfassung - Gedanken und Modellierung

KonradN

Super-Moderator
Mitarbeiter
Wobei jetzt die jeweilige Bedeutung der Wörter und der Zusammenhang wichtig ist...

Arbeitszeit im Sinne des Gesetzes / der BG oder UVV betrachtet etwas anders als z.B. das Thema Bezahlung.

Ich darf nur begrenzt arbeiten, aber ein Flug über 10h ist natürlich möglich, so ich nicht aktiv bin.
Aber bezahlt werden muss mindestens die Zeit, die in die reguläre Zeit fällt. Je nach Branche ist das aber auch unterschiedlich.

Das kann ich jetzt am Smartphone aber nicht raussuchen .... evtl. morgen am Rechner.
 

Meniskusschaden

Top Contributor
Wer ANs länger als gesetzlich vorgeschrieben arbeiten lässt, der macht sich strafbar und trägt bei Unfall auch die Versicherungskosten, also den Schadensersatz...
Man muß aber schon den jeweiligen Sachverhalt prüfen. Es gibt ja auch den Fall, dass ein AN entgegen der Anweisungen des AG nach Dienstschluß weiter arbeitet. Da könnte eine Kappung schon im Sinne der Fürsorgepflicht angebracht sein, weil sie eine mildere und verhältnismäßigere Maßnahme als eine Abmahnung ist. Im Extremfall könnte man es vielleicht sogar als Betrugs- oder Veruntreuungsversuch des AN werten, der durch eine Kappung abgewehrt wird. Schließlich verursacht der AN durch seine nicht beauftragte Arbeit Kosten beim AG zu seinem eigenen Vorteil. Meines Erachtens geht es bei den Kappungen in der Regel um vom AG unerwünschte Arbeitseinsätze des AN, wenn auch normalerweise weniger aus Gewinnstreben sondern eher aus Übereifer.

Das schließt aber nicht zwangsläufig aus, dass eine Kappungsfunktion ein legitimes Organisationsmittel sein kann. Vielleicht kappt man ja nur, weil die Zeit ausgezahlt werden soll.
Außerdem könnte die Kappung erst einmal eine interne Maßnahme sein, um die Fälle aus dem ersten Absatz meines Postings zu identifizieren und die legitimen Arbeitszeitüberschreitungen werden wieder gutgeschrieben. So wurde es in einer Firma gehandhabt, in der ich früher mal beschäftigt war. Die gekappten Zeiten gingen zum Abteilungsleiter und der hat sie in der Regel wieder gutschreiben lassen und ggf. ein Mitarbeitergespräch geführt.
 

temi

Top Contributor
Sicher? Ich habe das z.B. auch bei Großkonzernen gesehen. Da wurde man nach 10h automatisch ausgeloggt.
Nein. Letztlich wird ein Gericht entscheiden müssen, ob etwas rechtmäßig war oder nicht.

Aber es ist erst mal zu klären, was mit Kappung überhaupt gemeint ist. Mir ging es dabei um die Kappung von Gleitzeitkonten, ab einer bestimmten Anzahl von Stunden und das ist nicht rechtmäßig. Bei der Höchstarbeitsdauer gibt es ja auch Ausnahmen in besonderen Fällen, siehe §14f ArbZG. Und ja, ich habe auch eine Firma kennengelernt, da gibt es 15 Minuten vor Erreiche der 10 Stunden eine Warnung und bei 10 Stunden eine Abmahnung. Allerdings liegt es in der Fürsorgepflicht des AG, dass die Pausen und die maximale Arbeitsdauer (und auch die Ruhezeit von 11 Stunden) eingehalten werden, also letztlich bei der Führungskraft.
 

AndiE

Top Contributor
Technich würde ich das auf jeden Fall so machen, dass ich erstmal eine Klasse Timeroom(fromTime, toTime, Reason) habe . Von der würde ich die Klassen TimeInDate und Breaks ableiten, wobei zwischen Workday und Breaks eine 1:n-Beziehung besteht. Dabei ist Workday bier die Zeit auf dem Betriebsgelände, und Breaks sind die unterschiedlichen Dinge, die man tut: Von Pinkelpause, über Essen bis zu Meetings usw. Ich würde ebenso ScheduledTimeInDate und ScheduledBreaks von Timeroom ableiten und alle vier Klassen an eine Klasse Workdate hängen.

Das eine, die Scheduled-Klassen sind also dann der geplante Tagesablauf, und die anderen Klassen der tatsächliche.

Die Planung und Auswertung würde ich aber an andere Manager-Klassen auslagern.
 

Meniskusschaden

Top Contributor
Für mich wäre das Kernstück so einer Anwendung zunächst einmal einfach nur ein möglichst schlichtes Buchungssystem, mit dem man anhand von konfigurierbaren Buchungsschlüsseln Zeit-Lastschriften und -Gutschriften auf unterschiedliche Konten des Mitarbeiters buchen kann. Die Ausprägung der Buchungsschlüssel steuert dabei die Verarbeitungen. Im ersten Schritt würde ich dabei noch nicht über Automatisierungen nachdenken, sondern zunächst so tun, als müsse alles manuell gebucht werden. Eine manuelle Buchungsmöglichkeit benötigt man ja ohnehin immer.

Dann kann man sich überlegen, welche Arten von Buchungen man braucht, um alle relevanten Vorgänge abzubilden. Ein paar einfache Beispiele könnten so aussehen:

Der Buchungsschlüssel "Soll-Arbeitszeit" könnte eine Lastschrift über 7,5 Stunden auf dem Konto "Arbeitszeit" des Mitarbeiters an einem bestimmten Arbeitstag buchen. Der Buchungsschlüssel "Brutto-Anwesenheitszeit" könnte eine Gutschrift über 8,25 Stunden erzeugen. Eine Pause wäre wieder eine Lastschrift. Eine Arbeitszeit nach 23:00 Uhr wäre eine zusätzliche Gutschrift, aber auf dem Konto "Nachtarbeit".

Bis dahin sehe ich also noch keine komplexen Klassenhierarchien sondern im Wesentlichen nur Mitarbeiter, Konten, Buchungsschlüssel und Buchungen.

Als nächstes kann man sich Gedanken über die Art von Stammdaten machen, die man benötigt, um die Soll-Arbeitszeiten der Mitarbeiter möglichst einfach zu definieren, damit man die Soll-Buchungen automatisch generieren kann.

Außerdem kann man nun Verfahren entwickeln, um weitere Buchungen automatisch zu erzeugen - z.B. aus den Ereignissen der Stempeluhren.
 

mihe7

Top Contributor
Hm... ich für meinen Teil finde den Beitrag sehr gut verständlich. Ist halt eine Buchhaltung und statt Geld wird eben Zeit auf Arbeitszeitkonten gebucht.
 

temi

Top Contributor
erstmal eine Klasse Timeroom(fromTime, toTime, Reason)
Die würde ich gar nicht vorsehen (ich meine das Speichern eines Zeitraums). Wie schon einige Vorredner (@mihe7 und @Meniskusschaden) geschrieben haben, erst mal einfach nur die Ereignisse der Buchung aufnehmen und speichern. Darin sind i. d. R. enthalten: Personal-ID, Zeitstempel, Art (IN oder OUT), Terminal-ID.

Daraus lässt sich alles andere durch entsprechende Regeln berechnen. Das ist tatsächlich eine Art Buchungssystem (es nennt sich ja auch Zeitwirtschaftssystem). Direkt am MA ist dessen IRWAZ (arbeitsvertragliche Wochenarbeitszeit) hinterlegt, die als Basis für fast alle weiteren Berechnungen dient. Daneben gibt es noch Schichtschlüssel, die aussagen, wann der MA arbeiten muss, darf, usw.

Ein Angestellter könnte im Schichtschlüssel eingestellt haben, dass seine Rahmenzeit von 6 Uhr bis 20 Uhr geht, innerhalb derer er seine tägliche Arbeitszeit (IRWAZ / 5) arbeiten muss (evtl. auch mit Unterbrechungen).

Ein Fertigungsmitarbeiter hat entsprechend mehrere mögliche Schichtschlüssel, z. B. Früh- und Spätschicht, mit entsprechenden Rahmen- und Kernzeiten.

Daneben gibt es noch Schlüssel für arbeitsfreie Tage (Sa, So), Feiertage, Gleittage, Krankheit, usw. (gibt noch viele andere).

Jetzt wird jedem Tag der Woche ein entsprechender Schlüssel zugewiesen und damit können die Buchungsereignisse für diesen Tag korrekt verrechnet werden.

Nehmen wir eine tägliche Arbeitszeit von 7 Stunden an, die Schichtschlüssel sind ganz einfach Arbeitstag (AT) und arbeitsfreier Tag (AFT). So würde das für einen Angestellten über das komplette Jahr hinweg eingestellt werden können (Rahmen- oder Kernzeiten sind hier nicht berücksichtigt).

TagMODIMIDOFRSASO
SchlüsselATATATATATAFTAFT
Anwesenheitszeit7,57,508,57,500
Gleitzeitkonto0,51,0-6,0-4,5-4,0-4,0-4,0

An einem Tag mit dem Schlüssel AT besteht eine Arbeitsverpflichtung, d. h. der MA muss anwesend sein und sein Zeit wird entsprechend verrechnet. Dadurch wird z. B. am Mittwoch, als der MA nicht anwesend war das Gleitzeitkonto mit der IRTAZ belastet. Da der Schlüssel AT ist, handelt es sich erst mal um einen unerlaubten Fehltag, der evtl. nachträglich korrigiert werden kann. Die Korrektur könnte eine Arbeitsunfähigkeitsbescheinigung oder Tarifurlaub sein, dann wird ein neuer Schlüssel AU oder TU eingestellt und der Tag wird aufgrund der Entgeltfortzahlung das Zeitkonto dann nicht mehr belasten. Es könnte auch GZ eingestellt werden, was weiterhin das Zeitkonto belastet, aber immerhin ist es dann kein Kündigungsgrund wegen unerlaubten Fehlens mehr ;) (Lassen wir mal die rechtlich korrekte Vorgehensweise für das Melden von AU und das Beantragen von TU außer acht)

An einem als arbeitsfrei eingestellten Tag, muss der MA auch nicht anwesend sein, so dass die Abwesenheit nicht zu einer Veränderung des Gleitzeitkontos führt (und auch nicht zu einer Fehlermeldung, wegen fehlender Anwesenheit). Wäre der Mitarbeiter am Samstag da, dann würde die gesamte Zeit in das Zeitkonto fließen, denn die IRWAZ ist ja an den Tagen von Mo - Fr zu erfüllen.

TagMODIMIDOFRSASO
SchlüsselATATGZATATAFTAFT
Anwesenheitszeit7,57,508,57,570
Gleitzeitkonto0,51,0-6,0-4,5-4,03,03,0

Kurze Zusammenfassung: Es reicht die Stempel-Ereignisse zu speichern und jedem einzelnen Wochentag einen Schlüssel zuzuordnen, um anschließend jede beliebige Berechnung zu machen.

Der Schichtschlüssel ermöglicht zusätzlich auch die Kontrolle der Rahmen- und Kernzeiten. Ist ein MA mit dem Schlüssel Frühschicht, an einem Tag von 14 - 22 Uhr anwesend, dann muss das zumindest mal einen Fehler anzeigen, der dann ggf. durch das Einstellen des Schlüssels Spätschicht korrigiert werden kann. Oder das System kann automatisch darauf reagieren. Bei uns ist es z. B. so, dass das System anhand der ersten Stempelzeit erkennt, welcher (für den MA freigegebene) Schlüssel eingestellt wird. Komme ich also morgens um 5:55 Uhr, dann wird der Schlüssel Frühschicht eingestellt, komme ich um 13:40 Uhr, dann der Schlüssel Spätschicht. Komme ich außerhalb der erlaubten Rahmenzeit, dann gibt es eine Fehlermeldung (an die Werkstattschreiberei), die manuell korrigiert wird.
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Kurze Zusammenfassung: Es reicht die Stempel-Ereignisse zu speichern und jedem einzelnen Wochentag einen Schlüssel zuzuordnen, um anschließend jede beliebige Berechnung zu machen.
Exakt. Hinzu kommt, dass das System allgemein genug ist (und sein sollte), um alles Mögliche abzudecken.

Wenn man z. B. an Berufskraftfahrer denkt, dann werden ggf. Daten von der elektronischen Tachoscheibe hinzugenommen, weil der Fahrer dort Lenkzeitunterbrechungen bucht und je nach Situation und tariflicher Regelung manches als Pause gilt, manches in geteilten Diensten mündet usw. Der Mist kann richtig komplex werden und da sollte man sich nicht von vornherein im Klein-Klein verlieren.
 

mihe7

Top Contributor
Hallo?!? Die Likes gebühren @temi und @Meniskusschaden, die das Gesamtsystem sehr gut und ausführlich beschrieben haben. Ich bin in dem Thema nicht wirklich drin, auch wenn ich vor zig Jahren mal genau so einen Käse mit elektronischem Fahrtenschreiber umsetzen musste. Also, Gott sei Dank nur die Software dafür :) Mehr als 100 Fahrer, drei Tarifverträge und diverse Betriebsvereinbarungen und die Informationen vom Kunden kommen stückweise. Wenn der Mond im Saturn steht und der Fahrer 343,3 Tage dem Betrieb angehört, nach Tarif A bezahlt wird und am Vortag zwischen den Fahrten nicht beim Pinkeln war, dann bekommt er pauschal 62,2 Sekunden gutgeschrieben. Das ist nicht lustig.
 

AndiE

Top Contributor
ich gehe da eher technisch ran. Nehmen wir mal an, dass wir zwei RFID-Stellen haben. Eine für Rein- und eine für Rausgehen. Dann geben die mir zwei Dateien wie "Timestap(EmployeeID,DateTime)". Ich finde aber, dass das nicht genügt. Bei uns in der Firma musste man sich ins System einloggen und dort den Beginn des Arbeitstags einloggen. Das hing aber auch damit zusammen, dass die Leute unterschiedlich anfingen und unterschiedlich lange Arbeitszeiten hatten. Die Anzeige der Arbeitszeitsverwaltung war quasi ein Dienstplan, in dem die verschiedenen Tätigkeiten eingetragen waren.

Umgedeutet heißt das dann, dass ich die Signale sende: Arbeitstag angefangen-Unterbrechung1 angefangen-Unterbrechung1 beendet - ...- Arbeitstag beendet.

Selbst wenn ich nur diese Signale speichere, brauche ich für die Bearbeitung doch eine Klasse, die den Arbeitstag des Beschäftigten darstellt. Dabei gibt es dann den Tag, wie er geplant ist, und den Tag, wie er wirklich ist. Das wäre dann das, was der Beschäftigte sieht, wenn er die Arbeitszeitverwaltung öffnet.

Da die Gleitzeit über die Woche berechnet wird, wenn ich das richtig verstanden habe, was @temi geschrieben at, brauche ich also noch eine Klasse "WorkWeek", die für die Arbeitswoche Soll-Zeit, Ist-Zeit, Fehlzeiten, Überstunden, Gleitzeit usw. ausrechnet und evtl. als Daten hält.
 

temi

Top Contributor
Die Anzeige der Arbeitszeitsverwaltung war quasi ein Dienstplan, in dem die verschiedenen Tätigkeiten eingetragen waren.
Mag sein, dass es diese Anforderung geben könnte, aber das weicht von den Aufgaben einer Zeitwirtschaft schon etwas ab und geht eher in die Richtung von Projektplanung.

Wir haben beispielsweise auch ein weiteres völlig separates System, in dem die tägliche Anwesenheitszeit unter Angabe von Tätigkeit und Kostenstelle verteilt wird. Das hat aber betriebswirtschaftliche Gründe, wenn die eigene Kostenstelle Aufgaben für andere Kostenstellen (oder Projekte, usw.) erledigt und die Kosten dafür weiter verrechnet.
 

mihe7

Top Contributor
Nehmen wir mal an, dass wir zwei RFID-Stellen haben. Eine für Rein- und eine für Rausgehen. Dann geben die mir zwei Dateien wie "Timestap(EmployeeID,DateTime)". Ich finde aber, dass das nicht genügt.
Tut es in der Form auch nicht. Du würdest die fürs Reingehen um ein "Kommen" und die fürs Rausgehen um ein "Gehen" erweitern.

Umgedeutet heißt das dann, dass ich die Signale sende: Arbeitstag angefangen-Unterbrechung1 angefangen-Unterbrechung1 beendet - ...- Arbeitstag beendet.
Ja, die Rohdaten würden ergänzt um weitere Ereignisse, die an anderen Stellen erfasst werden, z. B. für Unterbrechungen o. ä.

Die Anzeige der Arbeitszeitsverwaltung war quasi ein Dienstplan, in dem die verschiedenen Tätigkeiten eingetragen waren.
So in etwa war das auch in meinem Fall. Es gab auf der einen Seite einen Dienstplan (Soll) und auf der anderen Seite die gebuchten Zeiten (Ist). Der Typ, der die Arbeitszeitabrechnung machen musste, hat hier eine Zuordnung vorgenommen. Das hatte den Hintergrund, dass die Ist-Zeiten natürlich nicht haargenau den Soll-Zeiten entsprachen, die aber für irgendwas (geteilte Dienste? Das ist schon so lange her...) eine Rolle spielten.
 

internet

Top Contributor
habe das nun so implementiert.

TimeRecording
-> Rohdaten Erfassung
- Long id;
- LocalDate startDate;
- LocalTime startTime;
- LocalTime endTime;
- LocalTime startTimeRounding; (Zeit nach Rundungsverfahren)
- LocalTime endTimeRounding; (Zeit nach Rundungsverfahren)
- String description;
- Employee employee;
- TimeRecordingFK

TimeRecordingSetting
- Einstellung zum Rundungsverfahren

TimeRecordingCategory
- Name
- Beschreibung
- Type (Break, WorkingTime)
- TimeRecordingFK

TimeRecordingAccount (Konto)
- Name
- Beschreibung
- Kontoart (Urlaub, Krankheit, Gleitzeit, Sonstiges)
-> Je nachdem hat es Einfluss auf den Urlaub, Krankheitstage zählen...

EmployeeTimeRecording
- Einstellung für den einzelnen Mitarbeiter
- Gültig von, Gültig bis
- Kernarbeitszeiten (Mo, Di...) + Zeiten
- Automatischer Abzug von Pausen (1...n)
- Kappungsart
Täglich (wie viel Stunden)
Monatlich

Anschließend habe ich mir eine Liste gebaut, die mir dann eben ausgibt (Auswertung)
- Datum
- Tätigkeit
- Start
- Ende
- Arbeitszeit Soll (Dynamische Berechnung aus den Einstellungen des MA)
- Arbeitszeit Ist (Berechnung Start - Ende)
- Pause (Summierung der Zeiten des Typs Pause)
- Gleitzeit (alles was über die Soll Arbeitszeit geht)
- Arbeitszeit (Nach Kappung), wenn Kappung aktiv ist, was dann der Ist - Wert ist

Werde das nun mal testen...

Eine Frage ergibt sich noch bzgl. RFID.
Wie genau funktioniert das? Ist das wie ein Barcode Scanner, der mir die ID (bspw. Personalnummer) dann in den Computer einließt?
Wie kann ich das noch implementieren? Was benötige ich hierzu technisch?
 

mrBrown

Super-Moderator
Mitarbeiter
Gefühlt hast du damit gekonnt fast alle Tipps ignoriert😬
Eine Frage ergibt sich noch bzgl. RFID.
Wie genau funktioniert das? Ist das wie ein Barcode Scanner, der mir die ID (bspw. Personalnummer) dann in den Computer einließt?
Wie kann ich das noch implementieren? Was benötige ich hierzu technisch?
bis auf das reine Lesen (was bei Barcodes oä logischerweise anders funktioniert) ist das technisch nahezu identisch, hat aber absolut nichts mit Java zu tun. Zum „implementieren“ brauchst du entsprechende Hard- und Software (das ist in den meisten Fällen nichts, was man selber machen würde) und wahrscheinlich eigene Software, die die „Events” passend verarbeitet, so wie du sie brauchst, also zB an dein Backend weiter gibt.
 

Jw456

Top Contributor
Zum RFID du wirst nur die ID der Karte bekommen. Nicht die Personal Nummer vom Arbeiter.
Oder vergibst du einem Arbeiter eine neue PNR wenn die Karte kaput ist verloren...
 

AndiE

Top Contributor
Ich würde mal den "Bleistifttest" machen.

Der Angestellte "Hans" mit einer 8-Stunden-Schicht, die normalerweise von 7 bis 16 Uhr gehen soll, checkt um 6.50 ein und um 16.10 wieder aus.

Wie setzt dein System das um? Mach mal eine Skizze, wann was passiert.
 

internet

Top Contributor
Du möchtest ja auch selbst noch etwas machen und nicht nur abschreiben ;)
o_O ich habe doch bereits einen Vorschlag oben gemacht? Was meinst du?

Ich würde mal den "Bleistifttest" machen.

Der Angestellte "Hans" mit einer 8-Stunden-Schicht, die normalerweise von 7 bis 16 Uhr gehen soll, checkt um 6.50 ein und um 16.10 wieder aus.

Wie setzt dein System das um? Mach mal eine Skizze, wann was passiert.
Prinzipiell gibt es eine Stempeluhr mit 3 Buttons:
- Kommen
- Pause
- Gehen (auch Pause beenden)

Kommen:
- TimeRecording
- ID 1
- start 06:50 Uhr
- Kategorie (bspw. Arbeitszeit)

Pause (12 Uhr)
- Objekt mit ID1 wird aktualisiert:
Ende = 12:00 Uhr

- Neues Objekt (ID2) wird erstellt
- ID2
- Start: 12:00 Uhr
- Kategorie: Standard Kategorie für Pause

Pause beenden (12:30 Uhr)
- Objekt mit ID1 wird aktualisiert:
Ende = 12:30 Uhr

-> Mitarbeiter muss nun wieder einstempeln mit Kommen
Kommen:
- TimeRecording
- ID 3
- start 13:30 Uhr
- Kategorie (bspw. Arbeitszeit)

Gehen
- Objekt mit ID3 wird aktualisiert:
Ende = 16:10 Uhr


Damit habe ich eine Liste mit 3 Objekten
DatumStartEndeKategorie
01.01.202206:1012:00Arbeitszeit
01.01.202212:0012:30Pause
01.01.202212:3016:10Arbeitszeit

Die reinen Fakten zu speichern (kein Endedatum), ist auch ein valider Punkt, nur dann sehe ich hier deutlich mehr Komplexität eine Liste wie diese auszugeben...
 

temi

Top Contributor
ich habe doch bereits einen Vorschlag oben gemacht? Was meinst du?
Gefühlt hast du damit gekonnt fast alle Tipps ignoriert
Warum? Was hättest du anders gemacht?
Das steht doch alles in den Beiträgen zuvor
Ein Datenmodell (wie ich oben aufgelistet habe), kann ich nicht sehen?
Du möchtest ja auch selbst noch etwas machen
Alles klar?
 

internet

Top Contributor
Was sollen mir deine Verlinkungen auf meine eigene helfen?

ich habe ein konkretes Datenmodell erstellt. @mrBrown sagt das würde nicht passen.
Ein Datenmodell habe ich von keinem bisher konkret gesehen, nun hätte ich gerne eine Erklärung.
 

KonradN

Super-Moderator
Mitarbeiter
Schau doch einfach noch einmal durch den Thread durch. Was ist denn alles gesagt worden?

Also auch gerade so Beiträge wie z.B. #57. Da ist von @temi ja schon einiges ausgeführt worden. Aber davor gab es ja auch schon sehr viele Hinweise.

ich habe ein konkretes Datenmodell erstellt. @mrBrown sagt das würde nicht passen.
Nein, er sagt, dass Du die ganzen Hinweise (gefühlt) ignoriert hast. Wenn das Datenmodel so für Dich passt, dann ist es doch gut. Wir kennen Deine genauen Anforderungen nicht. Du hast auch zu den Hinweisen sehr wenig Rückmeldung gegeben. Daher fehlt uns einfach das Wissen, das zu bewerten!

Klar ist: Wir würden es anders machen. Du willst es so machen. Da ist nicht viel mehr zu diskutieren oder von uns beizutragen: Du willst es so machen, also mache es so.
 

internet

Top Contributor
Ich sage nicht, dass es 100% richtig ist, aber behaupte, dass es aktuell passt und mir das gewünschte Ergebnis ausgibt..

Gerade dieser Post zeigt ja nochmal auf, wie der Prozess ist....Ich denke, dann wird es nochmal deutlicher.
Ich nehme aber gerne auch Kritik und anderweitige Vorschläge an :)
 

mihe7

Top Contributor
Die reinen Fakten zu speichern (kein Endedatum), ist auch ein valider Punkt, nur dann sehe ich hier deutlich mehr Komplexität eine Liste wie diese auszugeben...
Nein, das ist nur "zusätzlich". Du speicherst die Ereignisse, statt sie sofort auszuwerten. Das hat u.a. den Vorteil, dass Du das, was der Mitarbeiter gestempelt hat, immer zur Verfügung hast. Die Bewertung (z. B. manuelle Korrekturen) ist dann klar getrennt. Bei Unstimmigkeiten (Interpretationsprobleme) oder für andere Anforderungen kann man auf die Rohdaten zurückgreifen.
 

mrBrown

Super-Moderator
Mitarbeiter
Konkret zu deinem Datenmodell: die meisten Dinge sind entweder zu unspezifisch (was ist TimeRecordingFK?) um etwas zu sagen, oder unpassend (zB NIEMALS LocalTime für sowas nutzen!).
Und ein weiteres Problem hast du auch schon selbst gezeigt: Informationen liegen doppelt vor, jeweils als Ende des einen und Anfang des nächsten.
Und dann enthält dein Model zig Entitäten, deren Beziehung nirgends gezeigt wird, dazu man also nicht viel sagen außer „sieht komisch aus“.
 

internet

Top Contributor
Danke für die Antwort

- TimeRecordingFK ist der Fremdschlüssel auf die Tabelle / Entity TimeRecording
- Weshalb nicht LocalTime verwenden?

Ich tue mir noch schwer, was die Ermittlung des "Gleitzeitkontos" anbelangt.
Prinzipiell ist das ja nur eine Zahl, die sich dynamisch berechnet.
Also möchte ich eine Auswertung von Tag X bis Tag X machen, bekomme ich den Wert des Saldos
-> Was sind die Ist - Stunden & was sind die Soll - Stunden.... Die Differenz ist dann der Gleitzeitsaldo

Die Frage ist für mich aber, wenn ich bspw. bei der Stempeluhr mir immer den aktuellen Saldo anzeigen möchte.
1. In der Datenbank steht er nicht, da dynamisch berechnet
2. Die dynamische Berechnet kann länger dauern, denn ich muss:
a) Mir alle Objekte aus der Zeiterfassung holen
b) Prüfen, ob der Tag ein Urlaubstag war
c) Prüfen, ob der Tag ein Feiertag war

-> Kann man sicher so machen, aber wenn der Mitarbeiter bpsw. 10 Jahre im Unternehmen ist, muss ich mir sämtliche Zeiten aus der Datenbank holen, Urlaubstage, Feiertage....?

Eine andere Möglichkeit, wäre dass ich mir eine Entity "TimeRecordingMonth" anlege und dann eben pro Monat den aktuellen Stand "einfriere".
Den aktuellen Saldo bekomme ich dann eben, wenn ich mir den letzten Monat hole und dann vom aktuellen Monat dies noch adhoch berechne...

Wie macht man das?
 

Jw456

Top Contributor
-> Kann man sicher so machen, aber wenn der Mitarbeiter bpsw. 10 Jahre im Unternehmen ist, muss ich mir sämtliche Zeiten aus der Datenbank holen, Urlaubstage, Feiertage....?
wieso das denn du brauchst doch nur die Daten des aktuellen Monat.
Das fertige Ergebnisse kannst du doch in einer anderen Tabelle führen.
Dann weist du immer beim berechnen des aktuellen Monat wie viel im alten plus oder minus war.

Urlaub Krank Überstundenabbau... würde ich auch ineiner anderen Tabelle führen.
 

internet

Top Contributor
wieso das denn du brauchst doch nur die Daten des aktuellen Monat.
na du musst doch die Überstunden, die der Mitarbeiter im Vormonat hatte dazu zählen...

Das fertige Ergebnisse kannst du doch in einer anderen Tabelle führen.
Dann weist du immer beim berechnen des aktuellen Monat wie viel im alten plus oder minus war.
du meinst damit meine andere Möglicheit (Tabelle: TimeRecordingMonth) ?
 

internet

Top Contributor
Also eine Tabelle (TimeRecordingMonth), die mir dann pro Monat und Mitarbeiter das speichert?

- ID
- Year
- Month
- Ist Arbeitszeit
- Soll Arbeitszeit
- Saldo (Gleitzeitkonto)
- Kappung (falls gekappt wurde)
- Auszahlung (was dem MA ausgezahlt wurde)
- Urlaubstage
- Krankheitstage
- Status (Offen, Abgeschlossen)
- Mitarbeiter

Erstellen könnte man den Eintrag in der Tabelle sobald der Mitarbeiter den Report aufruft, bzw wird eben geschaut, ob es für diesen Monat bereits einen Eintrag TimeRecordingMonth gibt.

Nein: Neu erstellen
Ja: Objekt laden und aktualisieren mit den neu berechneten Zahlen für diesen Monat
 

temi

Top Contributor
Das wäre denkbar. Es ist durchaus üblich, dass die Zeitnachweise für die Mitarbeiter monatlich erstellt werden (z. B. in Papierform, wenn der MA keinen PC-Zugriff hat).
Mir ist gerade der Begriff "Snapshot" dafür in der Sinn gekommen. Für die aktuelle Berechnung kann man sich auf den letzten (z. B. monatlich automatisch erstellten) Snapshot beziehen. Im Notfall könnte aber von einem beliebigen, früheren (aus den Rohdaten, ggf. mit Korrekturen) Zeitpunkt (oder Snapshot) gerechnet werden.
 
Y

yfons123

Gast
ist zwar wichtig hier einzuhaken, möchte aber das Thema nicht wieder komplett abschweifen lassen.

Mögliche Kappungen:
- Pro Tag, bspw. nach 12 Stunden
- Pro Monat bpsw. maximal 30 Überstunden
also du musst auf jeden fall aufnehmen wie lange er tatsächlich da war + wie viel zeit ihm angerechnet wird
 

temi

Top Contributor
ist zwar wichtig hier einzuhaken, möchte aber das Thema nicht wieder komplett abschweifen lassen.

Mögliche Kappungen:
- Pro Tag, bspw. nach 12 Stunden
- Pro Monat bpsw. maximal 30 Überstunden
Dann ohne viel Abschweifen. Kappung ist auf jeden Fall kritisch zu sehen, weil vermutlich in den meisten Fällen nicht rechtmäßig. Das kann das Arbeitsgericht dann prüfen.
 

KonradN

Super-Moderator
Mitarbeiter
für diese speicherung brauchst du aber die einwilligung des anderen
Wenn es hier um die Erfassung von Arbeitszeiten geht, dann ist keine explizite Einwilligung des Arbeitnehmers notwendig (Art 6 (1) a DSGVO). Diese Daten müssen ja erfasst werden zur Gehaltsabrechnung, daher zieht Art 6 (1) b:
die Verarbeitung ist für die Erfüllung eines Vertrags, dessen Vertragspartei die betroffene Person ist, oder zur Durchführung vorvertraglicher Maßnahmen erforderlich, die auf Anfrage der betroffenen Person erfolgen;
Und evtl. auch Art 6 (1) c da der AG ggf. Nachweise führen muss, dass das Arbeitszeitgesetz eingehalten wurde:
die Verarbeitung ist zur Erfüllung einer rechtlichen Verpflichtung erforderlich, der der Verantwortliche unterliegt;

Also bitte nicht ständig mit dem DSGVO kommen, nur weil Du da eine Schulung hattest (oder die Schulung erneut besuchen, denn das sind ja Grundlagen der DSGVO. Art 5 und 6 sollten da auf jeden Fall sitzen).

Aber @temi kann als BR dazu evtl. noch etwas sagen. Wenn da Daten gespeichert werden und es einen Betriebsrat gibt, dass dürfte es da gewisse Pflichten zur Mitwirkung geben, wobei ich mich damit nicht auskenne. Das kann also ein Informationspflicht sein aber auch eine Genehmigungspflicht.
 

temi

Top Contributor
Aber @temi kann als BR dazu evtl. noch etwas sagen. Wenn da Daten gespeichert werden und es einen Betriebsrat gibt, dass dürfte es da gewisse Pflichten zur Mitwirkung geben, wobei ich mich damit nicht auskenne.
Die Einhaltung der DSGVO ist Sache des Unternehmens. Der BR hat hier die Aufgabe, das zu überwachen (aber auch im Sinne von unrechtmäßig gespeicherten Daten oder Löschfristen, Verarbeitungsverzeichnis usw.). Aber mit der Überwachung der Arbeitszeit (über 8 Stunden) gemäß ArbZG gibt es dafür natürlich eine gesetzliche Grundlage im Sinn der DSGVO. Die Verhaltenskontrolle der Mitarbeiter bezüglich der betrieblichen Arbeitszeiten (insb. Kernzeiten) ist allerdings mitbestimmt. Es können dadurch ja auch arbeitsrechtliche Konsequenzen (Abmahnung, Kündigung) entstehen.

Die Einführung von Software unterliegt immer der Mitbestimmung, weil es Rechtsmeinung ist, dass Software immer zur Leistungs- und Verhaltenskontrolle geeignet ist.
 

Neue Themen


Oben