From 9daf54b8d9d0adf6d70b4a6bf7531625db0fd72c Mon Sep 17 00:00:00 2001 From: metacube Date: Fri, 15 May 2026 11:55:40 +0200 Subject: [PATCH] Document AI role and HR exclusions --- .../Services/HrKpi/HrKpiDashboardBuilder.cs | 27 ++++++++ .../HrKpiServiceTests.cs | 39 ++++++++++++ .../docs/CFO_Kurzbericht_270515.docx | Bin 18949 -> 16953 bytes .../docs/FINANCE_DASHBOARD_TODO_2026-05-15.md | 27 ++++++++ TrafagSalesExporter/lastchange.md | 60 ++++++++++++++++++ TrafagSalesExporter/persona.md | 47 ++++++++++++++ 6 files changed, 200 insertions(+) create mode 100644 TrafagSalesExporter/persona.md diff --git a/TrafagSalesExporter/Services/HrKpi/HrKpiDashboardBuilder.cs b/TrafagSalesExporter/Services/HrKpi/HrKpiDashboardBuilder.cs index 4a5315e..39c3537 100644 --- a/TrafagSalesExporter/Services/HrKpi/HrKpiDashboardBuilder.cs +++ b/TrafagSalesExporter/Services/HrKpi/HrKpiDashboardBuilder.cs @@ -8,6 +8,15 @@ namespace TrafagSalesExporter.Services; internal sealed class HrKpiDashboardBuilder { private readonly HrKpiDataSourceOptions _dataSources; + private static readonly HashSet ExcludedPersonNameKeys = new(StringComparer.OrdinalIgnoreCase) + { + NormalizePersonExclusionKey("Angelina Jolie"), + NormalizePersonExclusionKey("Brad Pitt"), + NormalizePersonExclusionKey("Peter Muster"), + NormalizePersonExclusionKey("ICT Trafag"), + NormalizePersonExclusionKey("Empfanger Reminder"), + NormalizePersonExclusionKey("Empfänger Reminder") + }; public HrKpiDashboardBuilder(HrKpiDataSourceOptions dataSources) { @@ -40,6 +49,12 @@ internal sealed class HrKpiDashboardBuilder var employees = LoadEmployees(context, timeRows, sapRows); var absences = LoadAbsences(context); var leavers = LoadLeavers(context); + var excludedRows = + employees.RemoveAll(x => IsExcludedTestPerson(x.NameVoll)) + + absences.RemoveAll(x => IsExcludedTestPerson(x.Name)) + + leavers.RemoveAll(x => IsExcludedTestPerson(x.NameVoll)); + if (excludedRows > 0) + result.Notices.Add($"{excludedRows:N0} Testpersonen-Zeilen wurden aus dem HR-KPI-Dashboard ausgeschlossen."); result.OrganisationOptions = employees .Select(x => x.Organisationseinheit) @@ -939,6 +954,18 @@ internal sealed class HrKpiDashboardBuilder private static string NormalizeKey(string value) => value.Trim().ToUpperInvariant(); + private static bool IsExcludedTestPerson(string? name) + => !string.IsNullOrWhiteSpace(name) && + ExcludedPersonNameKeys.Contains(NormalizePersonExclusionKey(name)); + + private static string NormalizePersonExclusionKey(string value) + { + var normalized = NormalizeReason(value) + .Replace(",", " ", StringComparison.OrdinalIgnoreCase); + var parts = normalized.Split(' ', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); + return string.Join(" ", parts.OrderBy(x => x, StringComparer.OrdinalIgnoreCase)); + } + private static int? ParseCostCenter(string value) { var raw = value.Split('/')[0].Trim(); diff --git a/TrafagSalesExporter/TrafagSalesExporter.Tests/HrKpiServiceTests.cs b/TrafagSalesExporter/TrafagSalesExporter.Tests/HrKpiServiceTests.cs index 3b0889d..1365306 100644 --- a/TrafagSalesExporter/TrafagSalesExporter.Tests/HrKpiServiceTests.cs +++ b/TrafagSalesExporter/TrafagSalesExporter.Tests/HrKpiServiceTests.cs @@ -211,6 +211,45 @@ public sealed class HrKpiServiceTests : IDisposable Assert.Contains(result.Leavers, row => row.Austrittsart == "Ruhestand" && row.FluktuationAusschlussgrund == "Pensionierung"); } + [Fact] + public async Task BuildAsync_Excludes_Configured_Test_Persons_From_All_Hr_Kpi_Views() + { + RewriteEmployeeRows( + [ + [1001, "Alpha, Anna", "Org A", "100 / Org A", "Engineer", "n", new DateTime(2020, 1, 1), "Aktiv", "0:00", 25, 0, 0, 100000, "CHF"], + [9001, "Jolie, Angelina", "Test", "999 / Test", "Engineer", "n", new DateTime(2020, 1, 1), "Aktiv", "0:00", 25, 0, 0, 100000, "CHF"], + [9002, "Brad Pitt", "Test", "999 / Test", "Engineer", "n", new DateTime(2020, 1, 1), "Aktiv", "0:00", 25, 0, 0, 100000, "CHF"], + [9003, "Peter Muster", "Test", "999 / Test", "Engineer", "n", new DateTime(2020, 1, 1), "Aktiv", "0:00", 25, 0, 0, 100000, "CHF"] + ]); + WriteWorkbook(Path.Combine(_folder, "Abwesenheitinstunden.xlsx"), + [ + "Personalnummer", "Nachname, Vorname (Link Personal)", "Organisation", "Stelle", "Personal Status", + "Krankheit angetreten (Stunden Ind.)", "Krank nicht buchbar angetreten (Stunden Ind.)" + ], + [ + [1001, "Alpha, Anna", "Org A", "Engineer", "Aktiv", 8.4, 0], + [9004, "ICT Trafag", "Test", "Engineer", "Aktiv", 8.4, 0] + ]); + RewriteLeaverRows( + [ + [1001, "Alpha, Anna", "Org A", "Engineer", "Inaktiv", new DateTime(2025, 3, 10), new DateTime(2020, 1, 1), "Arbeitnehmer Kuendigung"], + [9005, "Empfänger Reminder", "Test", "Engineer", "Inaktiv", new DateTime(2025, 3, 10), new DateTime(2020, 1, 1), "Arbeitnehmer Kuendigung"] + ]); + + var result = await _service.BuildAsync(new HrKpiOptions + { + DataFolder = _folder, + Year = 2025 + }); + + Assert.DoesNotContain(result.Employees, row => row.NameVoll.Contains("Angelina", StringComparison.OrdinalIgnoreCase)); + Assert.DoesNotContain(result.Employees, row => row.NameVoll.Contains("Brad Pitt", StringComparison.OrdinalIgnoreCase)); + Assert.DoesNotContain(result.Employees, row => row.NameVoll.Contains("Peter Muster", StringComparison.OrdinalIgnoreCase)); + Assert.DoesNotContain(result.Absences, row => row.Name.Contains("ICT Trafag", StringComparison.OrdinalIgnoreCase)); + Assert.DoesNotContain(result.Leavers, row => row.NameVoll.Contains("Reminder", StringComparison.OrdinalIgnoreCase)); + Assert.Contains(result.Notices, notice => notice.Contains("Testpersonen", StringComparison.OrdinalIgnoreCase)); + } + private static void WriteFixtureFiles(string folder) { WriteWorkbook(Path.Combine(folder, "Saldiperstichdatum.xlsx"), diff --git a/TrafagSalesExporter/docs/CFO_Kurzbericht_270515.docx b/TrafagSalesExporter/docs/CFO_Kurzbericht_270515.docx index 459edeaf39767e332b404aab4f1d96ccd01673c9..aa91349cdedfbb114c40962012ebb222683612fe 100644 GIT binary patch delta 15586 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 b^SAjUCkggtqyYiJe*M0E^$RiYU%CGWZ3hs9 literal 18949 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 diff --git a/TrafagSalesExporter/docs/FINANCE_DASHBOARD_TODO_2026-05-15.md b/TrafagSalesExporter/docs/FINANCE_DASHBOARD_TODO_2026-05-15.md index 0053fef..f994df4 100644 --- a/TrafagSalesExporter/docs/FINANCE_DASHBOARD_TODO_2026-05-15.md +++ b/TrafagSalesExporter/docs/FINANCE_DASHBOARD_TODO_2026-05-15.md @@ -11,6 +11,7 @@ Ziel: Aufbau eines modernen, uebersichtlichen Intranet-Dashboards fuer das Group | 1 | Fuehrendes CFO-Dokument verwenden: `FINANCE_CHEF_SUMMARY_2026-05-15.docx` | Offen | | 1 | Offene Finance-Entscheide mit Andreas/Finance durchgehen | Offen | | 1 | Italien-Abweichung klaeren: Berechnungsart, Deduplizierung, Intercompany | Offen | +| 1 | Italien IC-Diagnose besprechen: Trafag, Magnetic Sense/Magnets Sense und Gesellschaft fuer Sensorik erklaeren einen grossen Teil, aber nicht die ganze Abweichung | Offen | | 1 | Deutschland: finalen Jahresfile 2025 beschaffen | Offen | | 2 | UK/England: Jahresvollstaendigkeit und Restdifferenz pruefen | Offen | | 2 | CH/AT: Sollzuordnung und Trennung final bestaetigen | Offen | @@ -29,3 +30,29 @@ Ziel im Termin: - Offene Laenderabweichungen priorisieren. - Pro Land festlegen, welche Datenquelle und Berechnungslogik final gilt. +## IT / Intercompany Diagnose + +Aktuelle Diagnose fuer Italien: + +| Kennzahl | Wert | +| --- | ---: | +| IT Ist vor IC-Abzug | 14.704.336,29 EUR | +| Rhino/check.xlsx Soll | 7.669.840,00 EUR | +| Abweichung vor IC | +7.034.496,29 EUR | +| Erkannter IC-/2nd-party-Abzug | 4.397.746,90 EUR | +| IT Ist exkl. IC | 10.306.589,39 EUR | +| Restabweichung nach IC | +2.636.749,39 EUR | + +Verwendete IC-/2nd-party-Marker: + +- `TRAFAG` +- `MAGNETIC SENSE` +- `MAGNETS SENSE` +- `GESELLSCHAFT FUER SENSORIK` +- `GESELLSCHAFT FUR SENSORIK` + +Bewertung: + +- Intercompany/2nd-party erklaert einen grossen Teil der IT-Abweichung. +- Die Summe passt dadurch deutlich besser, aber noch nicht vollstaendig. +- Restabweichung weiter pruefen: Summenlogik, Beleg/Position-Deduplizierung, Gutschriften/Storno und weitere lokale IC-Kunden oder Schreibweisen. diff --git a/TrafagSalesExporter/lastchange.md b/TrafagSalesExporter/lastchange.md index dbf8b2d..dca3725 100644 --- a/TrafagSalesExporter/lastchange.md +++ b/TrafagSalesExporter/lastchange.md @@ -1349,6 +1349,66 @@ Ergebnis: - Build erfolgreich. - 3 bestehende MudBlazor-Analyzer-Warnungen in `Logs.razor`, `Transformations.razor` und `Standorte.razor`. +## CFO-Bericht IT/Intercompany Diagnose 2026-05-15 + +Ergaenzt: + +- `docs/CFO_Kurzbericht_270515.docx` +- `docs/FINANCE_DASHBOARD_TODO_2026-05-15.md` + +Inhalt: + +- IT/Intercompany-Diagnose fuer die grosse Italien-Abweichung. +- Marker dokumentiert: `TRAFAG`, `MAGNETIC SENSE`, `MAGNETS SENSE`, `GESELLSCHAFT FUER SENSORIK`, `GESELLSCHAFT FUR SENSORIK`. +- Zahlen: + - IT Ist vor IC-Abzug: `14.704.336,29 EUR` + - IC-/2nd-party-Abzug: `4.397.746,90 EUR` + - IT Ist exkl. IC: `10.306.589,39 EUR` + - Rhino/check.xlsx Soll: `7.669.840,00 EUR` + - Restabweichung nach IC: `+2.636.749,39 EUR` + +Bewertung: + +- Intercompany/2nd-party erklaert einen grossen Teil der IT-Abweichung. +- Restabweichung bleibt offen und muss ueber Summenlogik, Beleg/Position-Deduplizierung, Gutschriften/Storno und weitere lokale IC-Kunden oder Schreibweisen geprueft werden. + +## HR KPI Testpersonen-Ausschluss 2026-05-15 + +Geaendert: + +- Folgende Testpersonen werden zentral aus dem HR-KPI-Dashboard ausgeschlossen: + - Angelina Jolie + - Brad Pitt + - Peter Muster + - ICT Trafag + - Empfanger Reminder / Empfaenger Reminder +- Der Ausschluss erfolgt vor KPI-, Filter- und Tabellenberechnung. +- Betroffen sind aktive Mitarbeitende, Absenzen und Austritte. +- Im Dashboard erscheint eine Notice, wie viele Testpersonen-Zeilen ausgeschlossen wurden. + +Verifikation: + +```text +dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --no-restore -p:UseAppHost=false -p:OutDir=.\obj\verify_hr_exclusions\ --verbosity minimal +``` + +Ergebnis: + +- 70/70 Tests erfolgreich. +- 3 bestehende MudBlazor-Analyzer-Warnungen in `Logs.razor`, `Transformations.razor` und `Standorte.razor`. + +## KI-Arbeitsanweisung 2026-05-15 + +Erstellt: + +- `persona.md` + +Inhalt: + +- Rolle der KI als Entwicklungs-, Analyse- und Dokumentationswerkzeug. +- Grenzen der KI bei fachlicher Verantwortung, Finance, HR, Datenschutz und Freigaben. +- Arbeitsprinzipien fuer dieses Projekt: bestehende Architektur nutzen, kritisch testen, sauber dokumentieren und offene fachliche Punkte als Pruefpunkte markieren. + ## Navigation in Finance/HR/Admin gegliedert 2026-05-15 Geaendert: diff --git a/TrafagSalesExporter/persona.md b/TrafagSalesExporter/persona.md new file mode 100644 index 0000000..53e5378 --- /dev/null +++ b/TrafagSalesExporter/persona.md @@ -0,0 +1,47 @@ +# KI-Arbeitsanweisung fuer dieses Projekt + +Stand: 2026-05-15 + +## Rolle + +Die KI unterstuetzt in diesem Projekt als Entwicklungs-, Analyse- und Dokumentationswerkzeug. + +Sie hilft bei: + +- Codeaenderungen +- Tests und Fehleranalyse +- Strukturierung von Anforderungen +- Dokumentation und Berichten +- Vorbereitung von Finance-/HR-Entscheiden +- Plausibilisierung von Daten und Formeln + +## Grenzen + +Die KI ersetzt keine fachliche Verantwortung. + +Fachliche Entscheide, Freigaben und Verantwortung bleiben bei den zustaendigen Personen. Das gilt besonders fuer: + +- Finance-Kennzahlen +- HR-Kennzahlen +- Lohndaten +- Personendaten +- Datenschutz und Berechtigungen +- Intercompany-/2nd-party-Abgrenzungen +- offizielle Reporting-Logik + +## Arbeitsprinzipien + +- Bestehenden Programmcode und bestehende Architektur moeglichst wiederverwenden. +- Aenderungen nachvollziehbar dokumentieren. +- Kritische Berechnungen mit Tests absichern. +- Bei Finance- und HR-Zahlen klar zwischen Ist, Soll, Diagnose und offizieller Freigabe unterscheiden. +- Unsichere fachliche Punkte als offene Pruefpunkte markieren, nicht still als Wahrheit behandeln. +- Keine sensiblen Daten unnoetig ausgeben oder duplizieren. +- HR-Bereiche mit separater Zugriffskontrolle behandeln. + +## Verantwortung + +KI kann Umsetzung, Analyse und Dokumentation beschleunigen. + +Die finale fachliche Entscheidung liegt beim Menschen. +