tüit Logo

HR Addon

https://github.com/phamos-eu/HR-Addon

Einführung in HR Addon

Einleitung

Die Basis-Funktionen von ERPNext reichen in komplexeren Arbeitszeitmodellen leider nicht aus, um die Anforderungen aller potenziellen Anwender des Systems zu bedienen. Meist lassen sich nur Ganztagstermine bei der Abwesenheit oder Anwesenheit erfassen.
Das HR Addon ist eine Erweiterung, die auf den Basis-Funktionen und Prozessen von ERPNext aufbaut und mit Daten, welche bereits über die Standardfunktionen im Modul Personalwesen (HR) generiert und verfügbar gemacht werden, arbeitet.

Einige Funktionen, die wir mit diesem Addon bedienen können

Voraussetzungen

Das Verfahren um den Workday sinnvoll zu nutzen basiert darauf, dass wir

Arbeitszeitmodelle

ERPNext sieht in seiner Basis-Funktion nicht vor, dass eine Angabe zu den SOLL Stunden eines Mitarbeiters gemacht wird. Damit wir in der Lage sind SOLL und IST Stunden gegenüberzustellen, können wir in HR Addon den DocType Weekly Working Hours erstellen.

In diesem DocType können wir pro Mitarbeiterin ein Arbeitszeitmodell einstellen. Wir geben an, an welchen Tagen der Woche sie zu wie vielen Stunden arbeiten soll.

Workday

Der DocType Workday repräsentiert einen Tag, an welchem eine Mitarbeiterin arbeiten könnte. Hierzu gehören neben der üblichen Arbeitswoche Montag bis Freitag auch Wochenenden und Feiertage. Es gilt, dass wir für einen vollständigen Datensatz also pro Mitarbeiterin und Tag einen Workday im System erzeugen wollen.

Die Funktion Process Workday erlaubt es uns pro Mitarbeiterin und definierten Zeitraum aus den vorhanden Daten (Employee Checkin und Attendance) Workdays zu generieren.

Weiter bekommt der Workday die SOLL Stunden über die hinterlegten Weekly Working Hours der entsprechenden Mitarbeiterin.

Auswertung

Die unterschiedlichen Ansichten des Workdays (Liste, Bericht etc.) erlaubt es uns, mithilfe von Filtern die gewünschten Auswertungsergebnisse zu erreichen.

Benutzeroberfläche

Damit das Addon optimal genutzt werden kann, sollten wir die relevanten Doctype an einigen Stellen händisch nachfassen

Arbeitstag (Workday)

Einleitung

Im Arbeitstag finden wir informationen über die Person, das Datum, Anwesenheit und Status sowie den Stempelungen (Employee Checkin) der Mitarbeiterin. Aus diesen Informationen ergeben sich IST Arbeitszeiten. Auch die Pausenzeiten werden mit errechnet.

image-1654041118281.png

Einige Felder sind leider nicht in der normalen Installation der App enthalten und müssen ggf. händisch nachträglich eingebaut um das gleiche Ergebnisse wie es hier dokumentiert ist zu erreichen.

Felder

Bezeichnung

Feldname

Erklärung

   

Verlinkung zur Mitarbeiterin (DocType Mitarbeiter)

   

Holt sich den vollständigen Namen aus dem Mitarbeiterstamm.

   

Verlinkung zur Anwesenheit welche mit der Mitarbeiterin und dem Datum übereinstimmt.

   

Datum des Arbeitstags.

   

Status welcher an der Anwesenheit beim erstellen des Eintrags eingestellt war.

 
Employee Checkins

In dieser Tabelle werden die Stempelungen (Employee Checkins) welche für Mitarbeiterin und Tag verfügbar sind gesammelt und dargestellt.

Bezeichnung Feldname Erklärung
    Hier sehen wir die Soll Stunden welche in der zum Datum gültigen Weekly Working Hours der Mitarbeiterin eingestellt war.
    Hier werden die Ist Stunden der Mitarbeiterin, basierend auf den in der Tabelle Employee Checkins angezeigten Einträge errechnet.
    In diesem Feld werden die Pausenzeiten errechnet. Die Daten stammen ebenfalls aus der Tabelle Employee Checkins
