2149 lines
72 KiB
Markdown
2149 lines
72 KiB
Markdown
# Last Change 2026-05-04
|
|
|
|
## In-App-Schulungen und Finance-Detaildoku 2026-05-21
|
|
|
|
Geaendert:
|
|
|
|
- Neue HTML-/Razor-Schulungsseite `HR KPI Schulung` unter `/hr-kpi/schulung`.
|
|
- Neue HTML-/Razor-Schulungsseite `Finance Schulung` unter `/finance-cockpit/schulung`.
|
|
- Navigation erweitert:
|
|
- `Finance Cockpit` enthaelt jetzt `Finance Schulung`.
|
|
- `HR KPI (Login)` ist jetzt eine Gruppe mit `HR Dashboard` und `HR KPI Schulung`.
|
|
- Finance-Schulung ist wie die restlichen Finance-Seiten ueber die Finance-Cockpit-Entsperrung geschuetzt.
|
|
- Schulungsseiten enthalten Tabellen, Checklisten, Prozessablauf und eingebettete Grafiken aus `wwwroot/training`.
|
|
- Sprachtexte fuer die neuen Menuepunkte in Englisch, Spanisch, Italienisch und Hindi ergaenzt.
|
|
- Word-Schulungsdokumente fuer HR und Finance neu erzeugt und Umlaut-Schreibweisen korrigiert.
|
|
- Neue Markdown-Doku `docs/MANUAL_IMPORT_DELTA_STAND_2026-05-21.md` beschreibt den aktuellen Delta-/Vollfile-Stand:
|
|
- UK kann Basis plus Deltas lesen.
|
|
- Spanien und Deutschland muessen vollstaendige Dateien liefern.
|
|
- Manual-Importe ersetzen pro Standort den aktuellen Stand in `CentralSalesRecords`.
|
|
|
|
Verifiziert:
|
|
|
|
- `dotnet test TrafagSalesExporter.sln --verbosity minimal --no-restore -p:BaseOutputPath=.tmp_build\bin\ -p:BaseIntermediateOutputPath=.tmp_build\obj\`
|
|
- Normaler Debug-Build war lokal durch eine von Visual Studio/.NET Host gesperrte `bin\Debug\net8.0\BiDashboard.dll` blockiert.
|
|
|
|
## Lokaler Uebergangsserver bis IIS-Fix 2026-05-21
|
|
|
|
Zweck:
|
|
|
|
- Falls der zentrale IIS-Server noch nicht erreichbar ist, kann die App voruebergehend auf dem Entwicklungs-PC laufen.
|
|
- Andere Mitarbeitende greifen dann im Firmennetz ueber die IP des PCs zu.
|
|
- Ausfuehrliche Betriebsdoku: `docs/LOCAL_DEV_SERVER_UEBERGANG_2026-05-21.md`.
|
|
|
|
Start auf dem Entwicklungs-PC:
|
|
|
|
```powershell
|
|
dotnet run --urls "http://0.0.0.0:5000"
|
|
```
|
|
|
|
Nachtrag:
|
|
|
|
- `Properties/launchSettings.json` wurde so angepasst, dass das Entwicklungsprofil zusaetzlich auf `http://0.0.0.0:5000` lauscht.
|
|
- Bei Start aus Visual Studio bzw. ueber das Projektprofil bleibt `https://localhost:55415` lokal verfuegbar, Port `5000` ist aber zusaetzlich fuer andere PCs erreichbar.
|
|
- Falls bereits eine alte Visual-Studio-Instanz laeuft, App stoppen und neu starten, damit die geaenderte URL-Bindung aktiv wird.
|
|
|
|
Zugriff von anderen PCs:
|
|
|
|
```text
|
|
http://<PC-IP>:5000
|
|
```
|
|
|
|
Aktueller Stand vom 2026-05-21:
|
|
|
|
```text
|
|
PC-IP im WLAN/Firmennetz: 172.16.9.185
|
|
Lokale Test-URL: http://172.16.9.185:5000
|
|
```
|
|
|
|
IP des PCs ermitteln:
|
|
|
|
```powershell
|
|
ipconfig
|
|
```
|
|
|
|
Firewall-Regel einmalig in einer PowerShell "Als Administrator" anlegen:
|
|
|
|
```powershell
|
|
netsh advfirewall firewall add rule name="TrafagSalesExporter local web 5000" dir=in action=allow protocol=TCP localport=5000 profile=domain,private
|
|
```
|
|
|
|
Am 2026-05-21 wurde eine allgemeine Port-5000-Regel angelegt und danach auf alle Firewall-Profile erweitert:
|
|
|
|
```text
|
|
Regelname: Local Dev Web Port 5000
|
|
Aktiviert: Ja
|
|
Profile: Domaene, Privat, Oeffentlich
|
|
Protokoll: TCP
|
|
Lokaler Port: 5000
|
|
Aktion: Zulassen
|
|
```
|
|
|
|
Damit koennen spaeter auch andere lokale Entwicklungsprogramme auf Port 5000 von anderen Firmen-PCs erreicht werden, sofern sie an `0.0.0.0:5000` oder die konkrete PC-IP binden.
|
|
|
|
Pruefen:
|
|
|
|
```powershell
|
|
netsh advfirewall firewall show rule name="TrafagSalesExporter local web 5000"
|
|
```
|
|
|
|
Spaeter wieder entfernen:
|
|
|
|
```powershell
|
|
netsh advfirewall firewall delete rule name="TrafagSalesExporter local web 5000"
|
|
```
|
|
|
|
Hinweise:
|
|
|
|
- Die Firewall-Regel bleibt nach einem Windows-Neustart aktiv.
|
|
- Die Firewall-Regel bleibt normalerweise auch nach Windows-Updates aktiv.
|
|
- Da die Regel auf Domaene, Privat und Oeffentlich gilt, ist Port 5000 auch abgedeckt, wenn AlwaysOnVPN oder Windows das Netzwerk nicht als Domaenenprofil erkennt.
|
|
- Die App selbst startet nach einem Neustart nicht automatisch; `dotnet run ...` muss erneut gestartet werden.
|
|
- Die PC-IP kann sich nach Neustart, WLAN-Wechsel oder DHCP-Erneuerung aendern; dann `ipconfig` ausfuehren und die neue URL weitergeben.
|
|
- Der PC muss eingeschaltet bleiben und das PowerShell-Fenster muss offen bleiben.
|
|
- Nur im Firmennetz verwenden, nicht oeffentlich freigeben.
|
|
- Die lokale Uebergangs-URL ist bewusst HTTP, nicht HTTPS. Fuer diesen temporaeren internen Betrieb reicht das; lokales HTTPS waere moeglich, wuerde aber Zertifikats-/Trust-Aufwand fuer andere PCs verursachen.
|
|
- Finance Cockpit und HR KPI bleiben ueber ihre App-internen Logins geschuetzt.
|
|
- Wenn ein Finance-User im Buero die App ueber die VPN-IP des Entwicklungs-PCs trotzdem nicht erreicht, liegt es wahrscheinlich am AlwaysOnVPN-/Firmennetz-Routing. Das kann lokal auf dem PC nicht sicher freigeschaltet werden.
|
|
|
|
Serverbefund:
|
|
|
|
- Der IIS-Server fordert beim HTTPS/TLS-Handshake ein Client-Zertifikat (`RequestedClientCert=True`).
|
|
- Dadurch erreichen Requests weder `diag.txt` noch `BiDashboard.dll`.
|
|
- Marco/IT muss in IIS die SSL Settings pruefen und Client Certificates auf `Ignore` oder hoechstens `Accept` setzen, nicht `Require`.
|
|
|
|
## Markdown-Doku und Anwenderdokus nachgezogen 2026-05-20
|
|
|
|
Geaendert:
|
|
|
|
- Neue zentrale Markdown-Uebersicht `docs/MD_DOKUMENTENSTATUS_2026-05-20.md` erstellt.
|
|
- Markdown-Dateien werden dort als aktuell fuehrend, Detaildoku oder historisch eingeordnet.
|
|
- Alte Markdown-Dateien wurden nicht geloescht, weil sie Pruefwerte, Zwischenentscheide und Audit-Spuren enthalten.
|
|
- HR- und Finance-Word-Anleitungen wurden visuell ueberarbeitet:
|
|
- Titelbereich
|
|
- Tabellen
|
|
- Hinweisboxen
|
|
- eingebettete neutrale Cockpit-Vorschaugrafiken
|
|
- Neue Bilddateien:
|
|
- `docs/hr_kpi_cockpit_preview.png`
|
|
- `docs/finance_cockpit_preview.png`
|
|
|
|
Commits:
|
|
|
|
- `0bff161 Document HR cockpit feature list`
|
|
- `a044040 Improve cockpit user guide documents`
|
|
|
|
## Management Analyse auf Finance Summary ausgerichtet 2026-05-20
|
|
|
|
Geaendert:
|
|
|
|
- `Management Analyse` hat jetzt einen fuehrenden Reiter `Finance Summary`.
|
|
- Die Kennzahlen in diesem Reiter verwenden dieselbe `FinanceRuleEngine` wie das zentrale Excel-Blatt `Finance Summary`.
|
|
- Filter fuer Jahr, Land und Waehrung wirken auf das Endergebnis, nicht nur auf eine Rohdatenansicht.
|
|
- Die bisherige Management-Tabelle bleibt als separater Rohdaten-/Diagnose-Reiter erhalten.
|
|
- Fuer DE 2026 wird kein Fehler mehr geworfen. Da DE/Alphaplan fachlich auf 2025 gezwungen ist, zeigt das Dashboard fuer DE 2026 einen leeren Zustand mit Hinweis.
|
|
|
|
Verifiziert:
|
|
|
|
- Lokale Probe gegen DB und Excel zeigte, dass die alte `Management Analyse` wegen Rohwerten, anderem Datum und EUR-Umrechnung nicht mit der Finance Summary uebereinstimmte.
|
|
- Tests: `dotnet test TrafagSalesExporter.sln --verbosity minimal` mit `77/77` bestanden.
|
|
|
|
Commit:
|
|
|
|
- `610e771 Add finance summary view and HR guide`
|
|
|
|
## HR KPI Cockpit erweitert und Anwenderdokus erstellt 2026-05-20
|
|
|
|
Geaendert:
|
|
|
|
- `HR KPI Cockpit` hat einen neuen Reiter `Anleitung` fuer HR-Anwenderinnen.
|
|
- Der Datenordner fuer Rexx-/SAP-Dateien ist im Cockpit sichtbar und je Lauf anpassbar; dauerhaft ueber `HrKpi:DataFolder` in `appsettings.json`.
|
|
- Dateistatus zeigt jetzt letzte Aenderung, Dateialter und Frischebewertung.
|
|
- Neue Auswertungen: Ampeln, Periodenvergleich, Datenqualitaets-Hinweise, Austritte nach Typ/Organisation und Absenzen nach Organisation.
|
|
- Managementsicht anonymisiert personenbezogene Details und reduziert die Anzeige auf aggregierte Kennzahlen.
|
|
- Print-/PDF-Funktion im Cockpit ergaenzt.
|
|
|
|
Anwenderdokus:
|
|
|
|
- `docs/HR_KPI_ANLEITUNG_HR_2026-05-20.docx`
|
|
- `docs/FINANCE_COCKPIT_ANLEITUNG_FINANZ_2026-05-20.docx`
|
|
|
|
Verifiziert:
|
|
|
|
- Word-Dateien als gueltige DOCX-Pakete geprueft.
|
|
- Tests: `dotnet test TrafagSalesExporter.sln --verbosity minimal` mit `77/77` bestanden.
|
|
|
|
Commit:
|
|
|
|
- `06fb560 Expand HR KPI cockpit and add user guides`
|
|
|
|
## Workflow-Konsistenz fuer Keyuser verbessert 2026-05-20
|
|
|
|
Geaendert:
|
|
|
|
- Export Dashboard zeigt jetzt Warnungen, wenn aktive Manual-Excel-Standorte noch keine Datei/Pfad hinterlegt haben.
|
|
- Nach einem Einzelstandortexport wird darauf hingewiesen, dass die zentrale Excel separat neu erzeugt werden muss.
|
|
- Dashboard markiert, wenn seit der letzten zentralen Excel ein Standortexport gelaufen ist.
|
|
- Neuer Keyuser-Menuepunkt `Manuelle Importe` fuer DE/UK/ES-artige Excel-/CSV-Quellen:
|
|
- Pfad/SharePoint-Referenz pflegen
|
|
- Datei hochladen
|
|
- Standort aktiv/inaktiv setzen
|
|
- Pfad pruefen
|
|
- Live-Status startet nicht mehr pauschal mit `HANA Abfrage...`, sondern quellenneutral bzw. fuer Manual Excel/SAP passender.
|
|
- Zentrale Excel enthaelt ein neues Blatt `Finance Summary` mit Summen nach Jahr, Land und Waehrung.
|
|
- `Management Analyse` ist klarer als Rohdaten-/Plausibilitaetssicht markiert.
|
|
- `Soll/Ist Vergleich` ist klarer als verbindliche Finance-Sicht markiert.
|
|
|
|
Nachtrag:
|
|
|
|
- Unter `Manuelle Importe` gibt es jetzt einen zweiten Reiter `Anleitung`.
|
|
- Der Reiter zeigt den Keyuser-Ablauf grafisch:
|
|
- Excel bereitstellen
|
|
- speichern und aktivieren
|
|
- Standort exportieren
|
|
- zentrale Excel erzeugen
|
|
- Finance pruefen
|
|
- Zusatzhinweise markieren die richtige Reihenfolge, den offenen DE-Fachentscheid und dass auf dem Server kein Microsoft Excel benoetigt wird.
|
|
|
|
Bewusst nicht geaendert:
|
|
|
|
- DE-Fachregel bleibt offen, bis Munir/Finance bestaetigt, welche Kundenlaender/Filter zum offiziellen DE-Ist gehoeren.
|
|
|
|
## Keyuser Prozessdoku SVG 2026-05-20
|
|
|
|
Erstellt:
|
|
|
|
- `docs/KEYUSER_PROZESSDOKU_2026-05-20.svg`
|
|
|
|
Inhalt:
|
|
|
|
- Prozess von Vorbereitung ueber Standortexport, zentrale Excel und Finance-Soll/Ist bis Fehlerbehandlung.
|
|
- Fokus auf Keyuser-Aktionen in der App: Settings, Standorte, Export Dashboard, Management Analyse, Soll/Ist Vergleich, Logs.
|
|
- Enthaltene Fachpunkte: Manual Excel fuer UK/ES/DE, DE Alphaplan, IT-Sonderregel, Finance-Spalten im Endexcel.
|
|
- Technische Implementierungsdetails und Testprogramme sind bewusst ausgeklammert.
|
|
|
|
## Technische Systemarchitektur SVG 2026-05-20
|
|
|
|
Erstellt:
|
|
|
|
- `docs/SYSTEMARCHITEKTUR_TECHNISCH_2026-05-20.svg`
|
|
|
|
Inhalt:
|
|
|
|
- Laufzeit und IIS-Publish als `BiDashboard.dll` ohne EXE/AppHost.
|
|
- Blazor-UI, Authentisierung, Start-/Background-Services.
|
|
- Applikationskern: Export-Orchestrierung, Standortexport, Adapter, Transformationen, zentrale Tabelle.
|
|
- Datenquellen: SAP HANA/BI1/SAGE, SAP Gateway/OData, Manual Excel/CSV, SharePoint.
|
|
- Persistenzmodell mit wichtigsten SQLite-Tabellen.
|
|
- Output-/SharePoint-Pfade, Finance-Sonderregeln, HR/Finance-Zugriff und Betriebspruefpunkte.
|
|
- Test-/Probeprogramme sind bewusst nicht enthalten.
|
|
|
|
## IT Finance-Methode fachlich bestaetigt 2026-05-20
|
|
|
|
Entscheid:
|
|
|
|
- Fuer Italien gilt die vom Finance-Leiter bestaetigte Methode.
|
|
- `CustomerName` enthaelt `Trafag Italia` wird aus dem IT-Finance-Ist ausgeschlossen.
|
|
- Doppelte IT-Zeilen mit leerem `Supplier country` werden nur einmal gezaehlt.
|
|
- Diese Regel gilt nur fuer IT.
|
|
|
|
Wichtig:
|
|
|
|
- Die bisherige Kundenausschluss-Kombination passte 2025 numerisch naeher an den Sollwert, ist aber nicht die belastbare Methode fuer Folgejahre.
|
|
- Der 2025-Zufallstreffer wird deshalb nicht als fachliche Regel weiterverwendet.
|
|
|
|
Gegen aktuelle DB getestet:
|
|
|
|
```text
|
|
Soll IT: 7'669'840.00
|
|
Bisherige IT-Summe: 7'669'641.47
|
|
Bisherige Differenz: -198.53
|
|
Trafag Italia Abzug in DB: 6'495.71
|
|
Dubletten-Abzug SupplierCountry leer: 0.00
|
|
Neue fachliche Methode: 7'663'145.76
|
|
Neue Differenz: -6'694.24
|
|
```
|
|
|
|
Umsetzung:
|
|
|
|
- `Services/FinanceReconciliationService.cs`
|
|
- `Services/ExcelExportService.cs`
|
|
- Tests in `TrafagSalesExporter.Tests/FinanceReconciliationServiceTests.cs`
|
|
|
|
## IIS Deployment Handoff 2026-05-19
|
|
|
|
Aktueller Deployment-/IIS-Stand wurde hier dokumentiert:
|
|
|
|
```text
|
|
docs/DEPLOYMENT_IIS_HANDOFF_2026-05-19.md
|
|
```
|
|
|
|
Kurzstand:
|
|
|
|
- `TrafagSalesExporter` veroeffentlicht jetzt als `BiDashboard.dll`.
|
|
- Keine EXE im Publish.
|
|
- Publish-Ziel: `\\trch-webapp-bidashboard.trafagch.local\BiDashboard$\`.
|
|
- Wahrscheinliche URL: `https://trch-webapp-bidashboard.trafagch.local/BiDashboard/`.
|
|
- Diagnose-`web.config` ist aktiv mit `httpErrors Detailed` und `stdoutLogEnabled=true`.
|
|
- `logs`-Ordner existiert auf dem Share, blieb nach dem 500 aber leer.
|
|
- ACL-Befund: `IIS_IUSRS` hat nur `ReadAndExecute`; App braucht fuer SQLite/logs wahrscheinlich `Modify`.
|
|
- Rechte konnten lokal nicht gesetzt werden: `icacls` auf dem Share endete mit `Zugriff verweigert`.
|
|
|
|
Naechster Schritt:
|
|
|
|
- Server-Spezialist muss App-Pool-Identity bzw. `IIS_IUSRS` mit `Modify` auf Publish-Ordner, `logs` und `trafag_exporter.db*` berechtigen und danach App-Pool neu starten.
|
|
|
|
## ASP.NET Publish direkt aus TrafagSalesExporter 2026-05-19
|
|
|
|
Entscheid:
|
|
|
|
- `TrafagSalesExporter` bleibt das fuehrende Projekt.
|
|
- Das separate `BiDashboard`-Projekt wird fuer den aktuellen Stand nicht benoetigt.
|
|
- `TrafagSalesExporter` ist bereits eine ASP.NET/Blazor-Webanwendung (`Microsoft.NET.Sdk.Web`) und kann direkt veroeffentlicht werden.
|
|
|
|
Umsetzung:
|
|
|
|
- `OutputType=WinExe` wurde aus `TrafagSalesExporter.csproj` entfernt.
|
|
- Der `BiDashboard`-Verweis wurde aus `TrafagSalesExporter.sln` entfernt.
|
|
- Das Publish-Profil `Properties/PublishProfiles/FolderProfile.pubxml` zeigt auf den Server-Publish-Pfad:
|
|
|
|
```text
|
|
\\trch-webapp-bidashboard.trafagch.local\BiDashboard$
|
|
```
|
|
|
|
Wichtig fuer Deployment:
|
|
|
|
- Die Anwendung wird nicht durch Doppelklick auf eine EXE gestartet.
|
|
- Der Server-Spezialist soll die publish-Ausgabe als ASP.NET-Webanwendung/IIS-App betreiben.
|
|
- Publish lokal:
|
|
|
|
```powershell
|
|
dotnet publish .\TrafagSalesExporter.csproj -c Release
|
|
```
|
|
|
|
## Finance Cockpit Login und Vergleichsnachtrag 2026-05-19
|
|
|
|
Nach dem Finance-Handoff vom 2026-05-18 wurden noch mehrere Schritte umgesetzt:
|
|
|
|
- Haupt-App-Seite `/finance-cockpit/vergleich` wurde an die Logik und Darstellung der FinanceProbe angeglichen.
|
|
- Leere Ist-Zeilen ohne belastbaren Ist-Wert werden im Finance-Vergleich ausgefiltert.
|
|
- Die verwendeten Berechnungsformeln je Land wurden dokumentiert:
|
|
|
|
```text
|
|
docs/FINANCE_BERECHNUNGSFORMELN_LAENDER_2026-05-19.md
|
|
```
|
|
|
|
- Finance Cockpit erhielt einen separaten Login, unabhaengig vom HR-KPI-Login.
|
|
|
|
Technischer Stand Finance-Cockpit-Login:
|
|
|
|
- Konfiguration: `FinanceCockpitAccess` in `appsettings.json`
|
|
- Benutzer im aktuellen Stand: `finance`
|
|
- Passwort ist als SHA-256-Hash gespeichert.
|
|
- Finance nutzt ein eigenes Passwort: `Trafag-Finance-Cockpit-2026!`.
|
|
- HR-KPI nutzt weiterhin seine eigene `HrKpiAccess`-Konfiguration.
|
|
- Umsetzung:
|
|
- `Services/FinanceCockpitAccessService.cs`
|
|
- `Security/FinanceCockpitAccessOptions.cs`
|
|
- `Components/FinanceCockpit/FinanceCockpitUnlockPanel.razor`
|
|
- `Components/Routes.razor`
|
|
- `Components/Layout/NavMenu.razor`
|
|
- Registrierung in `Program.cs`
|
|
|
|
AD-/Rollenstand:
|
|
|
|
- `Security.Enabled = false` deaktiviert die globale AD-/Rollenpruefung fuer den Moment.
|
|
- Die vorhandenen `AccessGroups` und `AdminGroups` bleiben in `appsettings.json` stehen und wurden nicht geloescht.
|
|
- Wenn AD/Rollen wieder gelten sollen, `Security.Enabled` auf `true` setzen.
|
|
- Finance- und HR-KPI-Sperren bleiben auch bei deaktivierter AD-Pruefung aktiv.
|
|
|
|
Relevante Commits:
|
|
|
|
```text
|
|
8f1b1b8 Align main finance comparison with probe
|
|
f855e06 Filter empty actual finance rows
|
|
5c654ad Document finance formulas by country
|
|
9c544af Protect finance cockpit with login
|
|
```
|
|
|
|
## Zentrale Excel Finance-Filter 2026-05-19
|
|
|
|
Die zentrale Laenderdatei `Sales_All_yyyy-MM-dd.xlsx` wurde fuer den CFO-/Finance-Abgleich erweitert.
|
|
|
|
Im Blatt `Sales` gibt es rechts einen zusammengehoerigen Finance-Spaltenblock:
|
|
|
|
```text
|
|
Finance | Year
|
|
Finance | Country Key
|
|
Finance | Date
|
|
Finance | Net Sales Actual
|
|
Finance | Currency
|
|
Finance | Include
|
|
Finance | Source Value Field
|
|
```
|
|
|
|
Ziel:
|
|
|
|
- Finance kann im zentralen Excel dieselben Ist-Summen erzeugen wie im Testprogramm.
|
|
- Es muss nicht geraten werden, ob `Land`, `TSC`, `Sales Price/Value`, `Document Total LC`, `posting date` oder `invoice date` zu verwenden ist.
|
|
|
|
Filterregel fuer Finance:
|
|
|
|
```text
|
|
Finance | Year = 2025
|
|
Finance | Country Key = gewuenschtes Land
|
|
Finance | Include = TRUE
|
|
Summe ueber Finance | Net Sales Actual
|
|
```
|
|
|
|
Nur in der zentralen Datei wird ein zweites Blatt erzeugt:
|
|
|
|
```text
|
|
Finance Filter Hilfe
|
|
```
|
|
|
|
Dieses Hilfsblatt beschreibt die zusammengehoerigen Finance-Spalten und die konkrete Filter-/Summenlogik.
|
|
|
|
Verifikation:
|
|
|
|
- Build erfolgreich:
|
|
|
|
```text
|
|
dotnet build .\TrafagSalesExporter.csproj --no-restore -p:UseAppHost=false -p:OutDir=.\obj\verify_finance_help_sheet\ --verbosity minimal
|
|
```
|
|
|
|
- Preview-Excel erzeugt und geprueft:
|
|
|
|
```text
|
|
.tmp_tools\GenerateConsolidatedPreview\out\Sales_All_2026-05-19.xlsx
|
|
```
|
|
|
|
- Gepruefte Blaetter:
|
|
|
|
```text
|
|
Sales | Finance Filter Hilfe
|
|
```
|
|
|
|
- Finance-Spaltenblock im Blatt `Sales`:
|
|
|
|
```text
|
|
36: Finance | Year
|
|
37: Finance | Country Key
|
|
38: Finance | Date
|
|
39: Finance | Net Sales Actual
|
|
40: Finance | Currency
|
|
41: Finance | Include
|
|
42: Finance | Source Value Field
|
|
```
|
|
|
|
- Summenvergleich gegen `FinanceReconciliationService` fuer 2025:
|
|
|
|
| Key | Finance-Service | Excel-Finance-Spalten | Status |
|
|
| --- | ---: | ---: | --- |
|
|
| AT | `3'438'121.37` | `3'438'121.37` | MATCH |
|
|
| CH | `43'521'390.82` | `43'521'390.82` | MATCH |
|
|
| ES | `3'082'320.18` | `3'082'320.18` | MATCH |
|
|
| FR | `1'471'218.44` | `1'471'218.44` | MATCH |
|
|
| IN | `750'936'591.38` | `750'936'591.38` | MATCH |
|
|
| IT | `7'669'641.47` | `7'669'641.47` | MATCH |
|
|
| UK | `3'533'710.09` | `3'533'710.09` | MATCH |
|
|
| US | `3'749'865.33` | `3'749'865.33` | MATCH |
|
|
|
|
Relevante Commits:
|
|
|
|
```text
|
|
ebbc5a1 Add finance filter columns to consolidated export
|
|
b23f73e Add finance filter help sheet
|
|
```
|
|
|
|
## UK_B1 Mapping / FinanceProbe Nachtrag 2026-05-11
|
|
|
|
Anlass:
|
|
|
|
- In der FinanceProbe zeigte UK/England fuer `TRUK` nur `395'605.82 GBP` Ist gegen `3'749'865.00 GBP` Soll.
|
|
- In den Varianten fehlten weitere sinnvolle Abgrenzungen; sichtbar war nur `Positions-Netto (Sales Price/Value)`.
|
|
- Der Standort soll weiterhin `UK_B1` verwenden.
|
|
|
|
Technischer Befund:
|
|
|
|
- Standort:
|
|
- `Land = England`
|
|
- `TSC = TRUK`
|
|
- `SourceSystem = MANUAL_EXCEL`
|
|
- Korrekte Quelle:
|
|
|
|
```text
|
|
https://trafagag.sharepoint.com/sites/WorldwideBIPlatform/Import/Finance/UK_B1
|
|
```
|
|
|
|
- Lokal waren fuer `TRUK` keine `ManualExcelColumnMappings` vorhanden.
|
|
- Der Import lief deshalb ueber die Header-Automatik.
|
|
- Die Header-Automatik behandelte `Sales Price/Value` als fertigen Positionswert.
|
|
- In der UK-B1-Datei ist `Sales Price/Value` nach aktuellem Befund aber ein Stueckpreis.
|
|
- Der Finance-Positionswert muss deshalb berechnet werden:
|
|
|
|
```text
|
|
[Sales Price/Value] * [Quantity]
|
|
```
|
|
|
|
Probe auf den bereits geladenen UK-Daten:
|
|
|
|
| Berechnung | Wert |
|
|
| --- | ---: |
|
|
| Bisher importiert: Summe `SalesPriceValue` | `395'605.82 GBP` |
|
|
| Rekonstruiert: Summe `SalesPriceValue * Quantity` | `3'533'348.89 GBP` |
|
|
| Soll `check.xlsx` | `3'749'865.00 GBP` |
|
|
| Restdifferenz nach Multiplikation | ca. `216'516.11 GBP` |
|
|
|
|
Umgesetzte Codeaenderung:
|
|
|
|
- `Services/ManualExcelImportService.cs`
|
|
- grafische Manual-Excel-Mappings koennen jetzt einfache berechnete Quellen auswerten
|
|
- aktuell benoetigte Syntax:
|
|
|
|
```text
|
|
=[Header A]*[Header B]
|
|
```
|
|
|
|
- Konstanten wie `=GBP` bleiben unveraendert gueltig
|
|
|
|
- `Services/DatabaseSeedService.cs`
|
|
- England/TRUK wird auf den SharePoint-Ordner `Import/Finance/UK_B1` repariert, wenn der alte/falsche Pfad `Import/Finance/England` oder ein leerer Pfad vorhanden ist
|
|
- fuer `TRUK` wird ein grafisches Manual-Excel-Mapping geseedet
|
|
- wichtigste Zuordnung:
|
|
|
|
```text
|
|
SalesPriceValue <- =[Sales Price/Value]*[Quantity]
|
|
SalesCurrency <- =GBP
|
|
DocumentCurrency<- =GBP
|
|
CompanyCurrency <- =GBP
|
|
PostingDate <- invoice date
|
|
InvoiceDate <- invoice date
|
|
```
|
|
|
|
- `TrafagSalesExporter.Tests/ManualExcelImportServiceTests.cs`
|
|
- neuer Test fuer Multiplikationsausdruck im Manual-Excel-Mapping
|
|
- prueft, dass `123.45 * 7 = 864.15` als `SalesPriceValue` importiert wird
|
|
|
|
Aktueller Verifikationsstand:
|
|
|
|
```text
|
|
dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --no-restore -p:UseAppHost=false --verbosity minimal
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- Tests erfolgreich.
|
|
- `59/59` Tests gruen.
|
|
- Bekannte Warnungen bleiben die bestehenden MudBlazor-Analyzerwarnungen zu `Dense`.
|
|
|
|
Zusatzfix:
|
|
|
|
- `DatabaseSeedService` wurde gehaertet.
|
|
- Der UK-Mapping-Seed wird nur ausgefuehrt, wenn `ManualExcelColumnMappings` sauber auf `Sites` referenziert.
|
|
- Dadurch wird der Initialisierungslauf nicht blockiert, wenn eine bestehende SQLite-DB gerade noch aus alten Reparaturtabellen wie `Sites_repair_old` bereinigt wird.
|
|
|
|
Naechster praktischer Schritt:
|
|
|
|
- Lokale DB wurde direkt aktualisiert:
|
|
- `TRUK` zeigt auf `https://trafagag.sharepoint.com/sites/WorldwideBIPlatform/Import/Finance/UK_B1`
|
|
- `TRUK` hat `18` aktive Manual-Excel-Mapping-Zeilen
|
|
- `SalesPriceValue <= =[Sales Price/Value]*[Quantity]`
|
|
- FinanceProbe wurde auf `http://127.0.0.1:5099` neu gestartet.
|
|
- `/finance` antwortet mit HTTP `200`.
|
|
- `/run/export/TRUK` wurde angestossen, konnte aber wegen lokaler SharePoint-/Graph-Authentifizierung nicht neu laden:
|
|
|
|
```text
|
|
ClientSecretCredential authentication failed
|
|
Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte. (127.0.0.1:9)
|
|
```
|
|
|
|
Damit gilt:
|
|
|
|
- Code, Seed und lokale Mapping-Konfiguration sind vorbereitet.
|
|
- Die zentrale Tabelle `CentralSalesRecords` enthaelt fuer UK noch den alten Importstand, bis der SharePoint-Zugriff wieder funktioniert und `TRUK` neu exportiert wird.
|
|
- Aktueller alter Zentralstand bleibt deshalb:
|
|
- `1'882` Zeilen
|
|
- `395'605.82 GBP` Summe `SalesPriceValue`
|
|
- rekonstruiert `3'533'348.89 GBP` ueber `SalesPriceValue * Quantity`
|
|
|
|
Offen fachlich fuer UK:
|
|
|
|
- Nach neuem Export mit Mapping muss die Restdifferenz gegen `check.xlsx` erneut gemessen werden.
|
|
- Wenn der Wert bei ca. `3.53 Mio. GBP` liegt, UK-Datei auf Rabatte, Fracht, Nebenpositionen oder eine andere Netto-Spalte pruefen.
|
|
- Wenn der Wert auf `3.75 Mio. GBP` steigt, war das Mapping die Hauptursache.
|
|
|
|
## Manual Excel/CSV SharePoint-Ordner und Quellordner-Export 2026-05-08
|
|
|
|
Umgesetzte Anpassungen:
|
|
|
|
- Manual Excel/CSV Quellen erzeugen nun immer eine neue Exportdatei; die Quelldatei wird nicht als Exportdatei weitergereicht.
|
|
- Lokale Manual-Dateien schreiben die neue Exportdatei in denselben lokalen Ordner wie die Quelldatei.
|
|
- SharePoint-Manual-Dateien schreiben die neue Exportdatei in denselben SharePoint-Ordner wie die Quelldatei.
|
|
- SharePoint-Referenzen ohne Dateiendung werden als Ordner behandelt.
|
|
- Bei SharePoint-Ordnern sucht die App die neueste passende Excel-/CSV-Datei fuer den Standort.
|
|
- Fuer datierte Dateien wird das Muster `ddMMyy_TSC.xlsx` bzw. `ddMMyy_TSC.csv` ausgewertet.
|
|
- Beispiel England/UK:
|
|
- Ordner: `https://trafagag.sharepoint.com/sites/WorldwideBIPlatform/Import/Finance/UK_B1`
|
|
- `010526_TRUK.xlsx` wird vor `010426_TRUK.xlsx` gewaehlt.
|
|
- Falls kein Datum aus dem Dateinamen gelesen werden kann, faellt die Auswahl auf das SharePoint-Aenderungsdatum zurueck.
|
|
|
|
Technischer Befund aus den Logs:
|
|
|
|
- Spanien konnte die SharePoint-Datei lesen (`4'341` Zeilen), fiel danach aber auf einen ungueltigen lokalen Pfad, weil die URL als lokale Exportdatei behandelt wurde.
|
|
- Fehlerpfad war sinngemaess `...\https:\trafagag.sharepoint.com\...\Spain_Sales_2025.csv`.
|
|
- Deutschland hatte keinen manuellen Dateipfad hinterlegt.
|
|
- England/TRUK zeigte lokal versehentlich auf die Deutschland-Alphaplan-Datei; die lokale DB wurde auf den UK_B1-Ordner korrigiert.
|
|
|
|
Codeaenderungen:
|
|
|
|
- `DataSourceFetchResult` enthaelt optionale Overrides fuer lokalen Output-Ordner und SharePoint-Zielordner.
|
|
- `ManualExcelDataSourceAdapter` erkennt SharePoint-Dateien vs. SharePoint-Ordner und waehlt bei Ordnern die neueste passende Datei.
|
|
- `SharePointUploadService` kann den neuesten passenden Datei-Eintrag in einem SharePoint-Ordner aufloesen.
|
|
- `SiteExportService` nutzt fuer Manual-Quellen den Quellordner als Zielordner.
|
|
- `StandortePageService` erlaubt fuer Manual-Importe nun auch SharePoint-Ordnerreferenzen.
|
|
- Standort-UI-Hilfetext wurde entsprechend angepasst.
|
|
- `DatabaseSeedService` repariert England/TRUK auf den UK_B1-Ordner, wenn der Manual-Pfad leer ist.
|
|
|
|
Letzte technische Verifikation:
|
|
|
|
```text
|
|
dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --no-restore --verbosity minimal
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- Tests erfolgreich, `55/55`
|
|
- Bekannte MudBlazor-Analyzerwarnungen zu `Dense` bleiben bestehen.
|
|
|
|
## FinanceProbe erweitert fuer alle Finance-Referenzen 2026-05-08
|
|
|
|
Umgesetzte Anpassungen:
|
|
|
|
- FinanceProbe zeigt nun alle aktiven `FinanceReferences` fuer 2025, auch wenn noch kein aktiver/importierter Standort dazu Daten liefert.
|
|
- Damit werden auch Laender wie AT, CH, CN, CZ, GFS, JP, MS, MSA, PL und RU sichtbar als `Keine Daten`, bis Ist-Daten vorhanden sind.
|
|
- Zusaetzliche Sektion `Datenabdeckung je Standort`:
|
|
- Standort / TSC
|
|
- Quellsystem und Anschlussart
|
|
- Manual-Datei- oder SharePoint-Pfad
|
|
- Aktivstatus
|
|
- Anzahl 2025-Zeilen in `CentralSalesRecords`
|
|
- Summe `SalesPriceValue`
|
|
- Waehrungen
|
|
- importierte Periode
|
|
- letzter Exportstatus und Hinweis
|
|
- Referenzschluessel-Erkennung wurde fuer CH/AT praezisiert:
|
|
- `AT`, `AUT`, `Oesterreich`/`Austria` -> `AT`
|
|
- `CH`, `CHE`, `Schweiz`/`Switzerland` -> `CH`
|
|
- Damit koennen Zeilen aus `ZSCHWEIZ` mit `LAND1 = AT` fachlich Oesterreich zugeordnet werden.
|
|
|
|
Verifikation:
|
|
|
|
- `Tools/FinanceProbe` Build erfolgreich.
|
|
- Haupttests wurden mit separatem Output/Obj-Pfad ausgefuehrt, damit die laufende App nicht stoert.
|
|
|
|
## FinanceProbe als KI-Steuerprogramm 2026-05-11
|
|
|
|
Die FinanceProbe ist bewusst als temporaeres Test-/KI-Steuerprogramm erweitert worden. Die produktive Blazor-App bleibt davon getrennt.
|
|
|
|
Neue Routen:
|
|
|
|
- `/run/export/{siteKey}`
|
|
- startet einen Standortexport nach `Id`, `TSC` oder `Land`
|
|
- Beispiele: `/run/export/TRUK`, `/run/export/Spanien`, `/run/export/7`
|
|
- `/run/export-all`
|
|
- startet Export aller aktiven Standorte
|
|
- erzeugt danach die zentrale Datei
|
|
- `/run/consolidated`
|
|
- erzeugt nur die zentrale Datei aus `CentralSalesRecords`
|
|
|
|
Nach jedem Lauf zeigt die FinanceProbe eine Run Summary:
|
|
|
|
- neue Exportlogs seit Start
|
|
- Finance-Abgleich gegen `check.xlsx`
|
|
- Datenabdeckung je Standort
|
|
|
|
Zweck:
|
|
|
|
- Exporte und Finance-Abgleich koennen fuer Tests von der KI per HTTP angestossen werden.
|
|
- Die Funktion ist nicht als produktive Bedienoberflaeche gedacht und kann spaeter wieder entfernt werden.
|
|
|
|
## Mapper-/Finance-Konfiguration konsolidiert 2026-05-07
|
|
|
|
Umgesetzte Aufraeumarbeiten:
|
|
|
|
- Die doppelte SAP-OData/HANA-Mapping-Engine wurde entfernt.
|
|
- Neuer gemeinsamer Service: `MappedSalesRecordComposer`.
|
|
- `SapCompositionService` und `HanaQueryService.GetMappedSalesRecordsAsync` laden ihre Quellen weiterhin separat, nutzen danach aber denselben Composer fuer:
|
|
- Primaerquelle
|
|
- Left Joins
|
|
- `SapFieldMapping` nach `SalesRecord`
|
|
- Konstanten wie `=SAP` / `=HANA`
|
|
- Datums-/Zahlenkonvertierung
|
|
- Der alte HANA-B1-Pfad fuer `OINV/INV1/ORIN/RIN1` bleibt bewusst bestehen, damit BI1/SAGE ohne grafisches Mapping weiter laufen.
|
|
- Die SAP-Mapping-Normalisierung liegt nur noch in `StandorteSapEditorService`; `StandortePageService` ruft diesen Service beim Speichern auf.
|
|
- Der tote Parameter im konsolidierten Export wurde entfernt. `ConsolidatedExportService.ExportAsync()` liest eindeutig aus `CentralSalesRecords`.
|
|
- Manueller Import erlaubt in UI und Service jetzt `.xlsx` und `.csv`.
|
|
|
|
Finance-Konfiguration:
|
|
|
|
- Neue Tabelle `FinanceReferences` fuer Soll-/check.xlsx-Referenzen je Jahr.
|
|
- Neue Tabelle `FinanceIntercompanyRules` fuer 2nd-party/IC-Erkennung nach `ScopeKey`, Kundennummer oder Namensmarker.
|
|
- Budgetkurse 2025 werden in `CurrencyExchangeRates` mit `Notes = Budget 2025` geseedet.
|
|
- `FinanceReconciliationService` liest Sollwerte, Budgetkurse und IC-Regeln aus der DB.
|
|
- Config-Export/-Import enthaelt jetzt `FinanceReferences` und `FinanceIntercompanyRules`.
|
|
|
|
Noch bewusst offen:
|
|
|
|
- HANA-B1-Spezialpfad und generischer HANA-Mapper laufen parallel. Das ist aktuell noetig fuer bestehende BI1/SAGE-Standorte ohne Mapping.
|
|
- Manual Excel hat weiterhin Header-Automatik und grafisches Mapping. Naechster Aufraeumpunkt waere eine gemeinsame Import-Mapping-Engine.
|
|
|
|
Letzte technische Verifikation:
|
|
|
|
```text
|
|
dotnet build .\TrafagSalesExporter.csproj --no-restore -p:UseAppHost=false --verbosity minimal
|
|
dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --no-restore --verbosity minimal
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- Build erfolgreich
|
|
- Tests erfolgreich, `52/52`
|
|
- Bekannte MudBlazor-Analyzerwarnungen zu `Dense` bleiben bestehen.
|
|
|
|
## SAP OData / ZSCHWEIZ / HANA Mapping 2026-05-07
|
|
|
|
Aktueller Entscheid:
|
|
|
|
- `ZSCHWEIZ` wird nicht direkt als SAP-HANA-Spezialfall gelesen.
|
|
- `ZSCHWEIZ` wird ueber den bestehenden SAP-OData/Gateway-Pfad gelesen.
|
|
- Der grafische Quellen- und Feldmapper bleibt dafuer aktiv.
|
|
- Feldinfos muessen nicht hart codiert werden, solange der Gateway-Service `$metadata` fuer das EntitySet liefert.
|
|
|
|
Quellsystem-Namen wurden zur Entwirrung geschaerft:
|
|
|
|
- Code `SAP` bleibt technisch bestehen, DisplayName ist jetzt `SAP OData`.
|
|
- Code `SAP_HANA` bleibt fuer direkte HANA-Tabellen/Views bestehen, DisplayName ist jetzt `SAP HANA Tables/Views`.
|
|
- Bestehende Konfigurationen bleiben dadurch kompatibel.
|
|
|
|
Seed / Vorkonfiguration:
|
|
|
|
- Standort `ZSCHWEIZ` / Land `Schweiz/Oesterreich` wird als inaktiver Standort angelegt bzw. repariert.
|
|
- `SourceSystem = SAP`.
|
|
- Quelle: Alias `Z`, EntitySet `ZSCHWEIZSet`.
|
|
- Mapping ist grafisch editierbar und wird auf die Felder der Tabelle `ZSCHWEIZ` gesetzt.
|
|
- Die Seed-/Repair-Logik zieht Quelle und Mapping auch bei bereits vorhandener ZSCHWEIZ-Konfiguration nach; manuelles Mapping ist nur noetig, wenn die Gateway-Feldnamen vom erwarteten `ZSCHWEIZ`-Layout abweichen.
|
|
|
|
Wichtig fuer die UI:
|
|
|
|
1. App neu starten, damit Seed/Repair laeuft.
|
|
2. `Settings -> Quellsysteme`: `SAP` sollte als `SAP OData` erscheinen.
|
|
3. `Standorte -> ZSCHWEIZ`:
|
|
- Quellsystem `SAP OData (SAP)`
|
|
- SAP Service URL Override auf den finalen OData-Service fuer `ZSCHWEIZ` setzen, falls die zentrale SAP-URL noch auf `ZPOWERBI_EINKAUF_SRV` zeigt.
|
|
- `Entity Sets refreshen`.
|
|
- Quelle `Z` soll auf `ZSCHWEIZSet` zeigen.
|
|
- `Felder aus Quellen laden`.
|
|
- Mapping kontrollieren.
|
|
|
|
ABAP / SAP:
|
|
|
|
- ABAP-Report liegt in `report.abap`.
|
|
- Report fuellt Tabelle `ZSCHWEIZ` aus Buchungskreis `1100` = Schweiz und `1200` = Oesterreich.
|
|
- `LAND1` ist Reporting-Land aus Buchungskreis.
|
|
- `CUSTOMER_LAND` ist Kundenland aus `KNA1-LAND1`.
|
|
- Upsert erfolgt per `MODIFY zschweiz FROM TABLE`.
|
|
|
|
Letzte technische Verifikation:
|
|
|
|
```text
|
|
dotnet build .\TrafagSalesExporter.csproj --no-restore -p:UseAppHost=false --verbosity minimal
|
|
dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --no-restore --verbosity minimal
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- Build erfolgreich
|
|
- Tests erfolgreich, `50/50`
|
|
|
|
## Finance-Abgrenzung: Antworten Andreas 2026-05-07
|
|
|
|
Fachliche Vorgabe nach Rueckmeldung:
|
|
|
|
- Net Sales Actuals werden in Hauswaehrung gerechnet.
|
|
- Massgebend ist der Nettofakturawert.
|
|
- Umrechnung nach CHF erfolgt mit Budgetkursen, nicht mit Tageskursen.
|
|
- Umrechnung/Summierung soll pro Artikel bzw. Belegposition erfolgen.
|
|
- Indien wird in INR betrachtet.
|
|
- Italien wird in Hauswaehrung betrachtet; Intercompany-/2nd-party-Abgrenzung wird separat angeschaut.
|
|
- UK wird in GBP betrachtet.
|
|
- Gutschriften haben eigene Rechnungsnummern/Rechnungspositionen und sollen ueber Artikelnummern/Positionen behandelt werden.
|
|
- Intercompany soll im zweiten Schritt als 2nd-party/3rd-party-Klassifikation pflegbar werden.
|
|
- Genannte 2nd-party/Intercompany-Indikatoren: Trafag, Magnetic Sense/Magnets Sense, Gesellschaft fuer Sensorik; Nummern/Uebersetzungen koennen je Land abweichen.
|
|
|
|
Budgetkurse 2025 fuer CHF-Ausweis:
|
|
|
|
```text
|
|
USD/CHF = 0.85
|
|
EUR/CHF = 0.95
|
|
GBP/CHF = 1.13
|
|
CHF/INR = 90.91
|
|
CHF/CZK = 25.64
|
|
PLN/CHF = 0.22
|
|
CHF/JPY = 156.25
|
|
```
|
|
|
|
Umsetzung in der FinanceProbe:
|
|
|
|
- Auswahl der Ist-Variante bevorzugt nun `Nettofakturawert Hauswaehrung` (`DocTotal - VatSum`).
|
|
- `Sales Price/Value` bleibt als Vergleichsvariante sichtbar.
|
|
- Zusaetzlicher Kandidat `Nettofakturawert Hauswaehrung -> CHF Budget 2025`.
|
|
- Referenz in der Oberflaeche wird als `check.xlsx Sollwert` bezeichnet, nicht mehr als fuehrende Power-BI-Referenz.
|
|
- Intercompany-Anzeige wurde fachlich als `2nd-party/IC` beschriftet; Regeln werden jetzt in `FinanceIntercompanyRules` geseedet und per Config exportiert/importiert.
|
|
|
|
## Finance Probe / Sales-Abgrenzung
|
|
|
|
Ziel der heutigen Arbeit:
|
|
|
|
- separate kleine Pruef-GUI fuer Finanz-/Sales-Abgrenzungen bauen
|
|
- moeglichst viel Logik aus dem Hauptprogramm wiederverwenden
|
|
- verschiedene Summenlogiken pro Land nebeneinander sichtbar machen
|
|
- gegen `check.xlsx` vergleichen
|
|
|
|
Wichtiges fachliches Verstaendnis nach Klaerung im Chat:
|
|
|
|
- `check.xlsx` kommt von Rhino und enthaelt die Soll-Zahlen von Andreas.
|
|
- Aus den Landessystemen kommt der Ist-Wert.
|
|
- Power BI soll in der fachlichen Kommunikation nicht als fuehrende Referenz genannt werden.
|
|
- Ziel ist nicht, zufaellig die passendste technische Variante zu nehmen, sondern je Land/System die fachlich korrekte Abgrenzungslogik zu klaeren.
|
|
|
|
## Commit
|
|
|
|
Rollback-Commit fuer die Finance-Probe wurde erstellt:
|
|
|
|
```text
|
|
15dec06 Add finance reconciliation probe
|
|
```
|
|
|
|
Dieser Commit enthaelt gezielt:
|
|
|
|
- `Services/FinanceReconciliationService.cs`
|
|
- `Tools/FinanceProbe/FinanceProbe.csproj`
|
|
- `Tools/FinanceProbe/Program.cs`
|
|
- DI-Registrierung in `Program.cs`
|
|
- Dashboard nutzt den ausgelagerten Finance-Service
|
|
- `TrafagSalesExporter.csproj` schliesst `Tools/**` aus dem Hauptprojekt aus
|
|
- `TrafagSalesExporter.sln` enthaelt das neue Tool-Projekt
|
|
|
|
Andere bereits vorhandene Worktree-Aenderungen wurden nicht mitcommitted.
|
|
|
|
## Neues Tool
|
|
|
|
Neues separates Probe-GUI:
|
|
|
|
```text
|
|
Tools/FinanceProbe
|
|
```
|
|
|
|
Start:
|
|
|
|
```powershell
|
|
dotnet run --project Tools\FinanceProbe\FinanceProbe.csproj --urls http://localhost:55417
|
|
```
|
|
|
|
URL:
|
|
|
|
```text
|
|
http://localhost:55417/finance
|
|
```
|
|
|
|
Aktueller Start im Chat:
|
|
|
|
- Probe-GUI wurde auf `localhost:55417` gestartet
|
|
- HTTP `200` bestaetigt
|
|
|
|
Hinweis Netzwerk:
|
|
|
|
- Start mit `localhost` ist nur lokal auf dem Laptop erreichbar.
|
|
- Andere im Trafag-Netz koennen es so normalerweise nicht ueber Laptop-IP oeffnen.
|
|
- Fuer Netzwerkzugriff waere `http://0.0.0.0:55417` noetig.
|
|
- Probe-GUI hat aktuell keine Authentifizierung, daher nicht unkontrolliert im Netzwerk freigeben.
|
|
|
|
## FinanceReconciliationService
|
|
|
|
Neue wiederverwendbare Logik:
|
|
|
|
```text
|
|
Services/FinanceReconciliationService.cs
|
|
```
|
|
|
|
Interface:
|
|
|
|
```csharp
|
|
IFinanceReconciliationService
|
|
```
|
|
|
|
Aktuelle Funktion:
|
|
|
|
```csharp
|
|
Task<List<NetSalesReferenceRow>> BuildNetSalesReferenceRowsAsync(int year = 2025)
|
|
```
|
|
|
|
Logik:
|
|
|
|
- liest `CentralSalesRecords`
|
|
- filtert Jahr ueber `InvoiceDate`, fallback `ExtractionDate`
|
|
- gruppiert pro Referenz-Key/Land
|
|
- berechnet Kandidaten:
|
|
- `SalesPriceValue`
|
|
- `DocTotalFC - VatSumFC`
|
|
- `DocTotal - VatSum`
|
|
- Belegkopfwerte werden vor Summierung dedupliziert:
|
|
- bevorzugt `TSC + DocumentType + DocumentEntry`
|
|
- fallback `TSC + DocumentType + InvoiceNumber`
|
|
- erkennt aktuell Intercompany nur pragmatisch fuer IT/TRIT anhand bekannter Kunden
|
|
- liefert pro Kandidat Wert, Waehrung, IC-Wert, Differenzen
|
|
|
|
## FinanceProbe Darstellung
|
|
|
|
Die Tabelle zeigt aktuell:
|
|
|
|
- Status
|
|
- Firma
|
|
- gewaehlte Abgrenzung
|
|
- Ist-Waehrung
|
|
- Ist 2025
|
|
- Referenz-Waehrung
|
|
- Referenz
|
|
- Excel LC
|
|
- Excel CHF
|
|
- Excel Power BI
|
|
- Excel Status
|
|
- Differenz
|
|
- Differenz ohne IC
|
|
- Waehrung
|
|
- Zeilen
|
|
- Varianten aufklappbar
|
|
|
|
Wichtig:
|
|
|
|
- Die Bezeichnung `Power BI` ist in der Probe-Oberflaeche noch sichtbar, weil `check.xlsx` diese Spalte enthaelt.
|
|
- Fachlich soll in Kommunikation gegen Andreas aber `check.xlsx` / Soll-Zahl genannt werden, nicht Power BI als fuehrende Referenz.
|
|
- Eine sinnvolle naechste UI-Bereinigung waere, die Spalte/Labels in der Probe auf `Excel Sollwert` oder `Rhino Sollwert` umzubenennen.
|
|
|
|
## Probe-Output vom 2026-05-04 09:55
|
|
|
|
Zusammenfassung:
|
|
|
|
```text
|
|
8 Standorte
|
|
4 OK
|
|
1 Pruefen
|
|
3 Keine Daten
|
|
Excel-Referenzen gelesen: 17
|
|
```
|
|
|
|
Befunde:
|
|
|
|
### CH
|
|
|
|
- Keine Ist-Daten
|
|
- keine sichtbare Soll-Zahl
|
|
|
|
### DE
|
|
|
|
- Keine Ist-Zeilen aus Systemdaten
|
|
- Soll/LC aus Excel vorhanden:
|
|
- Referenz ca. `3'635'923`
|
|
- Excel LC `3'635'922.91`
|
|
- Excel CHF `3'407'000.00`
|
|
|
|
Offen:
|
|
|
|
- Quelle fuer DE klaeren
|
|
- evtl. MANUAL_EXCEL oder noch nicht exportiert
|
|
|
|
### ES
|
|
|
|
- Keine Ist-Zeilen aus Systemdaten
|
|
- Soll/LC aus Excel vorhanden:
|
|
- Referenz ca. `3'102'334`
|
|
- Excel LC `3'102'333.61`
|
|
- Excel CHF `2'907'000.00`
|
|
|
|
Offen:
|
|
|
|
- Quelle fuer ES klaeren
|
|
- evtl. MANUAL_EXCEL oder noch nicht exportiert
|
|
|
|
### FR
|
|
|
|
- Status OK
|
|
- gewaehlte Abgrenzung: `Sales Price/Value`
|
|
- Ist-Waehrung: `EUR`
|
|
- Ist: `1'471'218.44`
|
|
- Soll/Referenz: `1'471'218.00`
|
|
- Differenz: `0.44`
|
|
- Zeilen: `1649`
|
|
|
|
Befund:
|
|
|
|
- FR passt praktisch exakt mit `Sales Price/Value` in EUR.
|
|
|
|
Offene Frage an Andreas:
|
|
|
|
- Ist `Sales Price/Value` in EUR fuer FR fachlich korrekt?
|
|
|
|
### IN
|
|
|
|
- Status OK
|
|
- gewaehlte Abgrenzung: `Sales Price/Value`
|
|
- Ist-Waehrungen: `CHF, EUR, GBP, INR, JPY, USD`
|
|
- Ist: `750'936'591.38`
|
|
- Soll/Referenz: `750'936'591.00`
|
|
- Differenz: `0.38`
|
|
- Zeilen: `4000`
|
|
|
|
Befund:
|
|
|
|
- IN passt rechnerisch fast exakt, aber Waehrungen sind gemischt.
|
|
|
|
Offene Frage an Andreas:
|
|
|
|
- Ist diese gemischte Summe fachlich korrekt?
|
|
- Oder muss nach CHF umgerechnet bzw. nach Waehrung getrennt werden?
|
|
|
|
### IT
|
|
|
|
- Status Pruefen
|
|
- gewaehlte Abgrenzung: `DocTotal - VatSum`
|
|
- Ist-Waehrung: `EUR`
|
|
- Ist: `11'866'896.53`
|
|
- Soll/Referenz LC: `7'669'840.00`
|
|
- Differenz: `4'197'056.53`
|
|
- Differenz ohne IC: `3'733.67`
|
|
- Zeilen: `15883`
|
|
|
|
Befund:
|
|
|
|
- IT liegt ohne IC-Abzug stark daneben.
|
|
- Mit erkanntem IC-Abzug ist die Differenz sehr klein.
|
|
|
|
Offene Frage an Andreas:
|
|
|
|
- Soll IT mit Intercompany-Abzug gerechnet werden?
|
|
- Falls ja: nach welchen Kunden/Kriterien erkennt Finance Intercompany?
|
|
|
|
### UK
|
|
|
|
- Status OK
|
|
- gewaehlte Abgrenzung: `Sales Price/Value`
|
|
- Ist-Waehrung: `USD`
|
|
- Ist: `3'749'865.33`
|
|
- Soll/Referenz: `3'749'865.00`
|
|
- Differenz: `0.33`
|
|
- Zeilen: `942`
|
|
|
|
Befund:
|
|
|
|
- UK passt praktisch exakt mit `Sales Price/Value` in USD.
|
|
|
|
Offene Frage an Andreas:
|
|
|
|
- Ist USD fuer UK korrekt?
|
|
- Oder muss fuer offizielles Reporting nach CHF umgerechnet werden?
|
|
|
|
### US
|
|
|
|
- Status OK
|
|
- gewaehlte Abgrenzung: `Sales Price/Value`
|
|
- Ist-Waehrung: `USD`
|
|
- Ist: `3'749'865.33`
|
|
- Soll/Referenz: `3'749'865.00`
|
|
- Differenz: `0.33`
|
|
- Zeilen: `942`
|
|
|
|
Befund:
|
|
|
|
- US zeigt denselben Ist-Wert wie UK.
|
|
- Das wirkt auffaellig und sollte fachlich/technisch geprueft werden.
|
|
|
|
Offene Frage:
|
|
|
|
- Welche Quelle und Logik ist fuer US korrekt?
|
|
- Ist US im aktuellen System richtig zugeordnet?
|
|
|
|
## Word-Datei fuer Andreas
|
|
|
|
Erstellt:
|
|
|
|
```text
|
|
FINANZ_OFFENE_FRAGEN_ANDREAS.docx
|
|
```
|
|
|
|
Inhalt:
|
|
|
|
- kurze Mail an Andreas
|
|
- `check.xlsx` als Soll-Zahl von Andreas/Rhino formuliert
|
|
- Power BI fachlich nicht als Referenz genannt
|
|
- bisherige Befunde pro Land:
|
|
- FR
|
|
- IN
|
|
- IT
|
|
- UK
|
|
- US
|
|
- DE / ES
|
|
- offene Fragen zu:
|
|
- Waehrung und CHF-Umrechnung
|
|
- Umsatzdefinition
|
|
- Periodenabgrenzung
|
|
- Gutschriften/Storno
|
|
- Intercompany
|
|
- Entscheid-Tabelle pro Land
|
|
|
|
## Markdown-Datei fuer Andreas
|
|
|
|
Erstellt/angepasst:
|
|
|
|
```text
|
|
FINANZ_FRAGEN_ANDREAS.md
|
|
```
|
|
|
|
Aktuelle Formulierung:
|
|
|
|
- `check.xlsx` kommt von Rhino und enthaelt Soll-Zahlen von Andreas.
|
|
- Landessysteme liefern Ist-Werte.
|
|
- offen ist, welche fachliche Logik pro Land/System zur Soll-Zahl fuehren soll.
|
|
- Power BI ist nicht mehr als fuehrende Referenz formuliert.
|
|
|
|
## Verifikation
|
|
|
|
Ausgefuehrt:
|
|
|
|
```powershell
|
|
dotnet build .\TrafagSalesExporter.csproj --verbosity minimal
|
|
dotnet build .\Tools\FinanceProbe\FinanceProbe.csproj --verbosity minimal
|
|
dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --verbosity minimal
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- Hauptprojekt baut erfolgreich
|
|
- FinanceProbe baut erfolgreich
|
|
- Tests erfolgreich
|
|
- `48/48` Tests gruen
|
|
|
|
Bekannte Warnungen:
|
|
|
|
- `NU1900` im Probe-Build, weil NuGet-Sicherheitsdaten wegen Netzwerk/nuget.org nicht geladen werden konnten
|
|
- bekannte MudBlazor Analyzer-Warnungen zu `Dense`
|
|
|
|
## Offene sinnvolle naechste Schritte
|
|
|
|
1. In der Probe-UI `Power BI`-Labels fachlich bereinigen:
|
|
- z. B. `Excel Sollwert` / `Rhino Sollwert`
|
|
2. Andreas' Antworten in eine Konfiguration ueberfuehren:
|
|
- Land/System
|
|
- Summenlogik
|
|
- System-Waehrung
|
|
- CHF-Umrechnung ja/nein
|
|
- Periodendatum
|
|
- IC-Regel
|
|
3. DE/ES Quelle klaeren:
|
|
- aktuell keine Ist-Daten
|
|
4. US/UK Doppelwert pruefen:
|
|
- US zeigt denselben Ist-Wert wie UK
|
|
5. IT Intercompany-Regel fachlich bestaetigen
|
|
6. Wenn Regeln bestaetigt sind:
|
|
- Finance-Probe erweitert anzeigen
|
|
- spaeter produktiv ins Hauptprogramm uebernehmen
|
|
|
|
---
|
|
|
|
## Nachtrag 2026-05-04: Excel-Spaltenmapper fuer manuelle Land-Excel-Dateien
|
|
|
|
Ausloeser:
|
|
|
|
- Deutschland hat ein eigenes Excel-Beispiel geliefert.
|
|
- Das Format entspricht nicht dem bisherigen Standard-Excel-Import.
|
|
- Ziel war, nicht fuer jedes Land statischen Spezialcode zu schreiben, sondern die Spaltenzuordnung konfigurierbar zu machen.
|
|
|
|
Beispielhafte deutsche Spalten:
|
|
|
|
- `Export-Datum`
|
|
- `Firma`
|
|
- `Belegnummer`
|
|
- `Position`
|
|
- `ArtikelBezeichnung`
|
|
- `Warengruppen-Bezeichnung`
|
|
- `Anz. VE`
|
|
- `Lieferanten Nummer`
|
|
- `Name Lieferant`
|
|
- `Land Lieferant`
|
|
- `AdressNummer-Kunde`
|
|
- `Name Kunde`
|
|
- `Land Kunde`
|
|
- `Branche`
|
|
- `EinstandsPreis`
|
|
- `Währung`
|
|
- `BestellNummer`
|
|
- `NettoPreisEinzelX`
|
|
- `NettoPreisGesamtX`
|
|
- `Versandbedingung`
|
|
- `AdressNummer_V`
|
|
- `Belegdatum-Rechnung`
|
|
- `BelegDatum Auftrag`
|
|
- `ArtikelNummer`
|
|
|
|
Wichtige fachliche/technische Interpretation fuer Deutschland:
|
|
|
|
- `NettoPreisGesamtX` wird als `SalesPriceValue` verwendet.
|
|
- `Währung` wird fuer `SalesCurrency`, `DocumentCurrency`, `CompanyCurrency` und `StandardCostCurrency` verwendet.
|
|
- `Belegdatum-Rechnung` wird als `InvoiceDate` verwendet.
|
|
- `BelegDatum Auftrag` wird als `OrderDate` verwendet.
|
|
- `ArtikelNummer` wird als `Material` verwendet.
|
|
- Kommentar-/Info-Zeilen ohne echte Position und ohne Betrag werden beim Import ignoriert.
|
|
|
|
## Neue Datenstruktur
|
|
|
|
Neue Tabelle / neues Model:
|
|
|
|
```text
|
|
ManualExcelColumnMappings
|
|
Models/ManualExcelColumnMapping.cs
|
|
```
|
|
|
|
Felder:
|
|
|
|
- `SiteId`
|
|
- `TargetField`
|
|
- `SourceHeader`
|
|
- `IsRequired`
|
|
- `IsActive`
|
|
- `SortOrder`
|
|
|
|
Zweck:
|
|
|
|
- Pro Standort kann festgelegt werden, welche Excel-Spalte auf welches internes `SalesRecord`-Feld gemappt wird.
|
|
- Konstanten sind moeglich, wenn `SourceHeader` mit `=` beginnt, z. B. `=Manual Excel`.
|
|
|
|
## Geaenderte Hauptlogik
|
|
|
|
Geaendert:
|
|
|
|
```text
|
|
Services/ManualExcelImportService.cs
|
|
```
|
|
|
|
Neue Logik:
|
|
|
|
- Beim manuellen Excel-Import werden zuerst aktive `ManualExcelColumnMappings` des Standorts geladen.
|
|
- Wenn Mapping-Zeilen vorhanden sind, wird dieses Mapping verwendet.
|
|
- Wenn kein Mapping vorhanden ist, laeuft weiterhin die bisherige statische Standarderkennung.
|
|
- Damit bleiben bestehende manuelle Excel-Imports abwaertskompatibel.
|
|
|
|
Wichtig:
|
|
|
|
- Der Mapper ersetzt nicht die fachliche Finanzlogik.
|
|
- Er sorgt nur dafuer, dass fremde Excel-Spalten korrekt in die internen Felder geschrieben werden.
|
|
- Welche Summe spaeter fuer Finance gilt, muss weiterhin fachlich entschieden werden.
|
|
|
|
## Geaenderte Standort-UI
|
|
|
|
Geaendert:
|
|
|
|
```text
|
|
Components/Pages/Standorte.razor
|
|
Services/StandortePageService.cs
|
|
```
|
|
|
|
In der Standortbearbeitung fuer manuelle Excel-Standorte gibt es neu:
|
|
|
|
- Bereich `Excel-Spaltenmapping`
|
|
- Button `Spalten aus Excel laden`
|
|
- Button `Auto-Match`
|
|
- Button `Mapping hinzufuegen`
|
|
- Tabelle mit:
|
|
- Zielfeld
|
|
- Excel-Spalte / Konstante
|
|
- Pflicht
|
|
- Aktiv
|
|
- Loeschen
|
|
|
|
Auto-Match erkennt aktuell u. a. die deutschen Spalten und schlaegt passende Zuordnungen vor.
|
|
|
|
## Config-Export / Import
|
|
|
|
Geaendert:
|
|
|
|
```text
|
|
Services/ConfigTransferService.cs
|
|
Models/ConfigTransferPackage.cs
|
|
```
|
|
|
|
Neu:
|
|
|
|
- `ManualExcelColumnMappings` werden im Konfigurationspaket mit exportiert.
|
|
- Beim Import werden die Mapping-Zeilen wieder hergestellt.
|
|
|
|
Damit kann die Konfiguration spaeter zwischen Umgebungen mitgenommen werden.
|
|
|
|
## Datenbank-Schema
|
|
|
|
Geaendert:
|
|
|
|
```text
|
|
Data/AppDbContext.cs
|
|
Services/DatabaseInitializationService.SchemaSql.cs
|
|
Services/DatabaseSchemaMaintenanceService.cs
|
|
```
|
|
|
|
Neu:
|
|
|
|
- `DbSet<ManualExcelColumnMapping>`
|
|
- `CREATE TABLE ManualExcelColumnMappings`
|
|
- Schema-Wartung legt die Tabelle nachtraeglich an, falls sie in einer bestehenden DB fehlt.
|
|
- Beim Loeschen eines Standorts werden dessen manuelle Excel-Mappings mit geloescht.
|
|
|
|
## Deutschland lokal eingerichtet
|
|
|
|
Am 2026-05-04 wurde Deutschland in der lokalen Datenbank direkt ohne UI eingerichtet.
|
|
|
|
Lokale DB:
|
|
|
|
```text
|
|
C:\Users\koi\source\repos\Ai\TrafagSalesExporter\trafag_exporter.db
|
|
```
|
|
|
|
Gefundener/konfigurierter Standort:
|
|
|
|
```text
|
|
Id=8
|
|
TSC=TRDE
|
|
Land=Deutschland
|
|
SourceSystem=MANUAL_EXCEL
|
|
```
|
|
|
|
Aktive Mapping-Zeilen:
|
|
|
|
```text
|
|
26
|
|
```
|
|
|
|
Konkrete Zuordnung fuer DE:
|
|
|
|
```text
|
|
ExtractionDate <- Export-Datum
|
|
InvoiceNumber <- Belegnummer
|
|
PositionOnInvoice <- Position
|
|
Material <- ArtikelNummer
|
|
Name <- ArtikelBezeichnung
|
|
ProductGroup <- Warengruppen-Bezeichnung
|
|
Quantity <- Anz. VE
|
|
SupplierNumber <- Lieferanten Nummer
|
|
SupplierName <- Name Lieferant
|
|
SupplierCountry <- Land Lieferant
|
|
CustomerNumber <- AdressNummer-Kunde
|
|
CustomerName <- Name Kunde
|
|
CustomerCountry <- Land Kunde
|
|
CustomerIndustry <- Branche
|
|
StandardCost <- EinstandsPreis
|
|
StandardCostCurrency <- Währung
|
|
PurchaseOrderNumber <- BestellNummer
|
|
SalesPriceValue <- NettoPreisGesamtX
|
|
SalesCurrency <- Währung
|
|
DocumentCurrency <- Währung
|
|
CompanyCurrency <- Währung
|
|
Incoterms2020 <- Versandbedingung
|
|
SalesResponsibleEmployee <- AdressNummer_V
|
|
InvoiceDate <- Belegdatum-Rechnung
|
|
OrderDate <- BelegDatum Auftrag
|
|
DocumentType <- =Manual Excel
|
|
```
|
|
|
|
Wichtig fuer Rollback/Umzug:
|
|
|
|
- Diese DE-Einrichtung wurde direkt in `trafag_exporter.db` gespeichert.
|
|
- Die DB-Aenderung ist kein Git-Commit-Inhalt, weil SQLite-Datenbankdaten normalerweise nicht sauber versioniert werden.
|
|
- Der Code fuer den Mapper ist aktuell im Worktree vorhanden, aber noch nicht committed.
|
|
- Wenn die DB zurueckgerollt oder neu erstellt wird, muss das DE-Mapping erneut ueber die UI, Config-Import oder ein Hilfsskript eingerichtet werden.
|
|
|
|
## Tests
|
|
|
|
Ergaenzt:
|
|
|
|
```text
|
|
TrafagSalesExporter.Tests/ManualExcelImportServiceTests.cs
|
|
```
|
|
|
|
Neuer Test:
|
|
|
|
```text
|
|
ReadSalesRecordsAsync_Uses_Configured_Manual_Excel_Mapping_For_German_Headers
|
|
```
|
|
|
|
Der Test prueft:
|
|
|
|
- deutsches Excel-Headerformat
|
|
- Kommentarzeile ohne echte Position wird ignoriert
|
|
- echte Belegposition wird importiert
|
|
- `NettoPreisGesamtX` mit Schweizer Tausenderzeichen wird korrekt als Dezimalzahl gelesen
|
|
- Waehrung `EUR` wird in Sales-/Document-/Company-Currency uebernommen
|
|
- Rechnungsdatum und Auftragsdatum werden korrekt gelesen
|
|
|
|
Letzter bekannter Teststand nach Mapper-Arbeit:
|
|
|
|
```text
|
|
dotnet build .\TrafagSalesExporter.csproj --verbosity minimal
|
|
dotnet build .\Tools\FinanceProbe\FinanceProbe.csproj --verbosity minimal
|
|
dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --verbosity minimal --no-restore
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- Hauptprojekt baut erfolgreich
|
|
- FinanceProbe baut erfolgreich
|
|
- Tests erfolgreich
|
|
- `49/49` Tests gruen
|
|
|
|
Bekannte Warnung:
|
|
|
|
- `NU1900`, weil NuGet-Sicherheitsdaten wegen Netzwerk/nuget.org nicht geladen werden konnten
|
|
|
|
## Aktueller Laufstand
|
|
|
|
Die Haupt-App war nach der DE-Konfiguration erreichbar:
|
|
|
|
```text
|
|
http://localhost:55416/standorte
|
|
HTTP 200
|
|
```
|
|
|
|
Hinweis:
|
|
|
|
- Der Browser kann geschlossen sein, waehrend der Serverprozess weiterlaeuft.
|
|
- Wenn ein Build wegen gesperrter Dateien fehlschlaegt, zuerst den laufenden `TrafagSalesExporter`-Prozess beenden.
|
|
|
|
## Noch offen nach Excel-Spaltenmapper
|
|
|
|
1. Mapper-Code committen, sobald der aktuelle Stand als Rollback-Punkt gesichert werden soll.
|
|
2. In der Standort-UI Deutschland oeffnen und visuell pruefen, ob die 26 Mapping-Zeilen angezeigt werden.
|
|
3. Mit echtem DE-Excel einen Importlauf testen.
|
|
4. Danach Finance-Probe erneut pruefen:
|
|
- ob DE nicht mehr `Keine Daten` ist
|
|
- ob `SalesPriceValue` gegen Soll aus `check.xlsx` passt
|
|
5. Falls weitere Laender eigene Excel-Formate liefern:
|
|
- nicht statischen Code bauen
|
|
- neues Mapping pro Standort pflegen
|
|
6. Klaeren, ob DE fachlich `NettoPreisGesamtX` in EUR als Ist-Wert verwenden soll oder ob CHF-Umrechnung noetig ist.
|
|
|
|
---
|
|
|
|
## Nachtrag 2026-05-05: FinanceProbe Ampel, Spanien v2 und Deutschland-Beispielfile
|
|
|
|
### FinanceProbe Management-Ansicht
|
|
|
|
Das Testprogramm `Tools/FinanceProbe` wurde fuer das Finance-Meeting erweitert.
|
|
|
|
URL lokal:
|
|
|
|
```text
|
|
http://localhost:55417/finance
|
|
```
|
|
|
|
Neue Ansicht:
|
|
|
|
- `Meeting Ampel 2025`
|
|
- Ampel pro Land:
|
|
- Gruen: Zahl passt rechnerisch gegen Referenz
|
|
- Gelb: Differenz oder fachliche Abgrenzung offen
|
|
- Grau: keine belastbaren Importdaten
|
|
- Anzeige pro Land:
|
|
- Ist
|
|
- Soll / Referenz
|
|
- Differenz
|
|
- passender technischer Wert
|
|
- Waehrung / CHF-Hinweis
|
|
- kurze fachliche Begruendung
|
|
|
|
Wichtig zur Waehrung:
|
|
|
|
- Wenn Quelle `CHF` liefert, kann CHF direkt gezeigt werden.
|
|
- Wenn Quelle `EUR`, `USD`, `GBP`, `INR` usw. liefert, ist es Mandanten-/Originalwaehrung.
|
|
- CHF-Ausweis braucht dann eine separate FX-Regel bzw. offiziellen Umrechnungskurs.
|
|
|
|
### Spanien v2 im Testprogramm
|
|
|
|
Spanien wird im FinanceProbe nicht mehr nur als normaler Zentralimport betrachtet.
|
|
|
|
Direkter CSV-Check:
|
|
|
|
```text
|
|
sagespain/v2/Spain_Sales_2025.csv
|
|
```
|
|
|
|
Gelesene Werte:
|
|
|
|
- Zeilen: `4'341`
|
|
- Ist 2025 / `SalesPriceValue`: `3'082'320.18`
|
|
- Waehrung: `EUR`
|
|
- Soll aus `check.xlsx`: `3'102'333.61`
|
|
- Differenz: `-20'013.43`
|
|
|
|
Status:
|
|
|
|
- Ampel: Gelb / Pruefen
|
|
- Grund: Export technisch lesbar, aber Differenz zu `check.xlsx` offen.
|
|
|
|
Offen fuer Spanien:
|
|
|
|
- korrekte Datumsabgrenzung (`FechaFactura` vs. Alternativen)
|
|
- Serien `REG`, `LAT`, `PRO`, `REC`
|
|
- Behandlung von Gutschriften / `REC`
|
|
- offizielle Sage-Auswertung mit identischem Filter zur Sollzahl
|
|
|
|
### Deutschland-Beispielfile
|
|
|
|
Neues File im Projektordner:
|
|
|
|
```text
|
|
DE_Beispiel_Export_Daten.xlsx
|
|
```
|
|
|
|
Hinweis:
|
|
|
|
- Der Benutzer hatte zuerst `.xls` genannt, vorhanden ist `.xlsx`.
|
|
- Das File ist als Beispielfile zu behandeln, nicht als finale Jahresdatei.
|
|
|
|
Technischer Check:
|
|
|
|
- relevante Spalte: `NettoPreisGesamtX`
|
|
- Mapping-Ziel: `SalesPriceValue`
|
|
- Betragszeilen: `2`
|
|
- Summe `NettoPreisGesamtX`: `8'290.70`
|
|
- Waehrung: `EUR`
|
|
|
|
Einbau im FinanceProbe:
|
|
|
|
- eigener Abschnitt `Germany Excel sample check`
|
|
- zeigt Datei, Zeilenzahl, Summe und Referenz aus `check.xlsx`
|
|
- markiert explizit, dass die Differenz nur Sample-Charakter hat
|
|
- in der Management-Ampel wird Deutschland weiter nicht als OK gewertet, solange kein finaler DE-Jahresexport/import vorliegt
|
|
|
|
Fachliche Interpretation fuer Deutschland:
|
|
|
|
- Das Mapping funktioniert technisch.
|
|
- `NettoPreisGesamtX` kann als Kandidat fuer `SalesPriceValue` gelesen werden.
|
|
- Das Beispielfile darf nicht gegen die Jahresreferenz `3'635'922.91` als finale Ist-Zahl verwendet werden.
|
|
- Fuer das Meeting ist die Aussage:
|
|
- Deutschland-Format ist technisch verstanden.
|
|
- Finale DE-Zahl fehlt noch.
|
|
- Benoetigt wird ein vollstaendiger DE-Jahresfile 2025 oder ein bestaetigter Importlauf.
|
|
|
|
### Verifikation 2026-05-05
|
|
|
|
Ausgefuehrt:
|
|
|
|
```text
|
|
dotnet build .\Tools\FinanceProbe\FinanceProbe.csproj --verbosity minimal --no-restore
|
|
dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --verbosity minimal --no-restore
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- FinanceProbe Build erfolgreich
|
|
- Tests erfolgreich
|
|
- `50/50` Tests gruen
|
|
- Web UI liefert `HTTP 200`
|
|
- FinanceProbe enthaelt:
|
|
- `Meeting Ampel 2025`
|
|
- `Spain CSV direct check`
|
|
- `Germany Excel sample check`
|
|
|
|
## Financechef-Regeln abgesichert 2026-05-11
|
|
|
|
Umgesetzt:
|
|
|
|
- `PostingDate` als eigenes Feld in `SalesRecord` und `CentralSalesRecord`.
|
|
- Zentrale SQLite-Tabelle erhaelt `PostingDate` automatisch per Schema-Maintenance.
|
|
- HANA-B1 liest `DocDate` als Buchungsdatum und `TaxDate` als Fakturadatum.
|
|
- Excel/CSV-Import erkennt `posting date`, `Buchungsdatum` und `LineRegistrationDate`.
|
|
- Finance-Abgleich filtert das Jahr nach `PostingDate`, mit Fallback auf `InvoiceDate` und danach `ExtractionDate`.
|
|
- Finance-Abgleich bevorzugt Nettofakturawert in Hauswaehrung positionsweise.
|
|
- Wenn lokale Belegkopfwerte pro Position wiederholt wirken, wird die Ueberzaehlung erkannt:
|
|
- B1-Positionswert `SalesPriceValue` wird dann als Positions-Netto bevorzugt.
|
|
- deduplizierter Belegkopfwert bleibt als Kandidat sichtbar.
|
|
- Intercompany wird weiterhin separat ausgewiesen und nicht still entfernt.
|
|
|
|
Verifikation:
|
|
|
|
```text
|
|
dotnet build .\Tools\FinanceProbe\FinanceProbe.csproj --no-restore -p:UseAppHost=false -p:OutDir=.\verify_probe_out\ --verbosity minimal
|
|
dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --no-restore -p:UseAppHost=false --verbosity minimal
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- FinanceProbe Build erfolgreich.
|
|
- Tests erfolgreich: `57/57`.
|
|
- Bekannte externe Warnung: NuGet-Sicherheitsdaten konnten wegen fehlendem Zugriff auf `api.nuget.org` nicht geladen werden.
|
|
- Lokaler Smoke-Test `/finance`: `HTTP 200`.
|
|
- Hinweis: Ein bestehender `dotnet`-Prozess sperrt den normalen FinanceProbe-Build-Output. Der Smoke-Test wurde deshalb ohne Rebuild direkt aus dem vorhandenen Output gestartet.
|
|
|
|
## Finance-Entscheide dokumentiert 2026-05-11
|
|
|
|
Neue Doku:
|
|
|
|
```text
|
|
docs/FINANCE_ENTSCHEIDE.md
|
|
```
|
|
|
|
Enthaelt die verbindlichen Financechef-Entscheide:
|
|
|
|
- Hauswaehrung ist fuehrend.
|
|
- CHF-Umrechnung ueber Budgetkurse.
|
|
- Aggregation pro Artikel/Belegposition.
|
|
- Net Sales Actuals = Nettofakturawert.
|
|
- Jahresabgrenzung ueber Buchungsdatum.
|
|
- Gutschriften separat ueber Beleg-/Positionslogik.
|
|
- Intercompany/2nd-party separat ausweisen.
|
|
- Indien fachlich immer in `INR`.
|
|
|
|
## FinanceProbe / UK Nachdokumentation 2026-05-11
|
|
|
|
Ergaenzt in `docs/FINANCE_ENTSCHEIDE.md`:
|
|
|
|
- Pruefstand der Finance-Regeln.
|
|
- Testergebnis `58/58`.
|
|
- UK/England-Befund:
|
|
- `TRUK`
|
|
- `1'881` geladene Zeilen
|
|
- `395'605.82 GBP` Ist
|
|
- `3'749'865.00` Soll
|
|
- Differenz `-3'354'259.18`
|
|
- Interpretation: vermutlich Teilmenge/Monatsfile statt Jahreswert.
|
|
- Offener UK-Entscheid: Monatsdateien aufsummieren oder kumulierten Jahresfile lesen.
|
|
|
|
Ergaenzt in `docs/PROGRAMM_DIAGRAMME.md`:
|
|
|
|
- FinanceProbe-Start und Hinweis zu Console-Logging.
|
|
- Hinweis zu DLL-Sperren durch Visual Studio bzw. alte `dotnet`-Prozesse.
|
|
|
|
## HR KPI Cockpit und Filterkorrektur 2026-05-13
|
|
|
|
Ergaenzt:
|
|
|
|
- Separater HR-KPI-Reiter `/hr-kpi`.
|
|
- Dashboard-Tabs fuer Ueberblick, Fluktuation, Absenzen, Zeit/Ferien, Mitarbeitende und Datenstatus.
|
|
- Fluktuationsvisuals: Gauge, Funnel, Donut, Organisation-Balken und Monatsbalken.
|
|
- Architektur-Cleanup: `HrKpiService` als Fassade, Build-Pipeline in `Services/HrKpi/HrKpiDashboardBuilder.cs`, UI-Tabs in `Components/HrKpi/HrKpiDashboardTabs.razor`.
|
|
- Konfigurierbare HR-Dateiquellen ueber `HrKpi` in `appsettings.json`.
|
|
- HR-KPI-Regressionstests.
|
|
|
|
Korrigiert:
|
|
|
|
- `Austrittsjahr` ist jetzt optional.
|
|
- Leeres Austrittsjahr bedeutet: alle Austritte.
|
|
- Von/Bis-Austritt hat Vorrang vor Austrittsjahr.
|
|
- Die Austrittsjahr-Auswahl wird aus den vorhandenen Austrittsdaten aufgebaut.
|
|
- `Austrittsjahr` ist beim Start leer statt automatisch aktuelles Jahr.
|
|
- Fluktuation nutzt nur vergleichbare Filter auf Mitarbeitenden- und Austrittsdaten.
|
|
- Kostenstelle, GLZ und Restferien filtern nicht die Fluktuation, weil die Austrittsdatei diese Felder nicht stabil enthaelt; das Cockpit zeigt dazu einen Hinweis.
|
|
- Bei Mehrjahresauswahl wird die Fluktuation als Auswahlwert statt als Jahreswert gefuehrt.
|
|
- Fluktuationsvisuals zaehlen distinct nach Personalnummer.
|
|
- Fluktuationsraten nutzen nun durchschnittlichen Headcount statt Stichtags-Headcount: Monat, Quartal und Jahr folgen `formeln.docx`.
|
|
- Krankenquote nutzt den FTE-Nenner: `Krankheitstage / (FTE * 21 Tage)`.
|
|
- Rexx-Austrittsarten mit Umlaut werden korrekt normalisiert: `Kündigung AN` zaehlt als Arbeitnehmerkuendigung, `Kündigung AG` als Arbeitgeberkuendigung-Ausschluss, `Ruhestand` als Pensionierung.
|
|
|
|
Nachdokumentation:
|
|
|
|
```text
|
|
docs/HR_KPI_NACHDOKU_2026-05-13.md
|
|
```
|
|
|
|
Verifikation:
|
|
|
|
- `dotnet build .\TrafagSalesExporter.csproj --no-restore -p:UseAppHost=false -p:OutDir=.\obj\verify_app\ --verbosity minimal`
|
|
- `dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --no-restore -p:UseAppHost=false -p:OutDir=.\obj\verify_tests\ --verbosity minimal`
|
|
- Ergebnis: `69/69` Tests bestanden.
|
|
- Kontrollwert `C:\temp\Personalausgeschieden.xlsx`: `104` Austritte total, `42` `Kündigung AN`, `34` `Kündigung AG`, `33` fluktuationsrelevant.
|
|
- Kontrollwert neuer Nenner: Avg Headcount 2025 `211.3`, Fluktuation Jahr effektiv `15.6%`.
|
|
|
|
## FinanceProbe Finanzchef-Uebersicht 2026-05-13
|
|
|
|
Ergaenzt:
|
|
|
|
- Neuer Reiter `Finanzchef Uebersicht` in `Tools/FinanceProbe`.
|
|
- Kompakte Soll/Ist-Sicht nur fuer offene Laender.
|
|
- Spalten reduziert auf Status, Land, Waehrung, Ist, Soll, Abweichung und Pruefgrund.
|
|
- Bestehende Detailtabellen bleiben unveraendert fuer Analyse/Nachvollzug.
|
|
|
|
Verifikation:
|
|
|
|
- `dotnet build .\Tools\FinanceProbe\FinanceProbe.csproj --no-restore -p:UseAppHost=false -p:OutDir=.\obj\verify_financeprobe\ --verbosity minimal`
|
|
- Ergebnis: Build erfolgreich, `0` Fehler.
|
|
- Hinweis: `NU1900` wegen nicht erreichbarer NuGet-Sicherheitsdaten im eingeschraenkten Netzwerk.
|
|
|
|
## Finance CFO Word-Kurzbericht 2026-05-13
|
|
|
|
Erstellt:
|
|
|
|
- `docs/FINANCE_CHEF_SUMMARY_2026-05-13.docx`
|
|
- Kurzbericht fuer Finance/CFO mit Kernaussagen und Massnahmen.
|
|
- Enthalten: FR, IN, US, AT, ES, UK/EN, DE, CH, IT.
|
|
- Ausgeschlossen: GFS und reine 0-/Leer-Faelle ohne operative Aussage.
|
|
|
|
Inhaltlicher Fokus:
|
|
|
|
- Freigabefaehige Laender: FR, IN, US.
|
|
- Kleine/mittlere Klaerung: AT, ES.
|
|
- Hohe Prioritaet: UK/EN, DE, CH.
|
|
- Kritisch: IT wegen groesster Abweichung und offener Berechnungsart.
|
|
|
|
## Finance CFO Word-Kurzbericht Erweiterung 2026-05-15
|
|
|
|
Ergaenzt:
|
|
|
|
- Aktuelle Fassung: `docs/FINANCE_CHEF_SUMMARY_2026-05-15.docx`
|
|
- Erweiterte Tabellenansicht mit Status, Ist, Soll/Rhino, Abweichung, Pruefquelle, Massnahme und Prioritaet.
|
|
- Grafische Ampel-Uebersicht fuer OK/Klaeren/Hoch/Kritisch.
|
|
- Prioritaetsgrafik fuer IT, DE, UK/EN, CH, AT/ES.
|
|
- Abschnitt `Geprueft gegen` mit Rhino/Andreas `check.xlsx`, FinanceProbe/CentralSalesRecords, Spain CSV, Deutschland-Beispielfile und UK_B1.
|
|
|
|
Verifikation:
|
|
|
|
- DOCX enthaelt `word/document.xml`.
|
|
- Inhalte `Rhino / Andreas check.xlsx`, `Management-Ampel`, `Prioritaetsgrafik` und `Laendertabelle mit Massnahmen` wurden im Dokumentpaket geprueft.
|
|
|
|
## Finance Spanien Mailentwurf 2026-05-15
|
|
|
|
Erstellt:
|
|
|
|
- `docs/FINANCE_ES_MAIL_ABWEICHUNG_2026-05-15.md`
|
|
- Spanischer Mailentwurf zur Abweichung Spanien Net Sales 2025.
|
|
- Enthaltene Pruefpunkte: Zeitraum, Serien `REG/LAT/PRO/REC`, Abonos/Credit Notes, Datumslogik und verwendetes Netto-Umsatzfeld.
|
|
|
|
## Finance IT und UK Mailentwuerfe 2026-05-15
|
|
|
|
Erstellt:
|
|
|
|
- `docs/FINANCE_IT_MAIL_ABWEICHUNG_2026-05-15.md`
|
|
- `docs/FINANCE_UK_MAIL_ABWEICHUNG_2026-05-15.md`
|
|
|
|
Inhalt:
|
|
|
|
- Italien: grosse Abweichung `+7.034.496,29 EUR`, Fokus Berechnungsart, Beleg/Position-Deduplizierung, Intercompany, Credit Notes, Datumslogik und Waehrung.
|
|
- UK/England: Restdifferenz `-216,154.91 GBP`, Fokus Jahresvollstaendigkeit, Periodenbereich, Credit Notes, Nettofeld, Discounts/Freight/Charges, 2nd-/3rd-party und Waehrung.
|
|
|
|
## Finance Entscheide Extraktion 2026-05-15
|
|
|
|
Erstellt:
|
|
|
|
- `entscheide.md`
|
|
|
|
Inhalt:
|
|
|
|
- Fragen und Entscheide aus der Finance-Abstimmung extrahiert.
|
|
- Festgehaltene Kernentscheide: Hauswaehrung je Land, Budgetkurse fuer CHF-Sicht, Berechnung pro Artikel/Belegposition, Nettofakturawert, Buchungsdatum, separate Gutschriftenausweisung und Intercompany/2nd-party als eigenes Auswahlfeld.
|
|
- Intercompany-Marker dokumentiert: `MAGNETS SENSE`, `MAGNETIC SENSE`, `TRAFAG`, `GESELLSCHAFT FUER SENSORIK`, `GESELLSCHAFT FUR SENSORIK`.
|
|
|
|
## Finance Dokumentgueltigkeit 2026-05-15
|
|
|
|
Erstellt:
|
|
|
|
- `docs/FINANCE_WELCHES_DOKUMENT_GILT_2026-05-15.md`
|
|
|
|
Festgelegt:
|
|
|
|
- Fuehrendes CFO-Dokument: `docs/FINANCE_CHEF_SUMMARY_2026-05-15.docx`
|
|
- Alte CFO-Version `docs/FINANCE_CHEF_SUMMARY_2026-05-13.docx` entfernt, weil sie durch die Version vom 2026-05-15 ersetzt wurde.
|
|
- Entscheidbasis: `entscheide.md` und `docs/FINANCE_ENTSCHEIDE.md`.
|
|
|
|
## Finance Dashboard Todo 2026-05-15
|
|
|
|
Erstellt:
|
|
|
|
- `docs/FINANCE_DASHBOARD_TODO_2026-05-15.md`
|
|
|
|
Inhalt:
|
|
|
|
- Todo-Liste fuer Group Sales Reporting Intranet-Dashboard.
|
|
- Priorisierte Punkte fuer CFO-Dokument, offene Laenderabweichungen, Intercompany, Budgetkurse und Berechtigungskonzept.
|
|
|
|
## Navigation und HR-KPI-Zugriff 2026-05-15
|
|
|
|
Geaendert:
|
|
|
|
- Linke Navigation reduziert:
|
|
- Hauptgruppe `Finance Cockpit`
|
|
- eigener Hauptpunkt `HR KPI (Login)`
|
|
- Bisherige Finance-Seiten liegen als Unterpunkte unter `Finance Cockpit`:
|
|
- Dashboard
|
|
- Management Cockpit
|
|
- Standorte
|
|
- Transformationen
|
|
- Settings
|
|
- Logs
|
|
- HR KPI hat eine separate zweite Zugriffssperre mit Name und Passwort.
|
|
- HR-Daten werden erst geladen und angezeigt, wenn die HR-KPI-Sperre erfolgreich entsperrt wurde.
|
|
|
|
Konfiguration:
|
|
|
|
- Abschnitt `HrKpiAccess` in `appsettings.json`
|
|
- Benutzer: `hr`
|
|
- Passwortvorschlag: `Trafag-HR-KPI-2026!`
|
|
- Im Repo ist nur der SHA-256-Hash gespeichert, nicht das Klartextpasswort.
|
|
|
|
Verifikation:
|
|
|
|
```text
|
|
dotnet build .\TrafagSalesExporter.csproj --no-restore -p:UseAppHost=false -p:OutDir=.\obj\verify_hrlogin\ --verbosity minimal
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- Build erfolgreich.
|
|
- 3 bestehende MudBlazor-Analyzer-Warnungen in `Logs.razor`, `Transformations.razor` und `Standorte.razor`.
|
|
|
|
## IIS 500 Diagnose und Hosting-Modell 2026-05-20
|
|
|
|
Geaendert:
|
|
|
|
- `web.config` fuer IIS auf `hostingModel="outofprocess"` umgestellt.
|
|
- `stdoutLogEnabled="true"` bleibt aktiv, Logziel bleibt `.\logs\stdout`.
|
|
- `ASPNETCORE_DETAILEDERRORS=true` fuer die temporaere IIS-Fehlerdiagnose gesetzt.
|
|
- Ziel: Wenn IIS/ASP.NET Core vor dem App-Start scheitert, sollen eher verwertbare Startlogs entstehen; ausserdem wird die App nicht mehr direkt im IIS Worker-Prozess gehostet.
|
|
|
|
Aktueller Stand:
|
|
|
|
- Publish-Ordner `\\trch-webapp-bidashboard.trafagch.local\BiDashboard$\` enthaelt `BiDashboard.dll`, `web.config`, `wwwroot`, `runtimes`, `trafag_exporter.db` und `logs`.
|
|
- `logs` war trotz aktivem stdout-Logging leer.
|
|
- Die veroeffentlichte DLL liess sich vom Publish-Ordner aus starten und brach nicht sofort mit einer Exception ab.
|
|
- Remote-Pruefung der installierten .NET-Runtimes per WinRM war nicht moeglich; der Serveradmin muss deshalb am Server pruefen, ob das .NET 8 Hosting Bundle installiert ist.
|
|
|
|
Naechste Server-Pruefpunkte:
|
|
|
|
- URL `https://trch-webapp-bidashboard.trafagch.local/BiDashboard/diag.txt` testen.
|
|
- Wenn `diag.txt` nicht erreichbar ist, stimmt IIS-Anwendung/virtueller Pfad/Binding nicht.
|
|
- Wenn `diag.txt` erreichbar ist, aber die App 500 liefert, Windows Event Viewer pruefen:
|
|
- Windows Logs > Application
|
|
- Quellen: `IIS AspNetCore Module V2`, `.NET Runtime`, `Application Error`
|
|
- App Pool pruefen:
|
|
- .NET CLR Version: `No Managed Code`
|
|
- Pipeline: `Integrated`
|
|
- 32-bit Applications: `False`
|
|
- Identity muss Modify-Rechte auf Publish-Ordner und `logs` haben.
|
|
|
|
## Architekturreview Static/Hardcoding 2026-05-15
|
|
|
|
Erstellt:
|
|
|
|
- `docs/ARCHITEKTUR_REVIEW_STATICS_HARDCODING_2026-05-15.md`
|
|
|
|
Inhalt:
|
|
|
|
- Bewertung der vielen `static`-Methoden im Code.
|
|
- Ergebnis: `static` ist fuer kleine zustandslose Helper akzeptabel; problematisch sind fachliche Regeln und grosse Klassen mit zu vielen Verantwortungen.
|
|
- Dokumentierte Befunde:
|
|
- HR-Testpersonen sind aktuell Code-Regel und sollten in Konfiguration/DB.
|
|
- Finance Vergleich ist aktuell fix auf `2025` und Referenztext.
|
|
- Hauswaehrungen je Land sollten langfristig in Finance-/Standortkonfiguration.
|
|
- Finance-Sollwerte, Budgetkurse und IC-Regeln sind als Seed okay, aber produktiv pflegbar machen.
|
|
- Empfehlung: nicht blind alle `static`-Methoden entfernen, sondern zuerst fachlich veraenderbare Regeln auslagern.
|
|
|
|
## 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:
|
|
|
|
- Linke Navigation neu gegliedert:
|
|
- `Finance Cockpit`
|
|
- `HR KPI (Login)`
|
|
- `Admin`
|
|
- Unter `Finance Cockpit` stehen:
|
|
- `Export Dashboard`
|
|
- `Management Analyse`
|
|
- `Soll/Ist Vergleich`
|
|
- Unter `Admin` stehen:
|
|
- `Standorte`
|
|
- `Transformationen`
|
|
- `Settings`
|
|
- `Logs`
|
|
- Seitentitel wurden an die neuen Menuebezeichnungen angepasst.
|
|
|
|
Verifikation:
|
|
|
|
```text
|
|
dotnet build .\TrafagSalesExporter.csproj --no-restore -p:UseAppHost=false -p:OutDir=.\obj\verify_nav_groups\ --verbosity minimal
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- Build erfolgreich.
|
|
- 3 bestehende MudBlazor-Analyzer-Warnungen in `Logs.razor`, `Transformations.razor` und `Standorte.razor`.
|
|
|
|
## DE Alphaplan-Excel provisorisch vorbereitet 2026-05-20
|
|
|
|
Geaendert:
|
|
|
|
- Deutschland wird beim Start als manueller Excel-Standort vorbereitet:
|
|
- `TSC = TRDE`
|
|
- `Land = Deutschland`
|
|
- `SourceSystem = MANUAL_EXCEL`
|
|
- `IsActive = false`, damit der Gesamtexport ohne gesetzte Datei nicht scheitert.
|
|
- Alphaplan-Mapping wird fuer Deutschland geseedet:
|
|
- `NettoPreisGesamtX` -> `SalesPriceValue`
|
|
- `Belegnummer`, `Position`, `ArtikelNummer`, `ArtikelBezeichnung`
|
|
- `Warengruppen-Bezeichnung`, `Anz. VE`
|
|
- Lieferant/Kunde/Land/Branche
|
|
- `Waehrung`, `Versandbedingung`, `AdressNummer_V`
|
|
- `Belegdatum-Rechnung` fuer Posting-/Invoice-Date
|
|
- `DocumentType = Alphaplan Excel`
|
|
- Testdatei erhalten und eingeordnet:
|
|
- `docs/2025_DataExport_DE.xlsx`
|
|
|
|
Erster Befund:
|
|
|
|
- `NettoPreisGesamtX` komplett: `4'154'690.05 EUR`
|
|
- `Land Kunde = Deutschland`: `3'455'276.64 EUR`
|
|
- `Land Kunde = Deutschland + China`: `3'647'592.44 EUR`
|
|
- Sollwert DE: `3'635'923.00 EUR`
|
|
|
|
Offen:
|
|
|
|
- Finance/Munir muss bestaetigen, welche Kundenlaender und Filter in Alphaplan fuer den offiziellen DE-Istwert gelten.
|
|
- Manager-Input nennt Warengruppen- und Versandbedingungs-Codes; im Excel sind aktuell vor allem Bezeichnungen/Texte sichtbar.
|
|
|
|
Verifikation:
|
|
|
|
```text
|
|
dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --no-restore -p:UseAppHost=false -p:OutDir=.\obj\verify_de_alphaplan\ --verbosity minimal
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- 75/75 Tests erfolgreich.
|
|
- Bestehende Warnungen: NU1900 wegen lokaler Paket-Sicherheitsdatenabfrage, sowie bekannte MudBlazor-Analyzer-Warnungen zu `Dense`.
|
|
|
|
## Management Cockpit zentrale Filterkopplung 2026-05-15
|
|
|
|
Geaendert:
|
|
|
|
- Die untere `Zentrale Roh-Auswertung` im Management Cockpit ist nicht mehr nur global.
|
|
- Neue Filterfelder: `Landfilter` und `TSC`.
|
|
- Wenn oben eine Einzeldatei analysiert wird, uebernimmt die zentrale Auswertung automatisch Land und TSC aus dieser Datei.
|
|
- Beispiel: Auswahl `USA | TRUS | Sales_TRUS_2026-05-08.xlsx` setzt unten automatisch `USA / TRUS`.
|
|
- Button `Global` leert die Filter, falls wieder alle Laender/Standorte ausgewertet werden sollen.
|
|
- Jahres-, Monats-, Jahreswerte-, Monatswerte-, Tageswerte-, Quellen- und Laendertabellen verwenden denselben Land/TSC-Filter.
|
|
|
|
Verifikation:
|
|
|
|
```text
|
|
dotnet build .\TrafagSalesExporter.csproj --no-restore -p:UseAppHost=false -p:OutDir=.\obj\verify_management_scope2\ --verbosity minimal
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- Build erfolgreich.
|
|
- 3 bestehende MudBlazor-Analyzer-Warnungen in `Logs.razor`, `Transformations.razor` und `Standorte.razor`.
|
|
|
|
## Finance Vergleich als eigener Reiter 2026-05-15
|
|
|
|
Geaendert:
|
|
|
|
- `Net Sales Actuals 2025 Referenz` aus dem Start-Dashboard entfernt.
|
|
- Neue Seite `Finance Vergleich` unter `Finance Cockpit` angelegt.
|
|
- Route: `/finance-cockpit/vergleich`
|
|
- Die Seite zeigt den Soll/Ist-Vergleich gegen `check.xlsx` separat, inklusive IC-Abzug, Referenzwert, Summenfeld, Differenz, Waehrung, Zeilen und Status.
|
|
- `DashboardPageService` laedt die Finance-Referenzdaten nicht mehr automatisch mit dem operativen Dashboard.
|
|
|
|
Verifikation:
|
|
|
|
```text
|
|
dotnet build .\TrafagSalesExporter.csproj --no-restore -p:UseAppHost=false -p:OutDir=.\obj\verify_finance_compare_tab\ --verbosity minimal
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- Build erfolgreich.
|
|
- 3 bestehende MudBlazor-Analyzer-Warnungen in `Logs.razor`, `Transformations.razor` und `Standorte.razor`.
|
|
|
|
## Finance-Regeln und Dashboard-Basis-Spalte 2026-05-20
|
|
|
|
Geaendert:
|
|
|
|
- Neuer Admin-Reiter `Finance Regeln` angelegt.
|
|
- Route: `/finance-rules`
|
|
- Navigation: `Admin -> Finance Regeln`
|
|
- Zugriff wie andere Admin-Seiten ueber `AdminOnly`.
|
|
- Neue Tabelle/Model `FinanceRules`.
|
|
- Finance-Regeln werden beim Start geseedet und sind danach in der UI pflegbar.
|
|
- Die Regeln wirken auf die Finance-Sicht, nicht auf Rohdaten und nicht auf das technische Spaltenmapping.
|
|
- DE- und IT-Sonderlogik wurde aus dem zentralen Excel-Export in eine generische Regel-Engine verschoben.
|
|
- `ConfigTransferService` exportiert/importiert `FinanceRules` mit.
|
|
- `FinanceReconciliationService` nutzt dieselbe Regel-Engine wie das zentrale Excel, damit Soll/Ist-Vergleich und Endexcel dieselbe Finance-Sicht verwenden.
|
|
- Export Dashboard:
|
|
- neue Spalte `Basis` direkt nach `Land`
|
|
- zeigt Datenbasis mit Icon und Text:
|
|
- `Excel-Datei`
|
|
- `CSV-Datei`
|
|
- `SAP Service`
|
|
- `Server`
|
|
- `Manuelle Datei`
|
|
|
|
Aktuelle Default-Finance-Regeln:
|
|
|
|
- `DE`
|
|
- Jahr auf `2025` erzwingen fuer das Alphaplan-Jahresfile.
|
|
- `CustomerName = Trafag AG` ausschliessen.
|
|
- `CustomerName contains Magnetic Sense` ausschliessen.
|
|
- `InvoiceNumber = GS2510095` ausschliessen, weil bereits 2024 erfasst.
|
|
- `InvoiceNumber starts with GS` als negativer Betrag zaehlen.
|
|
- `IT`
|
|
- `CustomerName contains Trafag Italia` ausschliessen.
|
|
- doppelte Zeilen ohne `SupplierCountry` deduplizieren.
|
|
|
|
DE-Fachabgleich nach Rueckmeldung Deutschland:
|
|
|
|
```text
|
|
Gesamtumsatz NettoPreisGesamtX: 4'154'690.05
|
|
- Weiterberechnungen Trafag AG: 391'655.88
|
|
- Weiterberechnungen Magnetic Sense 2025: 55'648.21
|
|
- Gutschriften GS als negativ statt positiv: 28'205.60 doppelte Wirkung
|
|
- GS2510095 nicht in 2025: 1'419.70
|
|
= DE Jahresabschluss-Umsatz: 3'652'394.46
|
|
```
|
|
|
|
Verifikation:
|
|
|
|
```text
|
|
dotnet test TrafagSalesExporter.sln --verbosity minimal
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- 76/76 Tests erfolgreich.
|
|
|
|
Echter DE-Import und zentrale Excel erneut geprueft:
|
|
|
|
```text
|
|
CentralSalesRecords DE 2025 rows: 4'430
|
|
CentralSalesRecords DE 2025 SalesPriceValue: 3'652'394.46
|
|
Central Excel Sales sheet Finance DE 2025 sum: 3'652'394.46
|
|
Central Excel Finance Summary DE 2025 sum: 3'652'394.46
|
|
```
|
|
|
|
Technische Hauptdateien:
|
|
|
|
- `Models/FinanceRule.cs`
|
|
- `Services/FinanceRuleEngine.cs`
|
|
- `Services/FinanceRulesPageService.cs`
|
|
- `Components/Pages/FinanceRules.razor`
|
|
- `Services/ExcelExportService.cs`
|
|
- `Services/FinanceReconciliationService.cs`
|
|
- `Services/DashboardPageService.cs`
|
|
- `Components/Pages/Dashboard.razor`
|
|
- `Data/AppDbContext.cs`
|
|
- `Services/DatabaseInitializationService.SchemaSql.cs`
|
|
- `Services/DatabaseSchemaMaintenanceService.cs`
|
|
- `Services/DatabaseSeedService.cs`
|
|
- `Services/ConfigTransferService.cs`
|
|
|
|
## Finales zentralisiertes Excel `finall.xlsx` geprueft 2026-05-20
|
|
|
|
Gepruefte Datei:
|
|
|
|
- `C:\Users\koi\Downloads\finall.xlsx`
|
|
|
|
Ergebnis:
|
|
|
|
- Datei ist als zentralisierter Export lesbar.
|
|
- Blaetter:
|
|
- `Finance Summary`
|
|
- `Sales`
|
|
- `Finance Filter Hilfe`
|
|
- `Sales` enthaelt 67'247 Datenzeilen.
|
|
- `Finance Summary` stimmt gegen die Finance-Spalten im Blatt `Sales` exakt:
|
|
- Differenz je Land/Jahr/Waehrung: `0.00`
|
|
- Die Summen entsprechen der lokal erzeugten zentralen Datei `output\Sales_All_2026-05-20.xlsx`.
|
|
- Deutschland 2025 bleibt korrekt:
|
|
- `DE 2025 EUR = 3'652'394.46`
|
|
|
|
Finance-Summen 2025 aus `finall.xlsx`:
|
|
|
|
```text
|
|
AT EUR 3'438'121.37
|
|
CH CHF 43'521'390.82
|
|
DE EUR 3'652'394.46
|
|
ES EUR 3'082'320.18
|
|
FR EUR 1'471'218.44
|
|
IN INR 750'936'591.38
|
|
IT EUR 7'663'145.76
|
|
UK GBP 3'533'710.09
|
|
US USD 3'749'865.33
|
|
```
|
|
|
|
Hinweis:
|
|
|
|
- Der direkte Vergleich gegen die lokale SQLite-Datei `trafag_exporter.db` war nicht aussagekraeftig, weil diese lokale DB keine passenden `CentralSalesRecords` fuer diesen Stand enthaelt.
|
|
- Die Excel-interne Summenpruefung und der Vergleich gegen `output\Sales_All_2026-05-20.xlsx` waren konsistent.
|