# HR-KPI-Pruefung gegen Schweizer Praxis und HR-Best-Practices Stand: 2026-05-13 Zweck dieses Dokuments: - fachliche Pruefpunkte fuer den neuen Reiter `HR KPI` sammeln - keine Codeaenderung ausloesen - sichtbar machen, welche Kennzahlen bereits plausibel sind und wo vor produktiver Nutzung noch HR-/Fachentscheid noetig ist ## Quellen und Massstab Verwendeter Massstab: - Schweizer Absenzverstaendnis gemaess BFS/AVOL: Absenzen sind Zeiten, in denen eine Person normalerweise haette arbeiten muessen, aber nicht gearbeitet hat. Ferien/Feiertage und flexible Arbeitszeitreduktionen sind keine Absenzen. - Obsan/BFS-Definition fuer gesundheitsbedingte Absenzen: Krankheit und Unfall; Absenzenquote = Absenzen als Prozent der vertraglich festgelegten Jahresarbeitszeit. - Internationale HR-Controlling-Praxis fuer Fluktuation: Austritte im Zeitraum geteilt durch durchschnittlichen Headcount im Zeitraum. Freiwillige und unfreiwillige Austritte sollten getrennt ausgewiesen werden. Referenzen: - BFS Arbeitsvolumenstatistik / Definitionen: https://www.bfs.admin.ch/bfs/de/home/statistiken/arbeit-erwerb/erhebungen/avol.html - Obsan/BFS Absenzen Krankheit/Unfall: https://ind.obsan.admin.ch/de/indicator/pflemo/absenzen-durch-krankheitunfall - BAG/Obsan MonAM Absenzen Krankheit/Unfall: https://ind.obsan.admin.ch/fr/indicator/monam/absences-au-travail-pour-cause-de-maladie-ou-d-accident-age-15 - CIPD Retention/Turnover Guidance: https://www.cipd.org/en/knowledge/guides/employee-retention/ - SHRM-nahe Turnover-Formel, oeffentlich referenziert: Separations / Average Employees * 100 ## Aktueller Umsetzungsstand im Reiter Der Reiter liest aktuell: - `C:\temp\Saldiperstichdatum.xlsx` als Hauptquelle Rexx #757 - `C:\temp\Exportkommengehen.xlsx` fuer Geburtsdatum / Arbeitszeitmodell - `C:\temp\HR_KPI_Export.xlsx` fuer SAP-Felder - `C:\temp\Abwesenheitinstunden.xlsx` fuer Krankheit/Absenzen aus Rexx #744 - `C:\temp\Personalausgeschieden.xlsx` fuer Austritte/Fluktuation aus Rexx #381 Die Power-Query-/DAX-Logik wurde nicht als Interpreter umgesetzt, sondern als C#-Nachbau. ## Pruefpunkte mit moeglicher Abweichung ### 1. Fluktuationsnenner: Durchschnittlicher Headcount Aktueller Reiter: - `Headcount Monat` wird als Durchschnitt aus Monatsanfang und Monatsende gerechnet. - `Avg Headcount Quartal` ist der Durchschnitt der Monats-Headcounts im Quartal. - `Avg Headcount Jahr` ist der Durchschnitt der Monats-Headcounts im Jahr. - Die Berechnung nutzt Headcount, nicht FTE, und zaehlt nur Festangestellte. Best Practice: - Fluktuation sollte fuer Monat, Quartal und Jahr mit durchschnittlichem Headcount des jeweiligen Zeitraums gerechnet werden. - Das entspricht der Vorgabe aus `formeln.docx`. Pruefen: - Die aktuelle Berechnung rekonstruiert Monats-Headcounts aus Eintritts-/Austrittsdatum der aktiven Mitarbeitenden und der Austrittsdatei. - Echte historische Monats-Snapshots waeren fuer ein auditierbares Reporting noch genauer. Status: - fachlich deutlich naeher an `formeln.docx` - als Reporting-Definition mit HR bestaetigen, falls HR echte Monats-Snapshots verlangt ### 2. Freiwillige vs. unfreiwillige Austritte Aktueller Reiter: - `Ist_Arbeitnehmerkuendigung` versucht freiwillige Arbeitnehmer-/Mitarbeiterkuendigungen anhand Textmustern zu erkennen. - Praktikanten, Werkstudenten, Aushilfen, Lehrlinge, Pensionierungen, befristete Vertraege und Kuendigungen durch Trafag werden ausgeschlossen. Best Practice: - Total Turnover und Voluntary Turnover getrennt ausweisen. - Fuer Retention ist freiwillige Fluktuation meist entscheidender als Gesamtaustritte. Pruefen: - Sind alle Rexx-Austrittsarten stabil und vollstaendig gemappt? - Gibt es lokale Schreibweisen wie `Kdg AN`, `Eigenkuendigung`, `Aufhebungsvereinbarung`, `Mutual agreement`, `Ende Probezeit`? - Soll `Aufhebungsvereinbarung` zaehlen oder separat ausgewiesen werden? Status: - HR-gepruefte Grundlogik vorhanden - Mappingliste muss bei neuen Austrittsarten gepflegt/validiert werden ### 3. Fluktuation Quartal/Jahr ohne echte Monats-Snapshots Aktueller Reiter: - Quartals-/Jahresraten werden ueber Austrittsdatum gefiltert. - Headcount wird aus Eintritts-/Austrittsintervallen pro Monat rekonstruiert. Risiko: - Wenn historische Korrekturen oder Rueckdatierungen nicht in den Dateien enthalten sind, koennen rekonstruierte Monatswerte von offiziellen HR-Snapshots abweichen. Pruefen: - Falls HR monatliche Headcount-Snapshots liefert, diese spaeter als bevorzugte Quelle fuer den Nenner verwenden. Status: - operativ passend zur Formel in `formeln.docx` - fuer Audit/Abschluss mit HR-Snapshot abgleichen ### 4. Absenzenquote: 21 Arbeitstage pauschal Aktueller Reiter: - Krankheitstage = Stunden / 8.4 - Krankenquote je Mitarbeiter = Krankheitstage / 21 - Gesamtquote = Krankheitstage / (Headcount * 21) Schweizer/BFS-nahe Praxis: - Absenzenquote wird als Dauer der Absenzen in Prozent der vertraglich festgelegten Arbeitszeit berechnet. - Bei Teilzeit und unterschiedlichen Sollzeiten sollte der Nenner aus Sollarbeitszeit/Solltagen kommen. Pruefen: - Soll der Nenner pro Person aus `Avg_Sollzeit_Tag`, Arbeitszeitmodell oder Beschaeftigungsgrad berechnet werden? - Fuer Teilzeit nicht pauschal 21 Vollzeittage verwenden, falls die Quote offiziell sein soll. - Krankheit und Unfall separat ausweisen, wenn Datenquelle das erlaubt. Status: - 21-Tage-Naeherung gut fuer schnelle Sicht - fuer Schweizer Standard-Absenzquote fachlich zu ungenau ### 5. Krankheit kurz/lang Definition Aktueller Reiter: - `Krankheit angetreten` = kurz - `Krank nicht buchbar angetreten` = lang - Umrechnung pauschal Stunden / 8.4 Pruefen: - Bedeutet `Krank nicht buchbar` fachlich wirklich Langzeitkrankheit? - Oder ist es ein Buchungs-/Workflowstatus? - HR muss bestaetigen, ob diese Felder Kurz-/Langzeitkrankheit abbilden. Status: - benoetigt HR-/Rexx-Felddefinition ### 6. Unfalltage aus SAP vs. Rexx-Absenzen Aktueller Reiter: - Krankheit kommt aus Rexx-Stunden. - BU/NBU kommt aus SAP-HR-KPI-Datei. Pruefen: - Sind BU/NBU in SAP und Krankheit in Rexx zeitlich gleich abgegrenzt? - Sind Unfalltage in den Rexx-Krankheitsstunden enthalten oder getrennt? - Gibt es Doppelzaehlung, wenn Krankheit/Unfall spaeter zusammengefuehrt werden? Status: - getrennte Anzeige ist korrekt - Gesamtabsenzquote aus Krankheit + Unfall erst nach Quellenabgleich bilden ### 7. FTE-Berechnung Aktueller Reiter: - FTE = Beschaeftigungsgrad aus SAP / 100. - Wenn SAP-Wert fehlt: Vollzeit = 1, sonst 0.5. Best Practice: - FTE sollte aus vertraglichem Beschaeftigungsgrad oder Sollarbeitszeit pro Person kommen. - Pauschal 0.5 fuer Nicht-Vollzeit ist nur Fallback. Pruefen: - Ist `Beschaeftigungsgrad %` fuer alle aktiven Mitarbeitenden verfuegbar? - Wenn nein: kann Rexx `Arbeitszeitmodell` oder Sollzeit genauer liefern? Status: - korrekt, wenn SAP-Datei vollstaendig ist - Fallback fuer offizielle FTE zu grob ### 8. GLZ-Ampel 50/100 Stunden Aktueller Reiter: - Gruen: absolut <= 50h - Gelb: absolut <= 100h - Rot: absolut > 100h Pruefen: - Sind diese Schwellen HR-/GL-/Reglement-konform? - Soll negative GLZ gleich behandelt werden wie positive? - Gibt es unterschiedliche Regeln fuer Teilzeit? Status: - als Management-Ampel plausibel - Schwellen fachlich bestaetigen lassen ### 9. Ferien-Rest-Ampel Aktueller Reiter: - Restferien <= 5 Tage = Gruen - > 5 Tage = Rot Pruefen: - Ist >5 Tage wirklich kritisch oder nur zum Jahresende relevant? - Soll der Stichtag im Jahr beruecksichtigt werden? - Soll Anspruch, bezogen, ausstehend und Rest getrennt nach Kalenderjahr gezeigt werden? Status: - sehr grobe Ampel - saisonale Logik fehlt ### 10. Lohn / Datenschutz Aktueller Reiter: - Bruttolohn wird im Model geladen, aber aktuell nicht prominent als KPI angezeigt. Pruefen: - Darf Bruttolohn im HR-KPI-Reiter angezeigt werden? - Falls ja: welche Rollen duerfen ihn sehen? - Falls nein: Feld im UI konsequent ausblenden oder gar nicht laden. Status: - vor produktivem Einsatz mit Datenschutz/HR klaeren ### 11. Altersgruppen / Geschlecht Aktueller Reiter: - Alter und Geschlecht werden berechnet/gemappt. - Noch keine spezifischen Diversity-/Altersstruktur-Kacheln. Pruefen: - Soll Geschlecht nach Schweizer Datenschutz-/HR-Kontext im Cockpit sichtbar sein? - Aggregiert ja/nein? - Mindestgruppengroessen fuer Anzeige definieren, damit keine Einzelpersonen ableitbar sind. Status: - Daten vorhanden - Anzeige/Datenschutz noch nicht entschieden ### 12. Personalschluessel / Join-Qualitaet Aktueller Reiter: - Rexx #757 und SAP werden ueber Personalnummer verbunden. - Rexx #732 wird ueber Name verbunden, weil keine Personalnummer vorhanden ist. Risiko: - Name-Join ist fehleranfaellig bei gleichen Namen, Namensaenderungen, Sonderzeichen oder Formatabweichungen. Pruefen: - Gibt es in #732 doch eine stabile ID? - Falls nein: Join-Trefferquote anzeigen. - Nicht gematchte Namen separat ausweisen. Status: - wichtigster technischer Qualitaetspruefpunkt ## Empfohlene Mindestkontrollen vor produktiver Nutzung 1. Kontrollwerte aus Power BI / HR gegen neuen Reiter vergleichen: - `Austritte Total Rexx = 104` - `Austritte Arbeitnehmerkuendigung = 42` - `Austritte Fluktuationsrelevant = 33` 2. Headcount aktiv gegen Rexx/HR-Stichtagszahl vergleichen. 3. FTE-Summe gegen SAP/HR vergleichen. 4. Krankheitstage aus Rexx direkt gegen Export-Summe vergleichen. 5. BU/NBU-Tage gegen SAP-Datei summieren. 6. Stichprobe von mindestens 10 Mitarbeitenden pruefen: - Personalnummer - Organisation - FTE - GLZ - Ferien Rest - Krankheitstage 7. Join-Qualitaet dokumentieren: - Anzahl Rexx-Hauptzeilen - Anzahl SAP-Treffer - Anzahl #732-Name-Treffer - Anzahl nicht gematcht ## Empfehlung fuer die naechste Umsetzung Die Fluktuationsformel wurde gemaess `formeln.docx` auf durchschnittlichen Headcount umgestellt. Vor produktiver Nutzung bleiben die Kontrollwerte mit HR/Power BI zu protokollieren. Sinnvolle naechste technische Erweiterungen: - Tab `Datenstatus` um Join-Trefferquoten erweitern. - Tab `Fluktuation` mit Kontrollwerten Power BI/HR anzeigen. - Absenzenquote optional auf vertragliche Sollzeit/FTE umstellen. - Falls HR echte historische Monats-Snapshots liefert, diese als bevorzugte Quelle fuer den durchschnittlichen Headcount nutzen.