Bezeichnung Feldname Erklärung
    Die erste Stempelung des Tages
    Die letzte Stempelung des Tages
    Verknüpfung zum Unternehmen.

 

Process Workday

In der Listenansicht des DocTypes sehen wir einen Button Process Workday. Mit diesem können wir für eine Mitarbeiterin und Zeitraum die Arbeitstage generieren lassen. Dabei wird für jeden Tag im angegeben Zeitraum die Information über Anwesenheit und Stempelungen pro Arbeitstag im DocType Arbeitstag, pro Tag, zusammengefasst.

Es empfiehlt sich die Zeiträume der Verarbeitung klein zu halten. Eine Verarbeitung pro Woche oder Monat kann eine sinnvolle Größe sein.

image-1654042838479.png

image-1654043068834.png

Bevor der Prozess ausgelöst wird, werden wir ein letztes Mal gefragt, ob wir diesen wirklich ausführen möchten

image-1654043174740.png

 

Wöchentliche Arbeitsstunden (Weekly Working Hours)

Einleitung

Hier können wir pro Mitarbeiterin einstellen an welchen Tagen der Woche wie viele Stunden gearbeitet werden soll. Die Eingabe dient der späteren Gegenüberstellung von Soll und Ist Stunden.

image-1654042092292.png

Felder

Bezeichnung Feldname Erklärung
Mitarbeiter   Verknüpfung zur Mitarbeiterin für welche dieser Datensatz gilt.
Mitarbeitername   Holt den vollständigen Namen aus dem Mitarbeiterstamm.
Von Datum   Datum ab wann dieser Datensatz gültig ist.
Bis Datum   Datum bis wann dieser Datensatz gültig ist.

 

Weekly Working Hours

In diesem Abschnitt finden wir eine Tabelle in welcher wir pro Wochentag einstellen wie viele Stunden gearbeitet werden sollen.

Die Tabelle muss vollständig, also von Montag bis Sonntag, gefüllt sein damit Arbeitstage automatisch erstellt werden können.

Bezeichnung Feldname Erklärung
  total_work_hours Summiert die Stunden der Tabelle. Das Feld dient zur Kontrolle und gibt Möglichkeiten der Auswertung per Filter.
Unternehmen company Verknüpfung zum Unternehmen.

Hinweise

Generierung eines Work Hour Reports

Dies ist der aktuelle Stand der Berichte nach der Installation des HR-Addons (Branche v14) in ERPNext 14.

https://github.com/phamos-eu/HR-Addon/pull/29

Pro Mitarbeiter kann man in diesem Bericht tägliche Über- und Unterstunden bei der Arbeitszeit sehen. Pausen werden auf Wunsch abgezogen und alle Arbeitszeiten summiert.
So kann der übersichtliche Work Hour Report erzeugt werden:

Schritt 1:
Zunächst müssen die Anwesenheiten (Attendance) im passenden Shift Typ (Schichttyp) generiert werden.
Dabei kann ein passendes Start- und Enddatum eingetragen werden.

Process Attendance After = Starttag der Auswertung. Bei uns 1.4.2023.
Das "After" ist hier leider nicht korrekt. Man gibt wirklich den ersten auszuwertenden Tag ein.
Last Sync of Checkin = Ein Tag nach dem letzten auszuwertenden Tag. Dies muss immer wieder aktualisiert werden, um neue Anwesenheiten zu generieren. 
Bereits vorhandene Meldungen der An- oder Abwesenheit (zum Beispiel aus Leave Application) werden dabei nicht überschrieben.

Welcher Shift Typ hier zu verwenden ist, ist im jeweiligen Mitarbeiter (Employee) hinterlegt. Erzeugt man für diesen Typ die Anwesenheit, so tut man dies für alle mit dem Typ verbundenen Mitarbeiter.

