9.7 KiB
HR KPI Nachdokumentation 2026-05-13
Nachtrag 2026-05-20 HR KPI Cockpit Ausbau
Die urspruengliche HR-KPI-Doku wurde um den produktiven Cockpit-Ausbau ergaenzt.
Neu bzw. erweitert:
Anleitung-Reiter im HR KPI Cockpit.- Datenordner fuer Rexx-/SAP-Dateien ist im Cockpit sichtbar und je Lauf anpassbar; dauerhaft ueber
HrKpi:DataFolder. - Dateistatus zeigt Pfad, Zeilenanzahl, letzte Aenderung, Dateialter und Frischebewertung.
- Managementsicht anonymisiert Personennamen in Detailtabellen.
- Ampel-Reiter fuer Fluktuation, Krankenquote, GLZ, Restferien und Datenqualitaet.
- Filter fuer GLZ-Ampel und Restferien-Ampel.
- Periodenvergleich fuer wichtige Kennzahlen, soweit Daten vorhanden sind.
- Datenqualitaets-Hinweise fuer fehlende/alte Dateien und auffaellige Werte.
- Austritte nach Austrittsart und Organisation.
- Absenzen nach Organisation, Top-Absenzen und Drucken/PDF.
Anwenderdoku:
docs/HR_KPI_ANLEITUNG_HR_2026-05-20.docxdocs/hr_kpi_cockpit_preview.png
Validierung:
dotnet test TrafagSalesExporter.sln --verbosity minimal- Ergebnis:
77/77Tests gruen.
Ziel
Das HR KPI Cockpit wurde als separater, fachlich entkoppelter Reiter umgesetzt. Es nutzt PowerBI-M-/DAX-Logik nicht als generischen Interpreter, sondern als fachliche Vorlage, die in nachvollziehbare C#-Logik uebertragen wurde.
Der Reiter ist vom Finance-/Management-Cockpit getrennt. Er nutzt nur gemeinsame technische Infrastruktur wie Blazor, MudBlazor, DI, ClosedXML und bestehende Programmstruktur.
Eingebaute HR KPI Funktion
Neue Navigation:
HR KPIim Hauptmenue.- Route:
/hr-kpi.
Neue zentrale Dateien:
Components/Pages/HrKpi.razorComponents/HrKpi/HrKpiDashboardTabs.razorModels/HrKpiModels.csServices/HrKpiService.csServices/HrKpi/HrKpiDashboardBuilder.csTrafagSalesExporter.Tests/HrKpiServiceTests.cs
Datenquellen
Standard-Datenordner:
C:\temp
Konfigurierbar ueber appsettings.json:
"HrKpi": {
"DataFolder": "C:\\temp",
"MainFile": "Saldiperstichdatum.xlsx",
"TimeFile": "Exportkommengehen.xlsx",
"SapFile": "HR_KPI_Export.xlsx",
"AbsenceFile": "Abwesenheitinstunden.xlsx",
"LeaverFile": "Personalausgeschieden.xlsx"
}
Verarbeitete Dateien:
Saldiperstichdatum.xlsx: aktive Mitarbeitende, Saldi, Ferien, Organisation, Kostenstelle.Exportkommengehen.xlsx: Arbeitszeitmodell, Sollzeit, Geburtsdatum.HR_KPI_Export.xlsx: SAP-HR-Felder wie Beschaeftigungsgrad, Geschlecht, BU/NBU, Planstelle.Abwesenheitinstunden.xlsx: Krankheit kurz/lang in Stunden.Personalausgeschieden.xlsx: Austritte, Austrittsart, Austrittsdatum.
Dashboard-Reiter
Das Cockpit zeigt folgende Tabs:
UeberblickFluktuationAbsenzenZeit / FerienMitarbeitendeDatenstatus
Im Fluktuationsbereich wurden zusaetzliche Visualisierungen ergaenzt:
- Jahres-Fluktuations-Gauge
- Austritts-Funnel
- Donut nach Ausschlussgruenden
- relevante Austritte nach Organisation
- relevante Austritte pro Monat
Filter
Aktuell vorhandene Filter:
- Datenordner
- Austrittsjahr
- Von Austritt
- Bis Austritt
- Organisation
- Eintrittsjahr
- Suche Name / Personalnummer
- Kostenstelle
- Mitarbeitertyp
- Fluktuation
- GLZ-Ampel
- Restferien-Ampel
Korrektur Austrittsjahr / Von-Bis
Problem:
Austrittsjahrwar alsintmodelliert.- Dadurch war immer ein Jahr gesetzt.
- Leeren bzw. "alle Austrittsjahre" war nicht moeglich.
- Aus Sicht UI wirkte es so, als ob leere Auswahl nicht uebernommen wird.
Umsetzung:
HrKpiOptions.Yearwurde vonintaufint?geaendert.Austrittsjahrist in der UI jetzt einMudSelect<int?>mitClearable.- Die Jahresauswahl wird aus den vorhandenen Austrittsdaten gebaut.
- Neues Result-Feld:
ExitYearOptions. - Wenn
Austrittsjahrleer ist, werden alle Austrittsjahre geladen. - Wenn
Von AustrittoderBis Austrittgesetzt ist, hat dieser Zeitraum Vorrang vorAustrittsjahr.
Regel:
Von/Bis gesetzt -> Austrittsdatum muss im Zeitraum liegen
Von/Bis leer und Austrittsjahr gesetzt -> Austrittsjahr muss passen
Von/Bis leer und Austrittsjahr leer -> alle Austritte
Nach der Architektur-/Formelpruefung wurde zusaetzlich korrigiert:
Austrittsjahrist auch beim Start leer und wird nicht mehr automatisch mit dem aktuellen Kalenderjahr vorbelegt.- Bei leerem Austrittsjahr werden keine Jahres-/Quartals-/Monats-Fluktuationskennzahlen als Jahreswerte vorgetaeuscht; die Anzeige wird als
Fluktuation Auswahlgefuehrt. - Bei Von/Bis oder Mehrjahresauswahl zeigt die Timeline Jahresgruppen, wenn kein eindeutiges einzelnes Auswertungsjahr vorliegt.
- Die Fluktuationsberechnung nutzt fuer Mitarbeitendenfilter nur Felder, die in Mitarbeitendenbestand und Austrittsdaten vergleichbar sind: Organisation, Mitarbeitertyp, Eintrittsjahr und Suche.
- Kostenstelle, GLZ und Restferien filtern aktive Mitarbeitende/Absenzen, aber nicht Fluktuation, weil die Austrittsdatei diese Felder nicht stabil enthaelt. Das Cockpit weist darauf hin.
- Fluktuationsvisuals zaehlen Austritte distinct nach Personalnummer statt Zeilen.
- Fluktuationsraten nutzen Headcount, nicht FTE.
Headcount Monatwird als Durchschnitt aus Monatsanfang und Monatsende berechnet.Avg Headcount Quartalist der Durchschnitt der Monats-Headcounts im Quartal.Avg Headcount Jahrist der Durchschnitt der Monats-Headcounts im Jahr.Headcount nach Organisationzaehlt Personalnummern distinct und ignoriert leere Personalnummern.- Krankenquote nutzt neu
Krankheitstage / (FTE * 21 Tage)stattKrankheitstage / (Headcount * 21 Tage).
Fluktuationslogik
Die Fluktuation wird aus den ausgeschiedenen Personen berechnet.
Grundlage gemaess formeln.docx:
- Monat: Arbeitnehmerkuendigungen des jeweiligen Monats / Headcount des Monats.
- Quartal: Arbeitnehmerkuendigungen des aktuellen Quartals / durchschnittlicher Headcount des Quartals.
- Hochrechnung Jahr: aktuelle Quartals-Fluktuation x 4.
- Effektiv Jahr: Arbeitnehmerkuendigungen des gesamten Jahres / durchschnittlicher Headcount des Jahres.
- Nenner ist Headcount der Festangestellten, nicht FTE.
Relevant ist ein Austritt, wenn:
- Austrittsart als Arbeitnehmer-/Mitarbeiterkuendigung erkannt wird.
- Mitarbeitertyp nicht ausgeschlossen ist.
- Austrittsgrund nicht als befristet, Pensionierung, Arbeitgeberkuendigung oder anderer Ausschlussgrund erkannt wird.
Ausgeschlossen werden unter anderem:
- Praktikant
- Werkstudent
- Aushilfe
- Lehrling
- befristeter Vertrag
- Pensionierung/Rente
- Kuendigung durch Trafag/Arbeitgeber
Zusaetzlich korrigiert:
- Rexx-Werte mit Umlaut wie
Kuendigung ANwerden trotz OriginalschreibweiseKündigung ANals Arbeitnehmerkuendigung erkannt. Kuendigung AGbleibt als Arbeitgeberkuendigung ausgeschlossen.Ruhestandwird als Pensionierung ausgeschlossen.
Architektur-Cleanup
Vorher:
HrKpiServiceenthielt Import, Mapping, Filter, KPI-Berechnung, Visual-Daten und Excel-Parsing in einer grossen Klasse.HrKpi.razorenthielt Route, Filter, alle Tabs, Tabellen, Visualisierungen und CSS.
Nachher:
HrKpiService.csist nur noch DI-/Service-Fassade.HrKpiDashboardBuilder.csenthaelt die Build-Pipeline fuer Import, Mapping, Filter und KPI-Berechnung.HrKpi.razorbleibt fuer Route, Filter und Laden zustaendig.HrKpiDashboardTabs.razorenthaelt die Tabs, Tabellen, Fluktuationsvisuals und Styles.- HR-Datenquellen sind ueber
HrKpiDataSourceOptionskonfigurierbar.
Tests
Neue HR-KPI-Regressionstests:
- Organisation-Filter wirkt auch auf Absenzen.
- Von/Bis-Austrittsdatum hat Vorrang vor Austrittsjahr.
- Leeres Austrittsjahr liefert Austritte aus allen Jahren.
- Austrittsjahr ist standardmaessig leer.
- Employee-only Filter verzerren die Fluktuationsbasis nicht.
- Fluktuationsvisuals zaehlen distinct nach Personalnummer.
- Rexx-Austrittsarten
Kündigung AN,Kündigung AGundRuhestandwerden korrekt klassifiziert. - Fluktuationsraten verwenden durchschnittlichen Headcount statt aktuellen Stichtagsbestand.
- Mitarbeitende ohne Personalnummer werden nicht im Distinct-Headcount gezaehlt.
- FTE-Fallback aus Arbeitszeitmodell/Sollzeit wird verwendet, wenn SAP-Beschaeftigungsgrad fehlt.
- Fluktuationsrelevanz und Visual-Daten werden klassifiziert.
Aktueller Teststand nach der Korrektur:
dotnet build .\TrafagSalesExporter.csproj --no-restore -p:UseAppHost=false --verbosity minimal
dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --no-restore -p:UseAppHost=false --verbosity minimal
Ergebnis:
- Build erfolgreich.
- Tests erfolgreich:
69/69.
Kontrollwert aus C:\temp\Personalausgeschieden.xlsx:
- Austritte total:
104 Kündigung AN:42Kündigung AG:34- Fluktuationsrelevant nach aktueller HR-Logik:
33 - Avg Headcount 2025 nach Intervalllogik:
211.3 - Fluktuation Jahr effektiv 2025:
15.6%
Offene fachliche Pruefpunkte
Diese Punkte sind nicht automatisch geloest und muessen fachlich von HR bestaetigt werden:
- Ob die Abgrenzung "fluktuationsrelevant" exakt der Trafag-HR-Definition entspricht.
- Ob Arbeitnehmerkuendigungen anhand der vorhandenen Austrittsart-Texte vollstaendig erkannt werden.
- Ob Praktikanten, Werkstudenten, Aushilfen und Lehrlinge immer aus der Fluktuation ausgeschlossen werden sollen.
- Ob FTE-Fallback bei fehlendem SAP-Beschaeftigungsgrad fachlich akzeptiert ist.
- Ob
8.4 Stunden = 1 Krankheitstagals Standardumrechnung fuer alle relevanten Gruppen korrekt ist. - Ob GLZ- und Restferien-Ampeln mit den internen HR-Grenzwerten uebereinstimmen.
Commit-Stand
Bereits erstellt:
20be752 Add HR KPI cockpit1cd0ad9 Refactor HR KPI cockpit architecture001e2a7 Commit pending finance and Power BI work
Noch nicht committed zum Zeitpunkt dieser Nachdoku:
- Korrektur
Austrittsjahroptional / Von-Bis Vorrang. - Diese Nachdokumentation.