Erst wenn alle An- oder Abwesenheiten generiert wurden, können Stempelungen an Feiertagen und Wochenenden korrekt bei der Generierung der Workday[s] erfasst werden!

Schritt 2:
Jetzt öffnet man das DocType Workday:
https://IHRE DONAIN/app/workday
Hier bitte "Process Workdays" anklicken. Im sich öffnenden Menü bitte Zeitraum und Mitarbeiter wählen.
Die Gesamtstundenzahl wird berechnet.
Dies muss leider für jeden Mitarbeiter einzeln erfolgen.

Schritt 3:
Ab jetzt kann man auf dem Bericht Work Hour Report die generierten Daten sehen.
Link zum Bericht:
https://IHRE DOMAIN/app/query-report/Work%20Hour%20Report

Dieser ist auch für alle Mitarbeiter in ihrem Arbeitsbereich/Workspace Übersicht Arbeitszeit einsehbar.
https://IHRE DOMAIN/app/%C3%BCbersicht-arbeitszeit

Pausenzeiten korrekt berechnen

Erwartete Pausen werden normalerweise von der Gesamtarbeitszeit des Tages abgezogen, auch wenn zum Beispiel ein Teil des Tages als Überstundenausgleich "abgebummelt" wird. Sprich, wenn man nur 2 Stunden arbeitet und 6 Stunden Überstunden einlöst, wird dennoch eine erwartete Pause von der geleisteten Gesamtarbeitszeit abgezogen. 
An normalerweise arbeitsfreien Tagen ist dies nicht der Fall.

Anders ist das aber, wenn man in Weekly Working Hours bei einem Mitarbeiter die Option "No break hours if target hours is less than 6 hours" aktiviert. Dann geht das System davon aus, dass der Arbeiter bei unter 6 h Arbeitszeit am Tag auf jeden Fall keine Pause gemacht hat.

Dokumentation:
https://github.com/phamos-eu/HR-Addon/pull/44

Vorgehen im Detail:

00000002222.jpg

Wenn "Hours worked" im später generierten Workday unter 6 Stunden ist, wird "Expected Break Hours" ab jetzt auf 0 gesetzt und somit wird keine Pause mehr von "Actual Working Hours" abgezogen.

Arbeitszeiterfassung an Feiertagen, an denen der Mitarbeiter normalerweise arbeiten würde

Soll auch an Feiertagen gearbeitet werden, an denen der Mitarbeiter ansonsten laut Weekly Working Hour Arbeitsstunden verrichten müsste, muss man folgendes tun.

Siehe auch:
https://github.com/phamos-eu/HR-Addon/pull/48

Öffnen von Weekly Working Order des jeweiligen Angestellten.
Hier gibt es ein Feld "Set Target Hours to Zero when date is holiday", dass die korrekte Berechnung von Stempelungen an einem Feiertag ermöglicht. Normalerweise ist dies deaktiviert.

weekly.JPG

Die Option ist deaktiviert:
Das System wird so einen Tag zu einem normalen Arbeitstag umdeuten und die erwartete Arbeitszeit im Workday und separat in der Zeile Target Seconds des Work Order Reports so ausfüllen, wie das die Weekly Working Order vorgibt. Dabei kann man die Angabe in Workday anpassen, es wirkt sich aber nicht auf das Feld Target Seconds oder die Summenberechnung in Work Order Report aus.

Wenn die Option aktiviert ist:
Wenn diese Funktion aktiviert ist und das Datum des Workday identisch mit einem Holiday List Eintrag ist, so wird die Spalte Target Seconds ind Work Order Report auf 0 gesetzt. 
In Workday wird das Feld Target Hour ebenfalls auf 0 gesetzt.
Dadurch können nun Stempelungen des Mitarbeiters komplett als Überstunden auf dem Work Order Report erfasst und angezeigt werden.

Überstundenabbau

Um Überstunden abzubauen, reicht es auch einfach keine Stempelung zu einem bestimmten erwarteten Zeitraum zu haben.
Will man dies aber anmelden und genehmigen lassen, kann dies zwar über einen beliebig benannten Leave Type erfolgen, nach der Buchung gibt es aber keinen, der sich dann nicht auf die Arbeitszeit/den Workday auswirkt.
Daher muss die Buchung aktuell unterbleiben. Die Genehmigung kann aber dennoch so hinterlegt werden.
Durch den Changelog am Ende der Leave Application kann man stets sicherstellen, dass die Daten nur durch einen passenden User genehmigt wurden.

Berücksichtigte Fälle im Überblick

Hier eine kleine Übersicht der getesteten Anwendungsfälle, welche sich mit dem HR Addon abbilden lassen:

Kalenderexport zu genehmigten Urlaubsanträgen

Einleitung:

Über das DocType "Leave Application" (Urlaubsantrag) kann ein Urlaubsantrag, ein Abbau von Überstunden oder eine Krankmeldung durch die Mitarbeiter eingereicht werden.
Wenn dieser genehmigt und danach der Eintrag gespeichert wird, soll ein Kalenderexport mit allen genehmigten Terminen erfolgen.
Dabei wird immer wieder ein und dieselbe Datei als Ziel genutzt. 
Wenn der Link bekannt ist, kann die Datei von jedem Nutzer gezogen und in ein eigenes E-Mailprogramm eingebunden werden.

Achtung:
Werden alte Termine verändert (also gecancelt oder mit anderem Status versehen) wird sich diese Änderung erst nach dem nächsten Speichern in der ICS-Datei befinden. Das Speichern erfolgt, wenn eine Urlaubsantrag (Leave Applcation) mit dem Status „genehmigt“ gespeichert wird.


Ansatz bisher:

Siehe GitHub-Verlauf:
https://github.com/phamos-eu/HR-Addon/pull/51
https://github.com/phamos-eu/HR-Addon/pull/52
(Kleine Änderungen - ICS-Datei soll öffentlich sein und die Überschrift des Eintrags ist Employee name statt Employee, es soll immer wieder die gleiche Exportdatei erzeugt werden)
https://github.com/phamos-eu/HR-Addon/pull/53
(Erzeugen nur einer Exportdatei, die immer wieder überschieben wird.)
https://github.com/phamos-eu/HR-Addon/pull/54
(Optimierung für Outlook - Kalendereintragende wird um einen Tag erhöht, weil das System es so erwartet.)


Was inden Kalender exportiert wird:

Head/Title:
Employee name Leave Type (Employee statt Employee name)


Speicherort der ICS-Datei:


Siehe auch:
https://github.com/phamos-eu/HR-Addon/pull/59
https://github.com/phamos-eu/HR-Addon/pull/60

Bitte den folgenden Link öffnen oder in das DocType HR Addon Settings gehen:
https://v14-hr.frappe.cloud/app/hr-addon-settings/HR%20Addon%20Settings

An dieser Stelle kann der aktuelle Link zur ICS-Kalenderdatei abgelesen oder verändert werden.

Ist im Feld "Name of calendar export ICS file" noch kein Eintrag vorgenommen worden, wird beim Speichern automatisch ein 24 Zeichen langer zufällig generierter Name vergeben. Bei einer Eingabe unter dieser Mindestlänge erscheint eine Fehlermeldung.

262683941-dc34e0f6-3f2c-4dfa-b8ca-692b5edbe7ae (1).gif

Der nun generierte Link zur Datei gestaltet sich so:
https://LINK ZUR SEITE DES UNTERNEHMENS/files/NAME DER ICS DATEI.ics

Vor eingestellt ist folgender Link:
https://IHRE URL/files/Urlaubskalender.ics
Das Wort Urlaubskalender kann also in der neuesten Version beliebig verändert werden, solange der Name danach mindestens 24 Zeichen enthält.

Die alte Kalenderdatei wird gelöscht, wenn Name und Link angepasst werden.
(siehe https://github.com/phamos-eu/HR-Addon/pull/60 )
Da in jeder Kalenderdatei die Gesamtheit aller Urlaube exportiert wird, gehen dabei alte Termine auch nicht verloren.