8360 lines
264 KiB
Plaintext
8360 lines
264 KiB
Plaintext
# History Canonical
|
|
|
|
Stand: 2026-05-27
|
|
|
|
Diese Datei ist die kanonische Roh-Historie fuer Detail-/Auditbedarf.
|
|
Sie wurde aus docs/raw_md_archive/*.raw erzeugt und entfernt exakt gleiche Markdown-Abschnitte nach Normalisierung von Whitespace und Stand-Zeilen.
|
|
Nicht exakt gleiche, aber fachlich aehnliche Abschnitte bleiben erhalten, damit keine Information verloren geht.
|
|
|
|
## Quellen
|
|
|
|
- lastchange.md.raw (84859 bytes)
|
|
- NEXT_STEPS_2026-04-15.md.raw (48631 bytes)
|
|
- HANDOFF_2026-04-15.md.raw (65523 bytes)
|
|
- LLM_SYSTEM_GUIDE.md.raw (26020 bytes)
|
|
- FINANCE_HANDOFF_2026-05-18.md.raw (12491 bytes)
|
|
- FINANCE_DASHBOARD_TODO_2026-05-15.md.raw (3242 bytes)
|
|
- FINANCE_WELCHES_DOKUMENT_GILT_2026-05-15.md.raw (2519 bytes)
|
|
- FINANCE_ES_MAIL_ABWEICHUNG_2026-05-15.md.raw (1338 bytes)
|
|
- FINANCE_IT_MAIL_ABWEICHUNG_2026-05-15.md.raw (1576 bytes)
|
|
- FINANCE_UK_MAIL_ABWEICHUNG_2026-05-15.md.raw (1999 bytes)
|
|
|
|
## Deduplizierung
|
|
|
|
- Behaltene eindeutige Abschnitte: 323
|
|
- Entfernte exakt doppelte Abschnitte: 0
|
|
|
|
## Kanonische Abschnitte
|
|
|
|
## H1 - Last Change 2026-05-04
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
# Last Change 2026-05-04
|
|
|
|
## H2 - In-App-Schulungen und Finance-Detaildoku 2026-05-21
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H3 - Lokaler Uebergangsserver bis IIS-Fix 2026-05-21
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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`.
|
|
|
|
## H4 - Adminbereich und Passwortwechsel 2026-05-21
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## Adminbereich und Passwortwechsel 2026-05-21
|
|
|
|
Geaendert:
|
|
|
|
- Finance Cockpit und HR KPI Login-Masken haben einen Bereich `Passwort ändern`.
|
|
- Passwortaenderung verlangt Benutzername, aktuelles Passwort, neues Passwort und Wiederholung.
|
|
- Neue Passwoerter muessen mindestens 8 Zeichen haben.
|
|
- Gespeichert wird ein SHA-256-Hash in `appsettings.json`, kein Klartext.
|
|
- Neuer interner Adminbereich `/admin/sessions`.
|
|
- Der Adminbereich hat eine eigene App-interne Sperre `AdminAccess`.
|
|
- Adminseite `Aktive Logins` zeigt App-interne HR-/Finance-Entsperrungen seit dem letzten App-Start:
|
|
- Bereich
|
|
- Login-Name
|
|
- IP-Adresse, soweit aus dem Request verfuegbar
|
|
- Entsperrt seit
|
|
- Zuletzt gesehen
|
|
- Hinweis: Da HR und Finance gemeinsame App-Logins verwenden, zeigt die Seite nicht zwingend die echte Person, sondern die verwendete App-Session.
|
|
- Standorte-Tabelle zeigt jetzt Icons fuer den Quellentyp:
|
|
- Upload-Datei = Manual Excel / CSV
|
|
- Cloud Sync = SAP OData
|
|
- Storage = HANA / Server
|
|
|
|
Initialer Adminzugang:
|
|
|
|
```text
|
|
Username: admin
|
|
Initialpasswort: TrafagAdmin2026!
|
|
```
|
|
|
|
Nach erster Nutzung sollte das Adminpasswort ueber die Admin-Loginmaske geaendert werden.
|
|
|
|
Verifiziert:
|
|
|
|
- `dotnet build .\TrafagSalesExporter.csproj --no-restore --verbosity minimal -p:OutDir=C:\TMP\trafag_out\`
|
|
- Ergebnis: Build erfolgreich, nur bestehende MudBlazor-Analyzer-Warnungen zu `Dense` auf vorhandenen Controls.
|
|
|
|
## H5 - Markdown-Doku und Anwenderdokus nachgezogen 2026-05-20
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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`
|
|
|
|
## H6 - Management Analyse auf Finance Summary ausgerichtet 2026-05-20
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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`
|
|
|
|
## H7 - HR KPI Cockpit erweitert und Anwenderdokus erstellt 2026-05-20
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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`
|
|
|
|
## H8 - Workflow-Konsistenz fuer Keyuser verbessert 2026-05-20
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H9 - Keyuser Prozessdoku SVG 2026-05-20
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H10 - Technische Systemarchitektur SVG 2026-05-20
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H11 - IT Finance-Methode fachlich bestaetigt 2026-05-20
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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`
|
|
|
|
## H12 - IIS Deployment Handoff 2026-05-19
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H13 - ASP.NET Publish direkt aus TrafagSalesExporter 2026-05-19
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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
|
|
```
|
|
|
|
## H14 - Finance Cockpit Login und Vergleichsnachtrag 2026-05-19
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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
|
|
```
|
|
|
|
## H15 - Zentrale Excel Finance-Filter 2026-05-19
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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
|
|
```
|
|
|
|
## H16 - UK_B1 Mapping / FinanceProbe Nachtrag 2026-05-11
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H17 - Manual Excel/CSV SharePoint-Ordner und Quellordner-Export 2026-05-08
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H18 - FinanceProbe erweitert fuer alle Finance-Referenzen 2026-05-08
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H19 - FinanceProbe als KI-Steuerprogramm 2026-05-11
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H20 - Mapper-/Finance-Konfiguration konsolidiert 2026-05-07
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H21 - SAP OData / ZSCHWEIZ / HANA Mapping 2026-05-07
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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`
|
|
|
|
## H22 - Finance-Abgrenzung: Antworten Andreas 2026-05-07
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H23 - Finance Probe / Sales-Abgrenzung
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H24 - Commit
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H25 - Neues Tool
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H26 - FinanceReconciliationService
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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
|
|
|
|
## H27 - FinanceProbe Darstellung
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H28 - Probe-Output vom 2026-05-04 09:55
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## Probe-Output vom 2026-05-04 09:55
|
|
|
|
Zusammenfassung:
|
|
|
|
```text
|
|
8 Standorte
|
|
4 OK
|
|
1 Pruefen
|
|
3 Keine Daten
|
|
Excel-Referenzen gelesen: 17
|
|
```
|
|
|
|
Befunde:
|
|
|
|
## H29 - CH
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
### CH
|
|
|
|
- Keine Ist-Daten
|
|
- keine sichtbare Soll-Zahl
|
|
|
|
## H30 - DE
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
### 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
|
|
|
|
## H31 - ES
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
### 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
|
|
|
|
## H32 - FR
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
### 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?
|
|
|
|
## H33 - IN
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
### 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?
|
|
|
|
## H34 - IT
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
### 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?
|
|
|
|
## H35 - UK
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
### 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?
|
|
|
|
## H36 - US
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
### 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?
|
|
|
|
## H37 - Word-Datei fuer Andreas
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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
|
|
|
|
## H38 - Markdown-Datei fuer Andreas
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H39 - Verifikation
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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`
|
|
|
|
## H40 - Offene sinnvolle naechste Schritte
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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
|
|
|
|
---
|
|
|
|
## H41 - Nachtrag 2026-05-04: Excel-Spaltenmapper fuer manuelle Land-Excel-Dateien
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H42 - Neue Datenstruktur
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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`.
|
|
|
|
## H43 - Geaenderte Hauptlogik
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H44 - Geaenderte Standort-UI
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H45 - Config-Export / Import
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H46 - Datenbank-Schema
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H47 - Deutschland lokal eingerichtet
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H48 - Tests
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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
|
|
|
|
## H49 - Aktueller Laufstand
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H50 - Noch offen nach Excel-Spaltenmapper
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
---
|
|
|
|
## H51 - Nachtrag 2026-05-05: FinanceProbe Ampel, Spanien v2 und Deutschland-Beispielfile
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## Nachtrag 2026-05-05: FinanceProbe Ampel, Spanien v2 und Deutschland-Beispielfile
|
|
|
|
## H52 - FinanceProbe Management-Ansicht
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
### 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.
|
|
|
|
## H53 - Spanien v2 im Testprogramm
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
### 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
|
|
|
|
## H54 - Deutschland-Beispielfile
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
### 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.
|
|
|
|
## H55 - Verifikation 2026-05-05
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
### 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`
|
|
|
|
## H56 - Financechef-Regeln abgesichert 2026-05-11
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H57 - Finance-Entscheide dokumentiert 2026-05-11
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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`.
|
|
|
|
## H58 - FinanceProbe / UK Nachdokumentation 2026-05-11
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H59 - HR KPI Cockpit und Filterkorrektur 2026-05-13
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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%`.
|
|
|
|
## H60 - FinanceProbe Finanzchef-Uebersicht 2026-05-13
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H61 - Finance CFO Word-Kurzbericht 2026-05-13
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H62 - Finance CFO Word-Kurzbericht Erweiterung 2026-05-15
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H63 - Finance Spanien Mailentwurf 2026-05-15
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H64 - Finance IT und UK Mailentwuerfe 2026-05-15
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H65 - Finance Entscheide Extraktion 2026-05-15
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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`.
|
|
|
|
## H66 - Finance Dokumentgueltigkeit 2026-05-15
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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`.
|
|
|
|
## H67 - Finance Dashboard Todo 2026-05-15
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H68 - Navigation und HR-KPI-Zugriff 2026-05-15
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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`.
|
|
|
|
## H69 - IIS 500 Diagnose und Hosting-Modell 2026-05-20
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H70 - Architekturreview Static/Hardcoding 2026-05-15
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H71 - CFO-Bericht IT/Intercompany Diagnose 2026-05-15
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H72 - HR KPI Testpersonen-Ausschluss 2026-05-15
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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`.
|
|
|
|
## H73 - KI-Arbeitsanweisung 2026-05-15
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H74 - Navigation in Finance/HR/Admin gegliedert 2026-05-15
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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`.
|
|
|
|
## H75 - DE Alphaplan-Excel provisorisch vorbereitet 2026-05-20
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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`.
|
|
|
|
## H76 - Management Cockpit zentrale Filterkopplung 2026-05-15
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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`.
|
|
|
|
## H77 - Finance Vergleich als eigener Reiter 2026-05-15
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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`.
|
|
|
|
## H78 - Finance-Regeln und Dashboard-Basis-Spalte 2026-05-20
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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`
|
|
|
|
## H79 - Finales zentralisiertes Excel `finall.xlsx` geprueft 2026-05-20
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## 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.
|
|
|
|
## H80 - Admin Bereich und Startseite aktualisiert 2026-05-21
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## Admin Bereich und Startseite aktualisiert 2026-05-21
|
|
|
|
Admin Bereich:
|
|
|
|
- `/admin/sessions` ist nicht mehr durch den Finance-Cockpit-Login vorgeschaltet.
|
|
- Der Admin Bereich nutzt weiterhin ein eigenes Admin-Passwort über `AdminAccess`.
|
|
- Initialer Benutzer: `admin`
|
|
- Initiales Passwort: `TrafagAdmin2026!`
|
|
- Das Admin-Passwort ist unabhängig vom Finance-Cockpit-Passwort.
|
|
- Dokumentation ergänzt: `docs/ADMIN_BEREICH_STARTSEITE_2026-05-21.md`
|
|
|
|
Startseite:
|
|
|
|
- Corporate-Schrift auf `Open Sans` mit Trafag-nahen Fallbacks angepasst.
|
|
- Manometer-Startgrafik bleibt auf weißem Hintergrund, schwarz gezeichnet und mit Trafag-Schriftzug.
|
|
- Willkommenstext ist sprachabhängig.
|
|
- Optionales Strichmännchen mit Kittel unter dem Willkommenstext ergänzt.
|
|
- Das Strichmännchen ist standardmäßig deaktiviert.
|
|
- Aktivierung über `Admin Bereich` -> `Strichmännchen anzeigen`.
|
|
- Einstellung wird in `appsettings.json` unter `LandingPage.ShowWalkingLabFigure` gespeichert.
|
|
|
|
Technische Dateien:
|
|
|
|
- `Components/Routes.razor`
|
|
- `Components/App.razor`
|
|
- `wwwroot/css/app.css`
|
|
- `Components/Pages/Dashboard.razor`
|
|
- `Components/Pages/AdminSessions.razor`
|
|
- `Program.cs`
|
|
- `Security/LandingPageOptions.cs`
|
|
- `Services/LandingPageSettingsService.cs`
|
|
- `Services/UiTextService.cs`
|
|
- `appsettings.json`
|
|
|
|
## H81 - Nachtrag 2026-05-26: Publish-Fixes, HR-KPI-Upload, Varianten und PDF
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## Nachtrag 2026-05-26: Publish-Fixes, HR-KPI-Upload, Varianten und PDF
|
|
|
|
Deployment / Blazor:
|
|
|
|
- Interaktive Blazor-Server-Render-Mode-Deklarationen fuer die routbaren Seiten ergaenzt, damit Buttons und Formulare auf der publizierten IIS-Seite reagieren.
|
|
- Navigation auf relative Links umgestellt, damit die Anwendung unter `/BiDashboard` nicht auf Root-URLs ohne PathBase springt.
|
|
- Admin-, Finance- und HR-KPI-Login auf serverseitige POST-Endpunkte mit Unlock-Cookies umgestellt, damit Login auch auf der publizierten Seite ohne Blazor-Click-Event funktioniert.
|
|
- SAP-HANA Native DLL `libadonetHDB.dll` wird mitpubliziert und `HDBDOTNETCORE` im `web.config` auf den Publish-Ordner gesetzt.
|
|
|
|
HR-KPI:
|
|
|
|
- Massenupload fuer die fuenf HR-KPI-Dateien direkt im HR-KPI-Cockpit eingebaut.
|
|
- Upload-Ziel auf dem Server: `C:\inetpub\wwwcust\BiDashboard\hrdata`.
|
|
- Erwartete Dateien:
|
|
- `Saldiperstichdatum.xlsx`
|
|
- `Exportkommengehen.xlsx`
|
|
- `HR_KPI_Export.xlsx`
|
|
- `Abwesenheitinstunden.xlsx`
|
|
- `Personalausgeschieden.xlsx`
|
|
- Allgemeiner Zeitraumfilter `Von Datum` / `Bis Datum` ersetzt die reine Austrittsbeschriftung.
|
|
- Fluktuation nutzt den Zeitraum ueber `Austrittsdatum`.
|
|
- Absenzquote nutzt den Zeitraum als Nenner mit Arbeitstagen statt fix `21 Tage`.
|
|
- Wenn die Rexx-Absenzen selbst Datumsfelder enthalten, werden Absenzen auf den Zeitraum gefiltert.
|
|
- Wenn die Rexx-Absenzen keine Datumsfelder enthalten, wird angenommen, dass `Abwesenheitinstunden.xlsx` bereits fuer den gewaehlten Zeitraum exportiert wurde.
|
|
- `MudDatePicker` nutzt explizit `de-CH`, damit Eingaben wie `31.03.2026` auf Server und Browser stabil geparst werden.
|
|
- PDF-/Druckbuttons je HR-KPI-Reiter ergaenzt, z. B. fuer `Fluktuation`, `Absenzen`, `Ampel`, `Mitarbeitende` und `Datenstatus`.
|
|
- Der Druck/PDF-Export rendert nur den jeweiligen Reiterinhalt inkl. Titel, Datenordner und Filterzusammenfassung.
|
|
- Serverseitige HR-KPI-Varianten eingefuehrt:
|
|
- Speicherdatei: `C:\inetpub\wwwcust\BiDashboard\hrdata\hr-kpi-variants.json`
|
|
- letzte Selektion wird serverseitig gespeichert und beim Oeffnen wieder geladen
|
|
- Varianten sind fuer alle Benutzer sichtbar
|
|
- Varianten koennen gespeichert, geladen, aktualisiert, umbenannt und geloescht werden
|
|
- Initiale Testvarianten fuer HR wurden auf dem Server angelegt:
|
|
- `Fluktuation Q1 2026`
|
|
- `Fluktuation Jahr 2026`
|
|
- `Absenzquote Q1 2026`
|
|
|
|
Firewall / Betrieb:
|
|
|
|
- Aktueller HANA-Fehler nach DLL-Fix ist Netzwerk/Firewall, nicht mehr SAP-DLL:
|
|
- Webserver: `10.120.1.17`
|
|
- HANA Internal: `10.194.65.22:30015`
|
|
- India HANA: `20.197.20.60:30015`
|
|
- SAP OData: `10.194.64.29:8000`
|
|
- SharePoint: `trafagag.sharepoint.com:443`
|
|
- Support-Mail an externen Support vorbereitet; Freigabe muss vom Webserver zu den Zielsystemen erfolgen.
|
|
|
|
Validierung:
|
|
|
|
- `dotnet build .\TrafagSalesExporter.csproj --no-restore --verbosity minimal` erfolgreich.
|
|
- `dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --no-restore --verbosity minimal` erfolgreich mit `78/78` Tests.
|
|
- Mehrfach erfolgreich nach `\\trch-webapp-bidashboard.trafagch.local\BiDashboard$\` publiziert.
|
|
|
|
## H82 - Nachtrag 2026-05-26: Nachdokumentation Remote-/Refactoring-Commits
|
|
|
|
Quelle: lastchange.md.raw
|
|
|
|
## Nachtrag 2026-05-26: Nachdokumentation Remote-/Refactoring-Commits
|
|
|
|
Beim Rebase auf `origin/main` wurden zusaetzliche lokal noch nicht vorhandene Commits integriert. Der lokale Stand und `origin/main` sind danach synchron.
|
|
|
|
Finance Details / Export:
|
|
|
|
- Finanzdetail-Export und erweiterte Uebersetzungen wurden ergaenzt.
|
|
- Betroffene Bereiche:
|
|
- `Services/ExcelExportService.cs`
|
|
- `Services/ConsolidatedExportService.cs`
|
|
- `Services/SharePointUploadService.cs`
|
|
- `Services/UiTextService.cs`
|
|
- `Components/Layout/MainLayout.razor`
|
|
- `Components/Layout/NavMenu.razor`
|
|
- Tests fuer Excel-Export und UI-Texte wurden erweitert.
|
|
- SharePoint-Upload-Schnittstelle wurde leicht angepasst.
|
|
|
|
In-App-Training / Anwenderdoku:
|
|
|
|
- Neue Trainingsseiten in der Anwendung:
|
|
- `Components/Pages/FinanceTraining.razor`
|
|
- `Components/Pages/HrKpiTraining.razor`
|
|
- `Components/TrainingSection.razor`
|
|
- Navigation um Trainingseintraege ergaenzt.
|
|
- Neue Trainingsassets:
|
|
- `wwwroot/training/systemarchitektur.svg`
|
|
- `wwwroot/training/keyuser-prozess.svg`
|
|
- `wwwroot/training/finance_cockpit_preview.png`
|
|
- `wwwroot/training/hr_kpi_cockpit_preview.png`
|
|
- Aktualisierte Anwenderdokumente:
|
|
- `docs/FINANCE_COCKPIT_ANLEITUNG_FINANZ_2026-05-20.docx`
|
|
- `docs/HR_KPI_ANLEITUNG_HR_2026-05-20.docx`
|
|
- `docs/MANUAL_IMPORT_DELTA_STAND_2026-05-21.md`
|
|
|
|
Lokaler Dev-Server / Uebergang:
|
|
|
|
- `launchSettings.json` wurde fuer den lokalen Uebergang angepasst.
|
|
- Doku ergaenzt:
|
|
- `docs/LOCAL_DEV_SERVER_UEBERGANG_2026-05-21.md`
|
|
- `docs/MD_DOKUMENTENSTATUS_2026-05-20.md`
|
|
- Ziel: lokal lauffaehige Umgebung dokumentieren, falls IIS/Publish nicht erreichbar ist.
|
|
|
|
Admin / Startseite:
|
|
|
|
- Admin-Bereich wurde von Finance-Login getrennt.
|
|
- Startseite/Landing-Dashboard und Admin-Sessions wurden erweitert.
|
|
- Doku:
|
|
- `docs/ADMIN_BEREICH_STARTSEITE_2026-05-21.md`
|
|
- Relevante technische Bereiche:
|
|
- `Components/AdminAccessPanel.razor`
|
|
- `Components/Pages/AdminSessions.razor`
|
|
- `Security/AdminAccessOptions.cs`
|
|
- `Services/AdminAccessService.cs`
|
|
- `Services/AccessSessionTracker.cs`
|
|
- `Services/AccessPasswordSettingsWriter.cs`
|
|
- `Security/LandingPageOptions.cs`
|
|
- `Services/LandingPageSettingsService.cs`
|
|
|
|
Trading Engine:
|
|
|
|
- Ein Python-Trading-Engine-Paket wurde unter `trade_web` ergaenzt.
|
|
- Dateien:
|
|
- `trade_web/trading_engine.py`
|
|
- `trade_web/trading_engine/__init__.py`
|
|
- Zweck laut Commit-Historie: Trading-Cockpit-Engine als importierbares Paket bereitstellen.
|
|
- Dieser Bereich ist separat vom TrafagSalesExporter/.NET-BI-Dashboard zu betrachten.
|
|
|
|
Aktueller Git-Stand:
|
|
|
|
- Rebase auf `origin/main` erfolgreich.
|
|
- Neuer Head nach Rebase und Push: `d853f53 Add published HR KPI workflow fixes`.
|
|
- `HEAD` und `origin/main` sind synchron.
|
|
- Lokal unversioniert bleiben nur Arbeitsartefakte/Screenshots:
|
|
- `../BiDashboard/`
|
|
- `error.png`
|
|
- `it_export_result.html`
|
|
- `italien.png`
|
|
|
|
## H83 - Next Steps
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
# Next Steps
|
|
|
|
Stand: 2026-05-20
|
|
|
|
RAG-Hinweis: Fuer tokenarme Weiterarbeit zuerst `docs/RAG_ROUTER.md` laden. Diese Datei nur lesen, wenn die Kurzdatei `docs/rag/PROJECT.md` nicht reicht.
|
|
|
|
## H84 - Nachtrag 2026-05-20 Dokumentation bereinigt
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-20 Dokumentation bereinigt
|
|
|
|
Erledigt:
|
|
|
|
- Markdown-Bestand eingeordnet in `docs/MD_DOKUMENTENSTATUS_2026-05-20.md`.
|
|
- HR-Anwenderdoku als Word-Datei optisch ueberarbeitet:
|
|
- `docs/HR_KPI_ANLEITUNG_HR_2026-05-20.docx`
|
|
- inklusive 10 neuer HR-Cockpit-Punkte, Tabellen, Hinweisboxen und Vorschaugrafik.
|
|
- Finance-Anwenderdoku als Word-Datei optisch ueberarbeitet:
|
|
- `docs/FINANCE_COCKPIT_ANLEITUNG_FINANZ_2026-05-20.docx`
|
|
- inklusive Finance Summary Workflow, Filterregeln und Pruefpunkten.
|
|
- Neue neutrale Vorschaubilder fuer die Word-Dokus:
|
|
- `docs/hr_kpi_cockpit_preview.png`
|
|
- `docs/finance_cockpit_preview.png`
|
|
|
|
Bewusst nicht geloescht:
|
|
|
|
- Alte Markdown-Dateien und alte Eintraege bleiben erhalten, wenn sie Pruefwerte, Zwischenentscheide, Mailkontext oder Audit-Spuren enthalten.
|
|
- Nicht mehr fuehrende Dateien sind in `docs/MD_DOKUMENTENSTATUS_2026-05-20.md` als historisch markiert.
|
|
|
|
## H85 - Nachtrag 2026-05-20 Workflow-Fixes nach Review
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-20 Workflow-Fixes nach Review
|
|
|
|
Umgesetzt:
|
|
|
|
- Dashboard warnt vor aktiven manuellen Standorten ohne Datei.
|
|
- Nach Einzelstandortexport wird sichtbar, dass die zentrale Excel neu erzeugt werden muss.
|
|
- Dashboard erkennt eine veraltete zentrale Excel nach neuem Standortexport.
|
|
- Neuer Menuepunkt `Manuelle Importe` fuer Keyuser.
|
|
- `Manuelle Importe` hat jetzt die Reiter `Importdateien` und `Anleitung`.
|
|
- Der Reiter `Anleitung` zeigt den Upload-/Export-/Zentraldatei-/Finance-Pruefprozess grafisch.
|
|
- Zentrale Excel hat ein Blatt `Finance Summary`.
|
|
- `Management Analyse` ist als Rohdaten-/Plausibilitaetssicht markiert.
|
|
- `Soll/Ist Vergleich` ist als verbindliche Finance-Sicht markiert.
|
|
- Export-Live-Status ist nicht mehr pauschal `HANA Abfrage...`.
|
|
|
|
Weiterhin offen:
|
|
|
|
- DE Alphaplan-Fachabgrenzung: Kundenlaender/Filter muessen von Munir/Finance bestaetigt werden.
|
|
|
|
## H86 - Nachtrag 2026-05-20 Keyuser Prozess-SVG
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-20 Keyuser Prozess-SVG
|
|
|
|
Erstellt:
|
|
|
|
```text
|
|
docs/KEYUSER_PROZESSDOKU_2026-05-20.svg
|
|
```
|
|
|
|
Zielgruppe:
|
|
|
|
- Finance Keyuser / Poweruser.
|
|
|
|
Inhalt:
|
|
|
|
- Vorbereitung in Settings und Standorte.
|
|
- Manual-Excel-Dateien fuer UK/ES/DE.
|
|
- Einzelstandortexport, Export aller Standorte und zentrale Excel.
|
|
- Finance-Filter im Endexcel.
|
|
- Soll/Ist Vergleich, Management Analyse, Logs.
|
|
- Fehlerbehandlung und fachliche Freigabe.
|
|
|
|
## H87 - Nachtrag 2026-05-20 Technische Architektur-SVG
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-20 Technische Architektur-SVG
|
|
|
|
Erstellt:
|
|
|
|
```text
|
|
docs/SYSTEMARCHITEKTUR_TECHNISCH_2026-05-20.svg
|
|
```
|
|
|
|
Zielgruppe:
|
|
|
|
- Systemarchitekt / Serveradmin / technischer Projektkontext.
|
|
|
|
Abgrenzung:
|
|
|
|
- Nur produktive Applikation.
|
|
- Keine Testapp, Probe-Tools oder temporaeren Analyseprogramme.
|
|
|
|
Status:
|
|
|
|
- Keyuser-Prozessdoku wurde als separate SVG erstellt.
|
|
|
|
## H88 - Nachtrag 2026-05-20 DE Alphaplan-Excel provisorisch eingebaut
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-20 DE Alphaplan-Excel provisorisch eingebaut
|
|
|
|
Erledigt:
|
|
|
|
- Deutschland wird als manueller Excel-Standort vorbereitet:
|
|
- `TSC = TRDE`
|
|
- `Land = Deutschland`
|
|
- `SourceSystem = MANUAL_EXCEL`
|
|
- neuer Standort ist standardmaessig inaktiv, damit Export-All nicht ohne Datei scheitert
|
|
- Alphaplan-Mapping wird automatisch geseedet:
|
|
- `NettoPreisGesamtX` -> `SalesPriceValue`
|
|
- `Belegnummer` -> `InvoiceNumber`
|
|
- `Position` -> `PositionOnInvoice`
|
|
- `ArtikelNummer` -> `Material`
|
|
- `ArtikelBezeichnung` -> `Name`
|
|
- `Warengruppen-Bezeichnung` -> `ProductGroup`
|
|
- `Anz. VE` -> `Quantity`
|
|
- `Name/Land Lieferant`, `Name/Land Kunde`, `Branche`, `Versandbedingung`
|
|
- `Belegdatum-Rechnung` -> `PostingDate` und `InvoiceDate`
|
|
- `DocumentType = Alphaplan Excel`
|
|
- Datei erhalten:
|
|
|
|
```text
|
|
docs/2025_DataExport_DE.xlsx
|
|
```
|
|
|
|
Bedienung:
|
|
|
|
1. App starten.
|
|
2. `Standorte` oeffnen.
|
|
3. Deutschland / `TRDE` oeffnen.
|
|
4. Alphaplan-Excel hochladen oder Pfad setzen.
|
|
5. Standort aktivieren.
|
|
6. Standortexport fuer DE ausfuehren.
|
|
7. Danach zentrale Excel erzeugen; DE ist dann in `CentralSalesRecords` und im Endexcel enthalten.
|
|
|
|
Offen fachlich:
|
|
|
|
- Komplette Summe `NettoPreisGesamtX`: `4'154'690.05 EUR`.
|
|
- Nur `Land Kunde = Deutschland`: `3'455'276.64 EUR`.
|
|
- Sollwert DE: `3'635'923.00 EUR`.
|
|
- Finance/Munir muss bestaetigen, welche Kundenlaender oder Filter zum offiziellen DE-Ist gehoeren.
|
|
|
|
## H89 - Nachtrag 2026-05-20 IIS 500 aktueller Stand
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-20 IIS 500 aktueller Stand
|
|
|
|
Vollstaendige Doku:
|
|
|
|
```text
|
|
docs/DEPLOYMENT_IIS_HANDOFF_2026-05-19.md
|
|
```
|
|
|
|
Was sicher bewiesen ist:
|
|
|
|
- `https://trch-webapp-bidashboard.trafagch.local/BiDashboard/diag.txt` ist erreichbar.
|
|
- Browser zeigt dort:
|
|
|
|
```text
|
|
BiDashboard publish folder reached 2026-05-20T08:19:14.2667783+02:00
|
|
```
|
|
|
|
- Damit stimmt IIS-URL `/BiDashboard` und der Physical Path zum Publish-Ordner.
|
|
- Der verbleibende `500` ist kein falscher Pfad und kein HTTP/HTTPS-Verwechslungsproblem.
|
|
|
|
Was umgesetzt wurde:
|
|
|
|
- Publish weiterhin aus `TrafagSalesExporter`.
|
|
- Ausgabe weiterhin `BiDashboard.dll`, keine EXE.
|
|
- `web.config` auf `hostingModel="outofprocess"` umgestellt.
|
|
- `stdoutLogEnabled="true"` bleibt aktiv.
|
|
- `ASPNETCORE_DETAILEDERRORS=true` fuer Diagnose gesetzt.
|
|
- Neu publiziert auf `\\trch-webapp-bidashboard.trafagch.local\BiDashboard$\`.
|
|
|
|
Offen fuer Server-Spezialist:
|
|
|
|
- .NET 8 Hosting Bundle / AspNetCoreModuleV2 pruefen.
|
|
- App Pool pruefen:
|
|
- `.NET CLR Version = No Managed Code`
|
|
- `Managed Pipeline Mode = Integrated`
|
|
- `Enable 32-bit Applications = False`
|
|
- Event Viewer lesen:
|
|
- `IIS AspNetCore Module V2`
|
|
- `.NET Runtime`
|
|
- `Application Error`
|
|
- App-Pool-Identity mit `Modify` auf Publish-Ordner, `logs` und `trafag_exporter.db*` bestaetigen.
|
|
|
|
Wichtig:
|
|
|
|
- Der Server braucht kein installiertes Microsoft Excel.
|
|
- XLSX wird ueber ClosedXML/OpenXML gelesen.
|
|
- CSV-Umstellung ist fuer diesen 500-Fehler nicht noetig.
|
|
|
|
## H90 - Nachtrag 2026-05-20 IT Finance-Methode
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-20 IT Finance-Methode
|
|
|
|
Erledigt:
|
|
|
|
- IT-Methode gemaess Finance-Leiter umgesetzt.
|
|
- `CustomerName` enthaelt `Trafag Italia` wird fuer IT ausgeschlossen.
|
|
- Doppelte IT-Zeilen mit leerem `Supplier country` werden nur einmal gezaehlt.
|
|
- Regel greift im Finance-Vergleich/Testprogramm und in den Finance-Spalten der zentralen Excel.
|
|
|
|
Bewusster Entscheid:
|
|
|
|
- Die alte 2025-Kombination ist naeher am Soll, aber fachlich nicht zukunftssicher.
|
|
- Fuer 2026+ gilt die neue Methode, auch wenn sie 2025 in der aktuellen DB weiter vom Sollwert abweicht.
|
|
|
|
Naechster Check:
|
|
|
|
- Nach neuem IT-Export pruefen, ob die vollstaendige `Trafag Italia`-Summe aus den neuen Rohdaten sichtbar wird.
|
|
- Zentrale Excel fuer `Finance | Country Key = IT`, `Finance | Include = TRUE` filtern und gegen Finance-Vergleich kontrollieren.
|
|
|
|
## H91 - Nachtrag 2026-05-19 IIS Deployment / 500 Fehler
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-19 IIS Deployment / 500 Fehler
|
|
|
|
Vollstaendige Doku:
|
|
|
|
```text
|
|
docs/DEPLOYMENT_IIS_HANDOFF_2026-05-19.md
|
|
```
|
|
|
|
Aktueller Stand:
|
|
|
|
- Publish erfolgt direkt aus `TrafagSalesExporter`.
|
|
- Publish-Ausgabe ist an das alte `BiDashboard` angepasst:
|
|
- `BiDashboard.dll`
|
|
- keine EXE
|
|
- `web.config` startet `.\BiDashboard.dll`
|
|
- Diagnose aktiv mit `stdoutLogEnabled=true`
|
|
- URL mit App-Pfad liefert laut Browser `500`:
|
|
|
|
```text
|
|
https://trch-webapp-bidashboard.trafagch.local/BiDashboard/
|
|
```
|
|
|
|
Wahrscheinlichstes offenes Thema:
|
|
|
|
- App-Pool/IIS hat auf dem Publish-Ordner nur Lesen/Ausfuehren.
|
|
- Die App schreibt beim Start in SQLite (`trafag_exporter.db`, `db-shm`, `db-wal`) und in `logs`.
|
|
- `icacls`-Versuch von lokal wurde vom Server mit `Zugriff verweigert` abgelehnt.
|
|
|
|
Naechster Schritt fuer Server-Spezialist:
|
|
|
|
- App-Pool-Identity ermitteln.
|
|
- `Modify` auf Publish-Ordner, `logs` und `trafag_exporter.db*` setzen.
|
|
- App-Pool neu starten.
|
|
- Danach URL neu testen und bei weiterem `500` stdout-Log/Event Viewer lesen.
|
|
|
|
## H92 - Nachtrag 2026-05-19 Finance-Cockpit-Login finalisieren
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-19 Finance-Cockpit-Login finalisieren
|
|
|
|
Aktueller Stand:
|
|
|
|
- Finance Cockpit hat einen separaten Login.
|
|
- HR-KPI-Login und Finance-Cockpit-Login sind technisch getrennte Services/Konfigurationen.
|
|
- Finance-Konfiguration liegt in `appsettings.json` unter `FinanceCockpitAccess`.
|
|
- Aktueller Benutzer: `finance`.
|
|
- Finance nutzt ein eigenes Passwort: `Trafag-Finance-Cockpit-2026!`.
|
|
- Globale AD-/Rollenpruefung ist fuer den Moment mit `Security.Enabled = false` deaktiviert.
|
|
- Die AD-Gruppen sind nicht geloescht und bleiben in `AccessGroups`/`AdminGroups` dokumentiert.
|
|
|
|
Wichtig:
|
|
|
|
- Finance- und HR-KPI-Sperren laufen weiter ueber eigene Passwortabfragen.
|
|
- AD/Rollen koennen spaeter durch `Security.Enabled = true` wieder aktiviert werden.
|
|
|
|
Noch offen:
|
|
|
|
1. Entscheiden, wann AD-/Rollenpruefung wieder aktiviert wird.
|
|
2. Bei Reaktivierung `Security.Enabled` auf `true` setzen und Gruppen pruefen.
|
|
3. Pruefen, ob direkte Run-/Export-/FinanceProbe-Endpunkte ebenfalls geschuetzt werden muessen.
|
|
4. In Browser testen:
|
|
|
|
```text
|
|
http://127.0.0.1:5099/finance-cockpit/vergleich
|
|
```
|
|
|
|
5. Nach Entsperren pruefen, dass Navigation und `Finance sperren` korrekt funktionieren.
|
|
|
|
## H93 - Nachtrag 2026-05-19 Finance-Vergleich / Formeldoku
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-19 Finance-Vergleich / Formeldoku
|
|
|
|
Erledigt:
|
|
|
|
- `/finance-cockpit/vergleich` nutzt dieselbe `FinanceReconciliationService`-Logik wie die FinanceProbe.
|
|
- Leere Ist-Zeilen werden in der Haupt-App ausgefiltert.
|
|
- Berechnungslogik pro Land wurde dokumentiert:
|
|
|
|
```text
|
|
docs/FINANCE_BERECHNUNGSFORMELN_LAENDER_2026-05-19.md
|
|
```
|
|
|
|
Naechster Check:
|
|
|
|
- Bei neuer Datenladung `/finance-cockpit/vergleich` und `/finance` gegeneinander vergleichen.
|
|
- Besonders ES, AT, UK und IT weiter fachlich klaeren.
|
|
|
|
## H94 - Nachtrag 2026-05-19 Zentrale Excel fuer Finance-Filter
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-19 Zentrale Excel fuer Finance-Filter
|
|
|
|
Erledigt:
|
|
|
|
- Die zentrale Excel `Sales_All_yyyy-MM-dd.xlsx` enthaelt im Blatt `Sales` einen Finance-Spaltenblock:
|
|
|
|
```text
|
|
Finance | Year
|
|
Finance | Country Key
|
|
Finance | Date
|
|
Finance | Net Sales Actual
|
|
Finance | Currency
|
|
Finance | Include
|
|
Finance | Source Value Field
|
|
```
|
|
|
|
- Die zentrale Excel enthaelt ein Hilfsblatt `Finance Filter Hilfe`.
|
|
- Das Hilfsblatt erklaert, wie Finance dieselben Ist-Summen wie im Testprogramm erhaelt:
|
|
|
|
```text
|
|
Finance | Year = 2025
|
|
Finance | Country Key = Land
|
|
Finance | Include = TRUE
|
|
Summe Finance | Net Sales Actual
|
|
```
|
|
|
|
Geprueft:
|
|
|
|
- Excel-Finance-Spalten wurden gegen `FinanceReconciliationService` fuer 2025 verglichen.
|
|
- AT, CH, ES, FR, IN, IT, UK und US ergaben jeweils `MATCH` mit Differenz `0.00`.
|
|
|
|
Naechster praktischer Check:
|
|
|
|
- Nach dem naechsten echten Export die SharePoint-Datei `Sales_All_yyyy-MM-dd.xlsx` oeffnen und mit Finance die Filter-/Summenlogik einmal gemeinsam durchgehen.
|
|
- Dabei darauf achten, dass nicht versehentlich alte Spalten wie `Land`, `TSC`, `Document Total LC` oder `Sales Price/Value` direkt fuer CFO-Summen verwendet werden.
|
|
|
|
## H95 - Nachtrag 2026-05-11 UK_B1 Mapping fertigstellen
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-11 UK_B1 Mapping fertigstellen
|
|
|
|
Aktueller Stand:
|
|
|
|
- UK/England bleibt auf Quelle `UK_B1`.
|
|
- Korrekte Quelle:
|
|
|
|
```text
|
|
https://trafagag.sharepoint.com/sites/WorldwideBIPlatform/Import/Finance/UK_B1
|
|
```
|
|
|
|
- Ursache der grossen UK-Abweichung:
|
|
- kein grafisches Mapping fuer `TRUK`
|
|
- `Sales Price/Value` wurde als Positionswert gelesen
|
|
- in UK_B1 ist es nach aktuellem Befund ein Stueckpreis
|
|
- korrekte Formel ist `=[Sales Price/Value]*[Quantity]`
|
|
|
|
Bereits im Worktree umgesetzt:
|
|
|
|
- `ManualExcelImportService` kann berechnete Mapping-Quellen `=[Header A]*[Header B]`.
|
|
- `DatabaseSeedService` seedet/repariert UK_B1-Pfad und `TRUK`-Mapping.
|
|
- `DatabaseSeedService` ueberspringt den UK-Mapping-Seed, solange `ManualExcelColumnMappings` noch auf eine alte SQLite-Reparaturtabelle wie `Sites_repair_old` zeigt.
|
|
- Unit-Test fuer berechnetes Manual-Excel-Mapping ist vorhanden.
|
|
- Doku wurde in `docs/FINANCE_ENTSCHEIDE.md`, `lastchange.md` und `HANDOFF_2026-04-15.md` ergaenzt.
|
|
- Tests sind gruen: `59/59`.
|
|
|
|
Verifizierter Testlauf:
|
|
|
|
```text
|
|
dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --no-restore -p:UseAppHost=false --verbosity minimal
|
|
```
|
|
|
|
Noch offen fuer den praktischen UK-Check:
|
|
|
|
1. SharePoint-/Graph-Zugriff reparieren.
|
|
- letzter Fehler bei `/run/export/TRUK`:
|
|
|
|
```text
|
|
ClientSecretCredential authentication failed
|
|
127.0.0.1:9 connection refused
|
|
```
|
|
|
|
2. UK neu exportieren:
|
|
|
|
```text
|
|
http://127.0.0.1:5099/run/export/TRUK
|
|
```
|
|
|
|
3. Finance pruefen:
|
|
|
|
```text
|
|
http://127.0.0.1:5099/finance
|
|
```
|
|
|
|
4. Ergebnis bewerten:
|
|
- wenn UK nahe `3'749'865 GBP` liegt: Mapping war Hauptursache.
|
|
- wenn UK bei ca. `3'533'349 GBP` bleibt: Restdifferenz gegen weitere UK-Netto-/Discount-/Frachtspalten pruefen.
|
|
|
|
Nicht vergessen:
|
|
|
|
- Keine harte Spezialkorrektur fuer genau 2025 einbauen.
|
|
- Die Loesung muss ueber Mapping und allgemeine Positionslogik laufen, damit andere Jahre ebenfalls korrekt funktionieren.
|
|
|
|
## H96 - Nachtrag 2026-05-08 Manual Excel/CSV SharePoint-Automatik
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-08 Manual Excel/CSV SharePoint-Automatik
|
|
|
|
Erledigt:
|
|
|
|
- SharePoint-Ordner koennen bei Manual Excel/CSV als Quelle hinterlegt werden.
|
|
- Bei Ordnern wird automatisch die neueste passende `.xlsx`/`.csv` ausgewaehlt.
|
|
- Dateinamenmuster fuer bevorzugte Auswahl: `ddMMyy_TSC.xlsx` bzw. `ddMMyy_TSC.csv`.
|
|
- Manual-Export schreibt die erzeugte Exportdatei in den Quellordner zurueck:
|
|
- lokal: gleicher lokaler Ordner
|
|
- SharePoint: gleicher SharePoint-Ordner
|
|
- England/TRUK ist lokal auf den SharePoint-Ordner `Import/Finance/UK_B1` korrigiert.
|
|
- Spanien-Fehler nach erfolgreichem Einlesen der SharePoint-CSV ist behoben.
|
|
|
|
Naechste konkrete Schritte:
|
|
|
|
1. App neu starten, damit die Seed-/Repair-Logik aktiv ist.
|
|
2. England/TRUK exportieren und pruefen, ob die App `010526_TRUK.xlsx` statt `010426_TRUK.xlsx` auswaehlt.
|
|
3. Im SharePoint-Ordner `Import/Finance/UK_B1` pruefen, ob die neue Exportdatei dort wieder abgelegt wird.
|
|
4. Deutschland/Alphaplan: im Standort den korrekten Alphaplan-Excel- oder SharePoint-Pfad hinterlegen.
|
|
5. Deutschland exportieren und Mapping gegen die Alphaplan-Datei validieren.
|
|
6. Falls UK-Dateinamen spaeter ein anderes Muster bekommen, Auswahlregel erweitern.
|
|
|
|
## H97 - Nachtrag 2026-05-08 FinanceProbe
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-08 FinanceProbe
|
|
|
|
Erledigt:
|
|
|
|
- FinanceProbe zeigt alle Finance-Referenzen 2025.
|
|
- Datenabdeckung je Standort wurde ergaenzt.
|
|
- CH/AT-Zuordnung wurde fuer `ZSCHWEIZ` geschaerft.
|
|
|
|
Naechste fachliche Schritte:
|
|
|
|
1. Nach Export von England, Schweiz/Oesterreich, Spanien und Deutschland die FinanceProbe neu laden.
|
|
2. In der Sektion `Datenabdeckung je Standort` pruefen, ob Zeilen 2025 und Periode plausibel sind.
|
|
3. Fuer Laender mit `Keine Daten` entscheiden:
|
|
- Datenquelle fehlt
|
|
- Standort deaktiviert
|
|
- Mapping/Export noch nicht gelaufen
|
|
- Referenz ist nur zukuenftig relevant
|
|
4. Fuer AT/CH nach `ZSCHWEIZ`-Export pruefen, ob `LAND1` korrekt `AT` bzw. `CH` liefert.
|
|
|
|
## H98 - Nachtrag 2026-05-11 FinanceProbe KI-Steuerung
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-11 FinanceProbe KI-Steuerung
|
|
|
|
Neue Test-Routen:
|
|
|
|
- `/run/export/{siteKey}` fuer Einzelstandortexporte
|
|
- `/run/export-all` fuer alle aktiven Standorte plus zentrale Datei
|
|
- `/run/consolidated` fuer nur zentrale Datei
|
|
|
|
Naechster sinnvoller Prueflauf:
|
|
|
|
1. FinanceProbe starten.
|
|
2. `/run/export/TRUK` fuer England testen.
|
|
3. `/run/export/Spanien` testen.
|
|
4. `/run/export/Deutschland` testen, sobald Alphaplan-Pfad korrekt ist.
|
|
5. `/run/export/ZSCHWEIZ` testen.
|
|
6. Danach `/finance` und `docs/finance_status_2025.svg` aktualisieren.
|
|
|
|
## H99 - Nachtrag 2026-05-07 nach Mapper-/Finance-Aufraeumung
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-07 nach Mapper-/Finance-Aufraeumung
|
|
|
|
Erledigt:
|
|
|
|
- SAP-OData- und HANA-Mapping laufen ueber `MappedSalesRecordComposer`.
|
|
- Doppelte SAP-Mapping-Normalisierung wurde entfernt.
|
|
- Konsolidierter Export liest eindeutig aus `CentralSalesRecords`.
|
|
- Manuelle Standortdateien duerfen `.xlsx` oder `.csv` sein.
|
|
- Finance-Sollwerte, Budgetkurse und Intercompany-Regeln sind DB-Konfiguration mit Seed.
|
|
|
|
Naechste technische Schritte:
|
|
|
|
1. App neu starten, damit Schema/Seed fuer `FinanceReferences`, `FinanceIntercompanyRules` und Budgetkurse laeuft.
|
|
2. In Settings Konfiguration exportieren und pruefen, ob Finance-Referenzen und IC-Regeln enthalten sind.
|
|
3. Fuer produktive Pflege spaeter eine kleine UI fuer `FinanceReferences` und `FinanceIntercompanyRules` bauen.
|
|
4. Manual Excel als naechsten Aufraeumpunkt vereinheitlichen: Header-Automatik und grafisches Mapping in eine gemeinsame Mapping-Engine ziehen.
|
|
5. Bestehende BI1/SAGE-Standorte mittelfristig auf grafisches HANA-Mapping migrieren; erst danach den alten B1-Spezialpfad entfernen.
|
|
|
|
## H100 - Nachtrag 2026-05-07 ZSCHWEIZ ueber SAP OData
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-07 ZSCHWEIZ ueber SAP OData
|
|
|
|
Finaler Stand fuer Schweiz/Oesterreich:
|
|
|
|
- ABAP-Report `report.abap` fuellt SAP-Tabelle `ZSCHWEIZ`.
|
|
- Buchungskreis `1100` = Schweiz, `1200` = Oesterreich.
|
|
- `LAND1` in `ZSCHWEIZ` ist Reporting-Land aus Buchungskreis.
|
|
- `CUSTOMER_LAND` ist Kundenland aus `KNA1-LAND1`.
|
|
- Die App liest `ZSCHWEIZ` ueber SAP OData, nicht ueber direkten HANA-Spezialcode.
|
|
|
|
In der App:
|
|
|
|
- Quellsystem-Code `SAP` bleibt bestehen, DisplayName jetzt `SAP OData`.
|
|
- `SAP_HANA` ist nur fuer direkte HANA-Tabellen/Views und heisst `SAP HANA Tables/Views`.
|
|
- Der grafische Mapper funktioniert fuer SAP OData und fuer HANA-Tabellen/Views.
|
|
- Vorkonfigurierter Standort:
|
|
- `TSC = ZSCHWEIZ`
|
|
- `Land = Schweiz/Oesterreich`
|
|
- `SourceSystem = SAP`
|
|
- Quelle `Z`
|
|
- EntitySet `ZSCHWEIZSet`
|
|
- Quelle und Feldmapping werden beim App-Start per Seed-/Repair-Logik nachgezogen, auch wenn der Standort bereits existiert.
|
|
|
|
Naechste Schritte:
|
|
|
|
1. App neu starten, damit die Seed-/Repair-Logik laeuft.
|
|
2. In `Settings -> Quellsysteme` pruefen, ob `SAP` als `SAP OData` angezeigt wird.
|
|
3. In `Standorte` den Standort `ZSCHWEIZ` oeffnen.
|
|
4. Falls die zentrale SAP-Service-URL noch auf `ZPOWERBI_EINKAUF_SRV` zeigt, beim Standort `SAP Service URL Override` auf den finalen OData-Service fuer `ZSCHWEIZ` setzen.
|
|
5. `Entity Sets refreshen`.
|
|
6. Quelle `Z` auf `ZSCHWEIZSet` kontrollieren.
|
|
7. `Felder aus Quellen laden`.
|
|
8. Grafisches Mapping kontrollieren; manuell mappen musst du nur, wenn Gateway-Feldnamen vom erwarteten `ZSCHWEIZ`-Layout abweichen.
|
|
9. Standort aktivieren und Export testen.
|
|
|
|
Keine manuelle Feldliste ist noetig, wenn der Gateway-Service `$metadata` korrekt liefert.
|
|
|
|
## H101 - Nachtrag 2026-05-05 Abschlussstand FinanceProbe / Spanien / Deutschland
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-05 Abschlussstand FinanceProbe / Spanien / Deutschland
|
|
|
|
Aktueller lokaler Testpunkt:
|
|
|
|
```text
|
|
http://localhost:55417/finance
|
|
```
|
|
|
|
FinanceProbe enthaelt jetzt:
|
|
|
|
- `Meeting Ampel 2025` fuer alle Laender aus `check.xlsx`
|
|
- Ampel:
|
|
- Gruen: rechnerisch passend
|
|
- Gelb: Differenz oder fachliche Abgrenzung offen
|
|
- Grau: keine belastbaren Ist-Daten
|
|
- `Detail alle Laender`
|
|
- `Spain CSV direct check`
|
|
- `Germany Excel sample check`
|
|
|
|
Spanien:
|
|
|
|
- finale v2-Datei liegt unter `sagespain/v2/Spain_Sales_2025.csv`
|
|
- Zeilen: `4'341`
|
|
- Ist `SalesPriceValue`: `3'082'320.18` EUR
|
|
- Soll aus `check.xlsx`: `3'102'333.61`
|
|
- Differenz: `-20'013.43`
|
|
- Status: Gelb / Pruefen
|
|
- Export technisch lesbar, Differenz fachlich mit Spanien/Finance klaeren
|
|
|
|
Deutschland:
|
|
|
|
- Beispielfile liegt im Projektordner:
|
|
|
|
```text
|
|
DE_Beispiel_Export_Daten.xlsx
|
|
```
|
|
|
|
- relevante Spalte: `NettoPreisGesamtX`
|
|
- Mapping-Ziel: `SalesPriceValue`
|
|
- Betragszeilen: `2`
|
|
- Summe: `8'290.70` EUR
|
|
- das ist nur ein Sample, keine finale DE-Jahreszahl
|
|
- Deutschland bleibt fuer die finale Ampel offen/grau, bis ein vollstaendiger DE-Jahresfile 2025 oder ein bestaetigter Importlauf vorliegt
|
|
|
|
Offen fuer das Finance-Meeting / danach:
|
|
|
|
1. Spanien Differenz `-20'013.43` klaeren:
|
|
- Periodendatum
|
|
- Serien `REG`, `LAT`, `PRO`, `REC`
|
|
- Gutschriften / `REC`
|
|
- offizielle Sage-Auswertung mit identischem Filter
|
|
2. Deutschland finalen Jahresfile 2025 anfordern oder Importlauf mit finaler Datei ausfuehren.
|
|
3. Fuer Laender mit Grau pruefen, ob Exportdaten fehlen oder Standort deaktiviert/ohne Datei ist.
|
|
4. Fuer CHF-Aussage beachten:
|
|
- CHF nur direkt, wenn Quelle CHF liefert
|
|
- sonst Mandanten-/Originalwaehrung und separate FX-Regel noetig
|
|
|
|
Letzte Verifikation:
|
|
|
|
```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 `HTTP 200`
|
|
|
|
## H102 - Nachtrag 2026-04-29 Dashboard-Referenzcheck
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-04-29 Dashboard-Referenzcheck
|
|
|
|
Das Dashboard enthaelt jetzt oben einen `Net Sales Actuals 2025`-Referenzcheck gegen die Zahlen aus `check.xlsx` / Power BI Stand 2026-04-29.
|
|
|
|
Technischer Stand:
|
|
|
|
- Ist-Wert wird automatisch aus dem besten Kandidaten gegen die Referenz gewaehlt:
|
|
- `SalesPriceValue`
|
|
- `DocumentTotalForeignCurrency - VatSumForeignCurrency`
|
|
- `DocumentTotalLocalCurrency - VatSumLocalCurrency`
|
|
- Belegkopfwerte werden per `TSC` + `DocumentType` + `DocumentEntry` dedupliziert; Fallback ist `InvoiceNumber`
|
|
- Jahr 2025 ueber `InvoiceDate`, fallback `ExtractionDate`
|
|
- Vergleich gegen Power-BI-Wert, falls vorhanden, sonst LC-Referenz
|
|
- Dashboard zeigt das verwendete `Summenfeld`
|
|
|
|
Noch fachlich zu pruefen:
|
|
|
|
- IT bleibt als bekannter `not ok`-Fall offen
|
|
- UK/US bleiben offen, bis die richtige Quelle bzw. Config geklaert ist
|
|
- bei weiteren Standorten erst Referenzwert und Datenquelle bestaetigen
|
|
- bestehende zentrale Altdaten enthalten fuer die neuen B1-Felder noch `0`; fuer den echten Feldvergleich ist ein neuer Export/Rebuild noetig
|
|
|
|
Konkreter Ablauf nach Neustart/PC-Absturz:
|
|
|
|
1. App starten und Dashboard oeffnen: `http://localhost:55416`
|
|
2. `Alle exportieren` ausfuehren oder betroffene Standorte einzeln exportieren.
|
|
3. Danach `Zentrale Datei neu erzeugen` ausfuehren.
|
|
4. Im oberen Dashboard-Block `Net Sales Actuals 2025 Referenz` die Spalte `Summenfeld` kontrollieren.
|
|
5. Wenn `Status = OK`, passt die Summe zur hinterlegten Referenz.
|
|
6. Wenn `Status = Pruefen`, zuerst kontrollieren:
|
|
- richtige Standortquelle/Config
|
|
- richtiges Jahr
|
|
- ob nach der Codeaenderung wirklich neu exportiert wurde
|
|
- ob das gewaehlte Summenfeld fachlich Sinn macht
|
|
|
|
Naechster technischer Schritt fuer neue Jahre:
|
|
|
|
- Jahresauswahl im Dashboard einbauen.
|
|
- Fuer Jahre ohne Referenz trotzdem Ist-Summen und verwendetes Summenfeld anzeigen.
|
|
- Sobald eine neue Referenzdatei fuer 2026/2027 vorliegt, Referenzwerte ergaenzen.
|
|
|
|
Export-all-Abbruch am 2026-04-29:
|
|
|
|
- Fehler war SQLite-Schema: `ExportLogs`, `AppEventLogs`, `CentralSalesRecords` zeigten noch auf `"Sites_repair_old"`
|
|
- Schema-Reparatur wurde erweitert und beim App-Start erfolgreich angewendet
|
|
- gepruefter Zustand danach: alle drei Tabellen referenzieren wieder `Sites`
|
|
- Export kann jetzt erneut getestet werden
|
|
- falls erneut Fehler kommt, sollte die Snackbar die Inner Exception anzeigen und die Logs sollten nicht mehr selbst den Export abbrechen
|
|
|
|
Nachtest Export all:
|
|
|
|
- HANA-Schema-Fehler fuer Frankreich/Italien/USA wurde auf HANA-Quoting zurueckgefuehrt und korrigiert
|
|
- Indien bleibt Auth-/Credential-Thema
|
|
- England, Spanien und Deutschland sind aktuell `MANUAL_EXCEL` ohne hinterlegte Datei
|
|
- Fuer einen sauberen Export-all-Lauf:
|
|
- HANA-Standorte mit korrigierter Query nochmals testen
|
|
- Indien Credentials pruefen
|
|
- manuelle Standorte entweder Datei hinterlegen oder deaktivieren, falls sie nicht im Export-all laufen sollen
|
|
|
|
## H103 - Nachtrag 2026-04-29 B1-Belegwaehrungsfelder
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-04-29 B1-Belegwaehrungsfelder
|
|
|
|
Der HANA/B1-Export zieht jetzt zusaetzliche Belegwaehrungsfelder:
|
|
|
|
- `DocEntry`
|
|
- `DocCur`
|
|
- `DocTotalFC`
|
|
- `DocTotal`
|
|
- `VatSumFC`
|
|
- `VatSum`
|
|
- `DocRate`
|
|
- `OADM.MainCurncy`
|
|
|
|
Neue Zielfelder:
|
|
|
|
- `DocumentEntry`
|
|
- `DocumentCurrency`
|
|
- `DocumentTotalForeignCurrency`
|
|
- `DocumentTotalLocalCurrency`
|
|
- `VatSumForeignCurrency`
|
|
- `VatSumLocalCurrency`
|
|
- `DocumentRate`
|
|
- `CompanyCurrency`
|
|
|
|
Zusaetzlich gilt jetzt:
|
|
|
|
- `StandardCostCurrency` kommt im HANA-Pfad aus `OADM.MainCurncy`
|
|
- `Sales_All_*.xlsx` enthaelt die neuen Spalten
|
|
- `CentralSalesRecords` enthaelt die neuen Spalten
|
|
- bestehende SQLite-DBs werden beim Start um die Spalten erweitert
|
|
- Manual-Excel-Import kann die neuen Spalten lesen
|
|
|
|
## H104 - Wichtig fuer Auswertungen
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
### Wichtig fuer Auswertungen
|
|
|
|
Die neuen `DocumentTotal*`- und `VatSum*`-Werte sind Belegkopfwerte und werden in der positionsbasierten Datei pro Position wiederholt.
|
|
|
|
Power BI:
|
|
|
|
- nicht positionsweise summieren
|
|
- zuerst nach Beleg deduplizieren, bevorzugt `TSC` + `DocumentType` + `DocumentEntry`
|
|
- danach Belegkopfwerte summieren
|
|
|
|
Positionswerte wie `Sales Price/Value`, `Quantity` und `Standard cost` bleiben fuer positionsbasierte Summen geeignet.
|
|
|
|
## H105 - Verifikation
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
### Verifikation
|
|
|
|
Geprueft:
|
|
|
|
```text
|
|
dotnet build .\TrafagSalesExporter.csproj --verbosity minimal
|
|
dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --verbosity minimal
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- Build erfolgreich
|
|
- Tests erfolgreich
|
|
- `48/48` Tests gruen
|
|
|
|
## H106 - Nachtrag 2026-04-29 Clean-Code-/DI-Befund
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-04-29 Clean-Code-/DI-Befund
|
|
|
|
Aktueller Architektur- und DI-Zustand nach den letzten Umbauten:
|
|
|
|
Gesamturteil:
|
|
|
|
- die App ist deutlich besser strukturiert als zu Beginn
|
|
- die Grundarchitektur ist brauchbar bis gut und fuer pragmatischen produktiven Einsatz geeignet
|
|
- Dependency Injection wird grundsaetzlich sinnvoll genutzt
|
|
- Clean Code ist mittel bis gut, aber noch nicht durchgehend konsequent
|
|
|
|
Was positiv ist:
|
|
|
|
- Kernservices laufen weitgehend ueber Interfaces und DI
|
|
- `DataSourceAdapter`-Pattern trennt `HANA`, `SAP_GATEWAY` und `MANUAL_EXCEL`
|
|
- `SiteExportService` ist dadurch deutlich schlanker als frueher
|
|
- UI-nahe Page-Services wurden eingefuehrt
|
|
- viele Razor-Seiten sind nicht mehr direkt `DbContext`-lastig
|
|
- `Scoped` fuer Page-Services und `Singleton` fuer gemeinsame Infrastruktur/Orchestrierung ist bewusst gewaehlt
|
|
- Tests decken wichtige Fachlogik ab, u. a. Transformationen, ConfigTransfer, DatabaseInitialization und ManagementCockpit
|
|
|
|
Was noch nicht ideal ist:
|
|
|
|
- `DatabaseInitializationService` bleibt ein produktiver Reparatur-/Migrationsblock und ist kein sauberes versioniertes Migrationssystem
|
|
- `Settings.razor` und `Standorte.razor` enthalten weiterhin relativ viel UI-/Workflow-Logik
|
|
- `ManagementCockpitService`, `ConfigTransferService` und Teile der Initialisierung sind noch sehr breit
|
|
- konsolidierter Export hat historisch noch Semantikreste zwischen Live-Snapshot und `CentralSalesRecords`
|
|
- Secrets/Zugangsdaten sind noch nicht ideal geloest
|
|
- zentraler Retry-/Resilience-Layer fuer SAP/HANA/SharePoint fehlt
|
|
- Auth ist jetzt pragmatisch mit User/Admin geschnitten, aber noch nicht fein nach `Viewer`, `Exporter`, `Admin`, `Finance`
|
|
|
|
Sinnvolle spaetere Clean-Code-Schritte:
|
|
|
|
1. `ManagementCockpitService` in kleinere Query-, Aggregation- und Currency-Komponenten teilen
|
|
2. `Settings.razor` und `Standorte.razor` weiter Richtung Page-/Application-Services entlasten
|
|
3. `DatabaseInitializationService` langfristig durch versionierte Migrationen ersetzen
|
|
4. Auth-Policies fachlich feiner schneiden, z. B. `Viewer`, `Exporter`, `Admin`, `Finance`
|
|
5. Retry/Timeout/Failure-Handling fuer externe Systeme zentralisieren
|
|
6. Secret-Store-Konzept umsetzen
|
|
|
|
## H107 - Nachtrag 2026-04-29 Authentifizierung / AD
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-04-29 Authentifizierung / AD
|
|
|
|
Die App wurde nach IT-Rueckmeldung gegen anonymen Zugriff abgesichert.
|
|
|
|
Neuer Stand:
|
|
|
|
- globale Authentifizierungspflicht
|
|
- produktiv vorgesehen: Windows Authentication / Active Directory
|
|
- Zugriff und Adminrechte ueber AD-Gruppen
|
|
- kein eigener App-Login
|
|
- kein versteckter produktiver Backdoor
|
|
- lokaler Development-Bypass nur bei `ASPNETCORE_ENVIRONMENT=Development`
|
|
|
|
Neue/angepasste Dateien:
|
|
|
|
- `Program.cs`
|
|
- `Security/SecurityOptions.cs`
|
|
- `Security/SecurityPolicies.cs`
|
|
- `Security/DevelopmentAuthenticationHandler.cs`
|
|
- `Components/Routes.razor`
|
|
- `Components/_Imports.razor`
|
|
- `Components/Layout/NavMenu.razor`
|
|
- `Components/Layout/MainLayout.razor`
|
|
- `Components/Pages/Settings.razor`
|
|
- `Components/Pages/Standorte.razor`
|
|
- `Components/Pages/Transformations.razor`
|
|
- `appsettings.json`
|
|
- `appsettings.Development.json`
|
|
|
|
Aktuelle Default-Gruppen:
|
|
|
|
- `TRAFAG\TrafagSalesExporter-Users`
|
|
- `TRAFAG\TrafagSalesExporter-Admins`
|
|
|
|
## H108 - Noch mit IT zu klaeren
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
### Noch mit IT zu klaeren
|
|
|
|
1. Exakte AD-Domain-/Gruppennamen bestaetigen
|
|
2. AD-Gruppen anlegen oder bestehende Gruppen verwenden
|
|
3. IIS-Zielumgebung festlegen
|
|
4. Auf IIS Windows Authentication aktivieren
|
|
5. Auf IIS Anonymous Authentication deaktivieren
|
|
6. Sicherstellen, dass produktiv nicht `ASPNETCORE_ENVIRONMENT=Development` gesetzt ist
|
|
7. Test mit einem normalen User und einem Admin-User durchfuehren
|
|
|
|
## H109 - Fachliche Rollenentscheidung
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
### Fachliche Rollenentscheidung
|
|
|
|
Aktuell:
|
|
|
|
- Admin:
|
|
- `Settings`
|
|
- `Standorte`
|
|
- `Transformations`
|
|
- berechtigter User:
|
|
- Dashboard
|
|
- Management Cockpit
|
|
- Logs
|
|
|
|
Noch zu entscheiden:
|
|
|
|
- ob `Logs` ebenfalls Admin-only sein soll
|
|
- ob Export-Buttons im Dashboard nur fuer eine eigene Rolle `Exporter` sichtbar sein sollen
|
|
- ob Management Cockpit fuer alle berechtigten User oder nur fuer Management/Finance-Gruppen sichtbar sein soll
|
|
|
|
## H110 - Verifikation
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
### Verifikation
|
|
|
|
Geprueft:
|
|
|
|
```text
|
|
dotnet build .\TrafagSalesExporter.csproj --verbosity minimal
|
|
dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --verbosity minimal
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- Build erfolgreich
|
|
- Tests erfolgreich
|
|
- `48/48` Tests gruen
|
|
- Auth-Policy-Tests fuer AccessGroup, AdminGroup und Development-Admin vorhanden
|
|
- lokaler Development-Auth-Start geprueft: `http://localhost:55416` antwortet mit HTTP `200`
|
|
|
|
## H111 - Nachtrag 2026-04-29 Management Cockpit
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-04-29 Management Cockpit
|
|
|
|
Seit dem 2026-04-17 wurden im `Management Cockpit` weitere Auswertmoeglichkeiten umgesetzt und nachtraeglich aus dem aktuellen Code rekonstruiert.
|
|
|
|
Aktueller neuer Stand:
|
|
|
|
- Summenfeld ist waehbar statt fest auf Umsatz:
|
|
- `Sales Price/Value`
|
|
- `Quantity`
|
|
- `Standard cost`
|
|
- `Quantity * Standard cost`
|
|
- Anzeige-Waehrung ist waehbar:
|
|
- `EUR`
|
|
- `USD`
|
|
- `Original`
|
|
- betragliche Werte werden ueber `CurrencyExchangeRateService` umgerechnet
|
|
- nicht-betragliche Werte wie `Quantity` bleiben ohne Waehrung
|
|
- fehlende Wechselkurse werden gezaehlt und in der UI/Hinweisen sichtbar
|
|
- zentrale Roh-Auswertung kann weitere Summenfelder als Zusatzspalten in Jahres-, Monats- und Tageswerten anzeigen
|
|
- dateibasierte Excel-Analyse nutzt ebenfalls Summenfeld und Anzeige-Waehrung
|
|
|
|
Betroffene Dateien:
|
|
|
|
- `Components/Pages/ManagementCockpit.razor`
|
|
- `Models/ManagementCockpitModels.cs`
|
|
- `Services/IManagementCockpitService.cs`
|
|
- `Services/ManagementCockpitPageService.cs`
|
|
- `Services/ManagementCockpitService.cs`
|
|
- `TrafagSalesExporter.Tests/ManagementCockpitServiceTests.cs`
|
|
|
|
Neue Tests:
|
|
|
|
- Umrechnung zentraler Werte in EUR
|
|
- Wechselkurs-Cache pro Waehrung/Ziel/Datum
|
|
- Mengen-Auswertung ohne Waehrungsumrechnung
|
|
- Zusatzwerte in Zeitreihen
|
|
|
|
## H112 - Jetzt sinnvoll zu pruefen
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
### Jetzt sinnvoll zu pruefen
|
|
|
|
1. `dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --verbosity minimal`
|
|
2. Management Cockpit in der App oeffnen
|
|
3. zentrale Auswertung mit `Sales Price/Value` in `EUR` pruefen
|
|
4. zentrale Auswertung mit `Quantity` pruefen und bestaetigen, dass keine Waehrung angezeigt wird
|
|
5. Zusatzfelder `Quantity` und `Quantity * Standard cost` in Jahres-/Monatswerten pruefen
|
|
6. Dateianalyse einer exportierten Excel mit unterschiedlichen Summenfeldern pruefen
|
|
7. fachlich klaeren, ob `CHF` neben `EUR` und `USD` als Anzeige-Waehrung angeboten werden soll
|
|
8. fachlich klaeren, ob fehlende Wechselkurse als `0` in Zielwaehrung korrekt sind oder separat ausgewiesen werden sollen
|
|
|
|
## H113 - Nachtrag 2026-04-17 Refactoring-Fortschritt
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-04-17 Refactoring-Fortschritt
|
|
|
|
Mehrere frueher als hoch priorisiert markierte Architekturpunkte sind inzwischen bereits umgesetzt.
|
|
|
|
Erledigt:
|
|
|
|
- DataSourceAdapter-Pattern fuer `HANA`, `SAP_GATEWAY`, `MANUAL_EXCEL`
|
|
- `SiteExportService` deutlich verschlankt
|
|
- Page-Services auf `Scoped`
|
|
- `DatabaseInitializationService` in Schema-/Seed-/Orchestrator-Bloecke getrennt
|
|
- `Dashboard`, `Logs` und `Transformations` von direktem `DbContext`-Zugriff befreit
|
|
- HANA-SQL-Injection-Pfad geschlossen
|
|
- blockierende `.GetAwaiter().GetResult()`-Aufrufe im HANA-Pfad entfernt
|
|
|
|
Neuer verifizierter Stand:
|
|
|
|
- `dotnet build .\TrafagSalesExporter.csproj --verbosity minimal` erfolgreich
|
|
- `dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --verbosity minimal`
|
|
- `36/36` Tests gruen
|
|
|
|
## H114 - Neue Top-Prioritaeten ab jetzt
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
### Neue Top-Prioritaeten ab jetzt
|
|
|
|
## H115 - 1. Adapter- und Resolver-Tests nachziehen
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
#### 1. Adapter- und Resolver-Tests nachziehen
|
|
|
|
Prio hoch.
|
|
|
|
Warum:
|
|
|
|
- das neue `DataSourceAdapter`-Pattern ist architektonisch wichtig
|
|
- genau dieser neue Schnitt hat aktuell noch keine gezielten Unit-Tests
|
|
|
|
Sinnvoll waeren:
|
|
|
|
- `DataSourceAdapterResolver`-Tests
|
|
- `HanaDataSourceAdapter`-Tests
|
|
- `SapGatewayDataSourceAdapter`-Tests
|
|
- `ManualExcelDataSourceAdapter`-Tests
|
|
|
|
## H116 - 2. Retry-/Robustheitslayer
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
#### 2. Retry-/Robustheitslayer
|
|
|
|
Prio hoch.
|
|
|
|
Vor allem fuer:
|
|
|
|
- SharePoint
|
|
- SAP Gateway
|
|
- HANA-nahe Netzpfade
|
|
|
|
Aktuell brechen diese Integrationen bei transienten Problemen zu direkt ab.
|
|
|
|
## H117 - 3. Secret-Store-Konzept
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
#### 3. Secret-Store-Konzept
|
|
|
|
Prio hoch bis mittel.
|
|
|
|
Aktuell liegen Zugangsdaten weiterhin in der App-/DB-Konfiguration.
|
|
Langfristig sollte entschieden werden:
|
|
|
|
- Windows Credential Manager
|
|
- DPAPI / verschluesselte Ablage
|
|
- externer Secret Store
|
|
|
|
## H118 - 4. `DatabaseInitializationService` weiter haerten, aber nicht mehr blind gross refactoren
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
#### 4. `DatabaseInitializationService` weiter haerten, aber nicht mehr blind gross refactoren
|
|
|
|
Prio mittel.
|
|
|
|
Der schlimmste Architekturteil ist deutlich besser als vorher.
|
|
Weitere Arbeit dort sollte jetzt nur noch zielgerichtet passieren:
|
|
|
|
- Regressionstests fuer konkrete Legacy-/Repair-Zustaende
|
|
- spaeter moeglichst versionierte Migrationen
|
|
|
|
## H119 - 5. MudBlazor-Analyzer-Warnungen bereinigen
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
#### 5. MudBlazor-Analyzer-Warnungen bereinigen
|
|
|
|
Prio mittel.
|
|
|
|
Nicht kritisch fuer Produktion, aber sinnvoll fuer sauberen Build:
|
|
|
|
- `Logs.razor`
|
|
- `Transformations.razor`
|
|
- `Standorte.razor`
|
|
|
|
## H120 - Was im Vergleich zu frueher nicht mehr Top-Prioritaet ist
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
### Was im Vergleich zu frueher nicht mehr Top-Prioritaet ist
|
|
|
|
Nicht mehr ganz oben:
|
|
|
|
- generisches weiteres Page-Service-Refactoring um des Refactorings willen
|
|
- noch mehr strukturelles Verschieben ohne Risikoreduktion
|
|
|
|
Der wirtschaftlich sinnvolle Fokus liegt jetzt eher auf:
|
|
|
|
- Absicherung
|
|
- Robustheit
|
|
- Integrationsstabilitaet
|
|
|
|
## H121 - Nachtrag 2026-04-17
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-04-17
|
|
|
|
Der Punkt `CHF-Umrechnung / Wechselkurse` ist nicht mehr komplett offen.
|
|
|
|
Der aktuelle Ist-Stand ist:
|
|
|
|
- `CurrencyExchangeRateService` ist implementiert
|
|
- `ExchangeRateImportService` importiert ECB-Kurse
|
|
- `NormalizeCurrencyCode` und `ConvertCurrency` sind im Transformationssystem registriert
|
|
- fehlende Unit-Tests dafuer wurden am 2026-04-17 ergaenzt
|
|
|
|
Neuer Teststand:
|
|
|
|
- `dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --verbosity minimal`
|
|
- erfolgreich
|
|
- `31/31` Tests gruen
|
|
|
|
Was fuer Waehrungen trotzdem noch offen bleibt:
|
|
|
|
- fachlicher Einsatz der `ConvertCurrency`-Regeln in echten Standortkonfigurationen pruefen
|
|
- UI-Flow fuer Wechselkurspflege in `Settings.razor` manuell gegenpruefen
|
|
- ECB-Import einmal real ueber die UI bzw. App-Funktion pruefen
|
|
- bestaetigen, fuer welche Sichten CHF die Zielwaehrung sein soll
|
|
- Management-Cockpit-Rohsicht nur dann auf CHF umstellen, wenn fachlich gewuenscht
|
|
|
|
## H122 - Architektur-Nachtrag 2026-04-17
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Architektur-Nachtrag 2026-04-17
|
|
|
|
Nach einer separaten Architekturpruefung wurden die naechsten Schritte neu priorisiert.
|
|
|
|
Wichtig:
|
|
|
|
- neue Fachfeatures sind aktuell **nicht** der erste Engpass
|
|
- zuerst muessen die Architektur-Risiken in Initialisierung, Config-Import und UI-Service-Schnitt bereinigt werden
|
|
|
|
## H123 - Neue Top-Prioritaeten
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
### Neue Top-Prioritaeten
|
|
|
|
## H124 - 1. `DatabaseInitializationService` absichern
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
#### 1. `DatabaseInitializationService` absichern
|
|
|
|
Prio sehr hoch.
|
|
|
|
Gruende:
|
|
|
|
- Startlogik enthaelt manuelle Schema-Migrationen
|
|
- FK-Reparaturen laufen produktiv beim App-Start
|
|
- dort wurde ein konkretes Risiko fuer verschobene Spaltenwerte beim `Sites_old`-Kopierpfad erkannt
|
|
|
|
Vor weiterer Fachentwicklung:
|
|
|
|
- Initialisierungspfad genau pruefen
|
|
- SQL-Kopierlogik validieren
|
|
- moeglichst Richtung versionierte Migrationen bewegen
|
|
|
|
## H125 - 2. `ConfigTransferService.ImportJsonAsync` neu denken
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
#### 2. `ConfigTransferService.ImportJsonAsync` neu denken
|
|
|
|
Prio sehr hoch.
|
|
|
|
Aktuelles Problem:
|
|
|
|
- Import loescht sehr viel und baut danach stueckweise neu auf
|
|
- nicht atomar
|
|
- potenziell teilzerstoerter Zustand bei Fehlern
|
|
- `CentralSalesRecords` werden mitimportiert/mitgeloescht, obwohl sie eher Laufzeitdaten als Konfiguration sind
|
|
|
|
Ziel:
|
|
|
|
- atomarer Import
|
|
- saubere Trennung zwischen Konfiguration und Betriebsdaten
|
|
|
|
## H126 - 3. Razor-Seiten entlasten
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
#### 3. Razor-Seiten entlasten
|
|
|
|
Prio hoch.
|
|
|
|
Betroffen vor allem:
|
|
|
|
- `Components/Pages/Settings.razor`
|
|
- `Components/Pages/Standorte.razor`
|
|
|
|
Ziel:
|
|
|
|
- DB- und Fachlogik aus UI-Code in Services / Application-Layer verschieben
|
|
- Seiten nur noch fuer Interaktion und Formularzustand
|
|
|
|
## H127 - 4. Konsolidierten Export semantisch klaeren
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
#### 4. Konsolidierten Export semantisch klaeren
|
|
|
|
Prio mittel.
|
|
|
|
Offene Frage:
|
|
|
|
- zentrale Datei aus laufendem Snapshot
|
|
oder
|
|
- zentrale Datei immer aus `CentralSalesRecords`
|
|
|
|
Aktuell ist die Verantwortung unscharf.
|
|
|
|
## H128 - 5. Reporting verallgemeinern
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
#### 5. Reporting verallgemeinern
|
|
|
|
Prio mittel.
|
|
|
|
Erst nach den Infrastrukturthemen:
|
|
|
|
- hartcodierte Jahreslogik im Cockpit entfernen
|
|
- fachlich entscheiden, ob und wo CHF-Rohsicht gebraucht wird
|
|
|
|
## H129 - Praktische Reihenfolge fuer den naechsten Wiedereinstieg
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
### Praktische Reihenfolge fuer den naechsten Wiedereinstieg
|
|
|
|
Wenn nach erneutem Absturz oder Kontextverlust weitergemacht wird:
|
|
|
|
1. `HANDOFF_2026-04-15.md` lesen, speziell die Architekturpruefung vom 2026-04-17
|
|
2. `DatabaseInitializationService` als ersten Risikoblock ansehen
|
|
3. `ConfigTransferService.ImportJsonAsync` als zweiten Risikoblock ansehen
|
|
4. erst danach wieder an Cockpit / CHF / weitere Fachfeatures gehen
|
|
|
|
## H130 - Nachtrag HANA-/Standort-Workflow 2026-04-17
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag HANA-/Standort-Workflow 2026-04-17
|
|
|
|
Der doppelte HANA-Workflow wurde inzwischen bereits bereinigt.
|
|
|
|
Neuer Stand:
|
|
|
|
- oben zentrale HANA-Konfiguration pro Quellsystem `BI1` / `SAGE`
|
|
- unten im Standort keine eigene wirksame Voll-HANA-Konfiguration mehr
|
|
- HANA-basierte Standorte ziehen ihre technische Verbindung aus der zentralen Quellsystem-Konfiguration
|
|
- Standort bleibt fuer fachliche Daten und optionale Credential-Overrides zustaendig
|
|
- die frueher doppelte HANA-UI im Standortdialog ist inzwischen auch sichtbar entfernt
|
|
- der Verbindungstest in `Settings.razor` prueft und meldet jetzt die zentrale HANA-Verbindung klar
|
|
|
|
## H131 - Was dazu noch praktisch geprueft werden sollte
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
### Was dazu noch praktisch geprueft werden sollte
|
|
|
|
- `Standorte`-Seite im UI manuell durchklicken
|
|
- pruefen, ob `BI1`- und `SAGE`-Standort beim Speichern sauber auf die zentrale HANA-Konfiguration zeigen
|
|
- pruefen, ob Aenderung oben bei zentraler HANA-Konfiguration in nachfolgenden Exporten wirklich greift
|
|
|
|
## H132 - Anschlussarbeiten
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
### Anschlussarbeiten
|
|
|
|
- `ConfigTransferService` spaeter auf das neue zentrale HANA-Modell fachlich nachziehen und kritisch pruefen
|
|
- `DatabaseInitializationService` weiter konsolidieren, damit die Zuordnung alter HANA-Daten langfristig robuster wird
|
|
|
|
## H133 - Nachtrag Quellsystem-Verwaltung 2026-04-17
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag Quellsystem-Verwaltung 2026-04-17
|
|
|
|
Die bisher hart codierten Quellsystem-Listen wurden ersetzt.
|
|
|
|
Neuer Stand:
|
|
|
|
- `SourceSystemDefinition` ist jetzt die zentrale Stammdatenquelle fuer Quellsysteme
|
|
- `Settings.razor` hat jetzt eine GUI zur Pflege von Quellsystemen
|
|
- `Standorte.razor` zieht seine Quellsystem-Auswahl aus diesen Stammdaten
|
|
- `Transformations.razor` zieht die Systemauswahl ebenfalls aus diesen Stammdaten
|
|
- zentrale Credentials haengen jetzt am Quellsystem selbst
|
|
- HANA-Zentralverbindungen werden nur noch fuer Quellsysteme mit Anschlussart `HANA` gezeigt
|
|
- alte zentrale Credential-Felder in `ExportSettings` sind aus dem aktiven Codepfad entfernt
|
|
- `ExportSettings` wird beim Start auch schematisch auf das neue Feldset bereinigt
|
|
- HANA speichert zentral keine eigenen Credentials mehr; dort bleiben nur technische Verbindungsdaten
|
|
- `HanaServer.Username` / `Password` sind nur noch Laufzeitfelder und nicht mehr im EF-Schema gemappt
|
|
- SAP Service URL wird jetzt zentral im Quellsystem gepflegt; der Standort haelt nur noch ein optionales Override
|
|
- Quellsysteme werden jetzt per Dialog bearbeitet statt nur ueber Inline-Tabellenfelder
|
|
|
|
## H134 - Was dazu noch praktisch geprueft werden sollte
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
### Was dazu noch praktisch geprueft werden sollte
|
|
|
|
- in `Settings` ein neues Quellsystem per GUI anlegen
|
|
- pruefen, ob es danach in `Standorte` und `Transformations` sofort auswählbar ist
|
|
- pruefen, ob deaktivierte Quellsysteme in neuen Standort-/Regelanlagen nicht mehr normal angeboten werden
|
|
- pruefen, ob Aenderung der Anschlussart von `HANA` auf `SAP_GATEWAY` oder `MANUAL_EXCEL` fachlich sauber wirkt
|
|
- pruefen, ob bestehende BI1/SAGE/SAP-Daten nach Startmigration korrekt in `SourceSystemDefinitions` stehen
|
|
- pruefen, ob Konfiguration-Export/Import ohne die alten Credential-Felder sauber mit `SourceSystemDefinitions` arbeitet
|
|
- pruefen, ob zentrale SAP Service URL ohne Override sauber fuer Refresh, Export und Dashboard greift
|
|
- pruefen, ob SAP Service URL Override am Standort die zentrale URL erwartungsgemaess uebersteuert
|
|
|
|
## H135 - Nachtrag 2026-04-16
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-04-16
|
|
|
|
Seit dem letzten Stand kamen mehrere groessere Erweiterungen dazu. Die offenen Punkte unten muessen deshalb im neuen Kontext gelesen werden.
|
|
|
|
## H136 - 0. Neuer Ist-Stand
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## 0. Neuer Ist-Stand
|
|
|
|
Zusaetzlich zum alten Stand ist jetzt vorhanden:
|
|
|
|
- manueller Standort-Import ueber `MANUAL_EXCEL`
|
|
- Dashboard mit `Alle exportieren`, `Zentrale Datei neu erzeugen` und zentralem `Excel oeffnen`
|
|
- Roh-Auswertung im `Management Cockpit` direkt aus `CentralSalesRecords`
|
|
- erweitertes Transformationssystem mit `Value`- und `Record`-Regeln
|
|
- HANA-Schema-Lookup im Standortdialog
|
|
- Testprojekt mit aktuell 18 gruenden Tests
|
|
|
|
## H137 - 1. Status
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## 1. Status
|
|
|
|
Der Export geht jetzt wieder durch.
|
|
|
|
Die zuletzt gefundene Hauptursache war nicht mehr ein reiner SQLite-Lock beim Batch-Insert, sondern ein kaputter FK-Schemazustand in der bestehenden DB:
|
|
|
|
- SQLite referenzierte in mindestens einer Tabelle noch `main.Sites_old`
|
|
- dadurch scheiterte `SaveChangesAsync()` beim Schreiben z. B. in `AppEventLogs` oder `ExportLogs`
|
|
- sichtbarer Effekt: Export blieb nach `Zentrale Tabelle: ... Datensaetze gespeichert.` haengen
|
|
|
|
## H138 - 2. Umgesetzter Fix
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## 2. Umgesetzter Fix
|
|
|
|
Umgesetzt wurde:
|
|
|
|
- Dashboard-Live-Status liest waehrend laufendem Export nicht mehr staendig aus `AppEventLogs`, sondern nutzt den In-Memory-Status des `ExportOrchestrationService`
|
|
- SQLite `Default Timeout` in `Program.cs` auf `60` erhoeht
|
|
- `CentralSalesRecordService` setzt nach den Batches explizit `Zentrale Tabelle aktualisiert`
|
|
- `DatabaseInitializationService` repariert beim App-Start automatisch Tabellen, deren FK-SQL noch `Sites_old` referenziert
|
|
|
|
Betroffene Dateien:
|
|
|
|
- `Program.cs`
|
|
- `Components/Pages/Dashboard.razor`
|
|
- `Services/CentralSalesRecordService.cs`
|
|
- `Services/DatabaseInitializationService.cs`
|
|
|
|
## H139 - 3. Was noch getestet werden sollte
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## 3. Was noch getestet werden sollte
|
|
|
|
Kurz gegenpruefen:
|
|
|
|
- Export eines Standorts erneut
|
|
- `Excel oeffnen` nach erfolgreichem Export
|
|
- `Export erfolgreich` inkl. `Pfad=...`
|
|
- Dashboard-Live-Status setzt sich nach Abschluss sauber zurueck
|
|
- `Alle exportieren`
|
|
- `Zentrale Datei neu erzeugen`
|
|
- zentrale Datei im Dashboard oeffnen
|
|
|
|
## H140 - 3a. Manuellen Excel-Import pruefen
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## 3a. Manuellen Excel-Import pruefen
|
|
|
|
Zu testen:
|
|
|
|
- Standort auf `MANUAL_EXCEL` stellen
|
|
- Excel im Standort hochladen
|
|
- Standort exportieren
|
|
- pruefen, ob `CentralSalesRecords` fuer diesen Standort ersetzt wurden
|
|
- pruefen, ob der zentrale Export den Standort korrekt enthaelt
|
|
|
|
Dateien:
|
|
|
|
- `Components/Pages/Standorte.razor`
|
|
- `Services/ManualExcelImportService.cs`
|
|
- `Services/SiteExportService.cs`
|
|
|
|
## H141 - 3b. HANA-Schema-Lookup pruefen
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## 3b. HANA-Schema-Lookup pruefen
|
|
|
|
Zu testen:
|
|
|
|
- bei `BI1`-Standort `Schemas laden`
|
|
- bei `SAGE`-Standort `Schemas laden`
|
|
- wird ein plausibles B1-Schema angeboten?
|
|
- funktioniert danach Export ohne manuelle Schema-Eingabe?
|
|
- zeigt England / Spezialstandort jetzt schneller, wenn Schema oder Rechte nicht passen?
|
|
|
|
Dateien:
|
|
|
|
- `Components/Pages/Standorte.razor`
|
|
- `Services/HanaQueryService.cs`
|
|
|
|
## H142 - 4. Falls wieder ein Fehler auftritt
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## 4. Falls wieder ein Fehler auftritt
|
|
|
|
In dieser Reihenfolge pruefen:
|
|
|
|
1. Exakte Fehlermeldung aus `AppEventLogs` bzw. Console notieren
|
|
2. Pruefen, ob die Reparaturlogik beim Start gelaufen ist
|
|
3. Pruefen, ob noch weitere Tabellen mit veralteter FK-Referenz existieren
|
|
4. Erst danach wieder am Batch-/Commit-Pfad der zentralen Speicherung arbeiten
|
|
|
|
## H143 - 5. SAP-Funktionalitaet kurz gegenpruefen
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## 5. SAP-Funktionalitaet kurz gegenpruefen
|
|
|
|
Zu testen:
|
|
|
|
- `Quellen refreshen`
|
|
- `Felder aus Quellen laden`
|
|
- `Auto-Match`
|
|
- SAP-Export eines Standorts
|
|
|
|
Dateien:
|
|
|
|
- `Components/Pages/Standorte.razor`
|
|
- `Services/SapGatewayService.cs`
|
|
- `Services/SapCompositionService.cs`
|
|
|
|
## H144 - 6. Management Cockpit pruefen
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## 6. Management Cockpit pruefen
|
|
|
|
Zu testen:
|
|
|
|
- vorhandene Excel-Datei auswaehlbar
|
|
- Analyse laeuft
|
|
- Kennzahlen plausibel
|
|
- Roh-Auswertung aus `CentralSalesRecords` laeuft
|
|
- Jahr/Monat-Filter funktionieren
|
|
- Summen nach Quelle / Land plausibel
|
|
|
|
Dateien:
|
|
|
|
- `Components/Pages/ManagementCockpit.razor`
|
|
- `Services/ManagementCockpitService.cs`
|
|
|
|
## H145 - 6a. Fachlich bewusst noch offen
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## 6a. Fachlich bewusst noch offen
|
|
|
|
Noch nicht final umsetzen ohne Rueckmeldung Fachseite:
|
|
|
|
- Intercompany-Filter
|
|
- fachliche Nutzung der CHF-Umrechnung in Cockpit / Reports
|
|
- Budgetvergleich
|
|
- Gruppenlogik
|
|
- Spartenlogik
|
|
- Margenlogik
|
|
|
|
Diese Punkte sollen spaeter moeglichst dynamisch auf dem neuen Transformations-/Mapping-Ansatz aufsetzen, aber aktuell nicht hart geraten werden.
|
|
|
|
## H146 - 6b. Naechste sinnvolle Testkandidaten
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## 6b. Naechste sinnvolle Testkandidaten
|
|
|
|
Wenn weiter in Tests investiert wird, sind die naechsten Kandidaten:
|
|
|
|
- `ExportOrchestrationService`
|
|
- spaeter End-to-End-Tests fuer den Wechselkurs-/Transformationspfad
|
|
- spaeter evtl. SQLite-nahe Integrationstests fuer `DatabaseInitializationService`
|
|
|
|
Aktueller Teststatus:
|
|
|
|
- `dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --verbosity minimal`
|
|
- erfolgreich
|
|
- `31/31` Tests gruen
|
|
|
|
## H147 - 7. Referenzdatei
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## 7. Referenzdatei
|
|
|
|
Fuer den vollstaendigen Kontext zuerst lesen:
|
|
|
|
- `HANDOFF_2026-04-15.md`
|
|
|
|
## H148 - 8. Letzte bereinigte UI-Irritation
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## 8. Letzte bereinigte UI-Irritation
|
|
|
|
Stand 2026-04-17:
|
|
|
|
- In `Standorte` wurde die obere Box auf `Zentrale HANA-Technik` geklaert.
|
|
- Dort gibt es keinen `Server hinzufuegen`-Pfad mehr.
|
|
- Grund: zentrale HANA-Eintraege werden aus `Quellsystemen` mit Anschlussart `HANA` abgeleitet.
|
|
- `SAP` gehoert fachlich nicht in diese Box, sondern in `Settings -> Quellsysteme`.
|
|
|
|
Wichtig fuer den naechsten Wiedereinstieg:
|
|
|
|
- Wenn ein Benutzer fragt `wo ist SAP?`, ist die richtige Antwort: nicht in der HANA-Box, sondern in der zentralen Quellsystem-Verwaltung.
|
|
- Wenn ein HANA-System oben fehlt, zuerst `Settings -> Quellsysteme` pruefen und dort Anschlussart `HANA` setzen.
|
|
|
|
## H149 - 9. Config-Transfer erneut geprueft
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## 9. Config-Transfer erneut geprueft
|
|
|
|
Stand 2026-04-17:
|
|
|
|
- Der aktuelle Config-Import/-Export passt zum neuen Datenmodell.
|
|
- Zentral verwaltete Quellsysteme, SAP-Zentral-URL, HANA-Technik ohne HANA-Credentials und Standort-Overrides werden korrekt im Transferformat abgebildet.
|
|
- Die vorhandenen `ConfigTransferServiceTests` bestaetigen den aktuellen Rundlauf.
|
|
|
|
Fuer den naechsten Wiedereinstieg wichtig:
|
|
|
|
- Das aktuelle Format ist fuer heutige Exporte konsistent.
|
|
- `ImportJsonAsync` ist aber weiterhin nicht atomar und loescht zuerst produktive Konfiguration.
|
|
- Zusaetzlich gibt es ein Altformat-Risiko:
|
|
- aeltere JSONs mit `SourceSystemDefinitions`, aber ohne `ConnectionKind`, koennen wegen DTO-Default falsch als `HANA` interpretiert werden.
|
|
|
|
Naechste saubere Haertung fuer dieses Thema:
|
|
|
|
- Config-Import transaktional machen
|
|
- Legacy-Fallback fuer fehlendes `ConnectionKind` einbauen
|
|
|
|
## H150 - 10. Nachtrag 2026-05-20: Finance-Regeln statt harte Laenderlogik
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## 10. Nachtrag 2026-05-20: Finance-Regeln statt harte Laenderlogik
|
|
|
|
Aktueller Stand:
|
|
|
|
- Es gibt jetzt `Admin -> Finance Regeln`.
|
|
- Die fachliche Abgrenzung fuer Finance wird dort als Regel gepflegt:
|
|
- Land/Scope
|
|
- Jahr
|
|
- Regeltyp
|
|
- Feld
|
|
- Vergleich
|
|
- Wert
|
|
- Notiz
|
|
- Sortierung/Aktiv
|
|
- Diese Regeln wirken auf:
|
|
- zentrales Excel (`Finance | ...` und `Finance Summary`)
|
|
- Soll/Ist Vergleich
|
|
- Sie veraendern nicht:
|
|
- Rohdatenimport
|
|
- Mapping in `Admin -> Standorte`
|
|
- technische Transformationen in `Admin -> Transformationen`
|
|
|
|
UI-Logik fuer Keyuser:
|
|
|
|
```text
|
|
Admin -> Standorte = Quelle und Spaltenmapping
|
|
Admin -> Transformationen = technische Feldnormalisierung/-berechnung
|
|
Admin -> Finance Regeln = CFO-/Finance-Abgrenzung
|
|
```
|
|
|
|
Wichtige Default-Regeln:
|
|
|
|
- DE:
|
|
- Alphaplan-Jahresfile -> Finance-Jahr 2025
|
|
- Trafag AG ausschliessen
|
|
- Magnetic Sense ausschliessen
|
|
- GS2510095 ausschliessen
|
|
- GS-Gutschriften negativ
|
|
- IT:
|
|
- Trafag Italia ausschliessen
|
|
- doppelte Blank-Supplier-Country-Zeilen deduplizieren
|
|
|
|
Nach jedem Regelwechsel testen:
|
|
|
|
1. passenden Standort exportieren
|
|
2. zentrale Datei neu erzeugen
|
|
3. im Endexcel `Finance Summary` kontrollieren
|
|
4. `Soll/Ist Vergleich` kontrollieren
|
|
|
|
Letzter DE-Pruefstand:
|
|
|
|
```text
|
|
DE 2025 im zentralen Excel: 3'652'394.46
|
|
```
|
|
|
|
## H151 - 11. Nachtrag 2026-05-20: Export Dashboard Datenbasis
|
|
|
|
Quelle: NEXT_STEPS_2026-04-15.md.raw
|
|
|
|
## 11. Nachtrag 2026-05-20: Export Dashboard Datenbasis
|
|
|
|
Im Export Dashboard steht direkt nach `Land` die Spalte `Basis`.
|
|
|
|
Angezeigt wird:
|
|
|
|
- `Excel-Datei` mit Tabellen-Icon
|
|
- `CSV-Datei` mit Datei-Icon
|
|
- `SAP Service` mit Cloud-Sync-Icon
|
|
- `Server` mit Storage-Icon
|
|
- `Manuelle Datei`, falls manuelle Quelle ohne erkennbaren Pfad
|
|
|
|
Die Spalte kommt aus `DashboardPageService.ResolveDataBasis`.
|
|
|
|
## H152 - TrafagSalesExporter Handoff
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
# TrafagSalesExporter Handoff
|
|
|
|
Stand: 2026-05-20
|
|
|
|
## H153 - Aktueller Handoff-Zusatz 2026-05-20
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Aktueller Handoff-Zusatz 2026-05-20
|
|
|
|
Seit den aelteren Handoff-Eintraegen wurden folgende Punkte umgesetzt und dokumentiert:
|
|
|
|
- `Management Analyse` hat einen fuehrenden Reiter `Finance Summary`.
|
|
- Finance Summary nutzt dieselbe `FinanceRuleEngine` wie das zentrale Excel-Blatt `Finance Summary`.
|
|
- Filter fuer Jahr, Land und Waehrung wirken auf das Finance-Endergebnis.
|
|
- DE 2026 wirft keinen Fehler mehr, sondern zeigt wegen DE/Alphaplan-2025-Zwang einen leeren Zustand mit Hinweis.
|
|
- HR KPI Cockpit wurde erweitert:
|
|
- Anleitung-Reiter
|
|
- Datenordner anpassbar
|
|
- Dateifrische / Datenstatus
|
|
- Ampeln
|
|
- Periodenvergleich
|
|
- Datenqualitaet
|
|
- Austritte nach Typ/Organisation
|
|
- Absenzen nach Organisation / Top-Absenzen
|
|
- Managementsicht
|
|
- Drucken/PDF
|
|
- Anwenderdokus:
|
|
- `docs/HR_KPI_ANLEITUNG_HR_2026-05-20.docx`
|
|
- `docs/FINANCE_COCKPIT_ANLEITUNG_FINANZ_2026-05-20.docx`
|
|
- Markdown-Dokumentenstatus:
|
|
- `docs/MD_DOKUMENTENSTATUS_2026-05-20.md`
|
|
|
|
Validierung:
|
|
|
|
- `dotnet test TrafagSalesExporter.sln --verbosity minimal`
|
|
- Ergebnis am 2026-05-20: `77/77` Tests gruen.
|
|
|
|
Hinweis:
|
|
|
|
- Aeltere Abschnitte in diesem Handoff bleiben als Historie erhalten. Fuer aktuellen Status immer zuerst diesen Zusatz, `NEXT_STEPS_2026-04-15.md`, `lastchange.md` und `docs/MD_DOKUMENTENSTATUS_2026-05-20.md` lesen.
|
|
|
|
## H154 - Nachtrag 2026-05-11 UK_B1 Mapping / aktueller Arbeitsstand
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-11 UK_B1 Mapping / aktueller Arbeitsstand
|
|
|
|
Letzter Benutzerwunsch:
|
|
|
|
- UK/England soll weiter ueber `UK_B1` laufen.
|
|
- Das Mapping soll so angepasst werden, dass die Finance-Zahl plausibel wird.
|
|
- Danach soll alles nachvollziehbar dokumentiert sein.
|
|
|
|
Wichtiger Befund:
|
|
|
|
- FinanceProbe zeigte fuer UK/England:
|
|
- `TSC = TRUK`
|
|
- `1'881` Zeilen
|
|
- Ist `395'605.82 GBP`
|
|
- Soll `3'749'865.00 GBP`
|
|
- In der lokalen DB waren fuer `TRUK` keine `ManualExcelColumnMappings` vorhanden.
|
|
- Der Fallback-Importer hat `Sales Price/Value` direkt als Positionswert importiert.
|
|
- Im UK-B1-Export ist `Sales Price/Value` aber ein Stueckpreis.
|
|
- Korrekte Positionslogik:
|
|
|
|
```text
|
|
SalesPriceValue = [Sales Price/Value] * [Quantity]
|
|
```
|
|
|
|
Probe auf existierenden Zentraldaten:
|
|
|
|
```text
|
|
Summe SalesPriceValue bisher: 395'605.82 GBP
|
|
Summe SalesPriceValue * Quantity: 3'533'348.89 GBP
|
|
check.xlsx Soll: 3'749'865.00 GBP
|
|
Restdifferenz: -216'516.11 GBP
|
|
```
|
|
|
|
Geaenderte Dateien im aktuellen Worktree:
|
|
|
|
- `Services/ManualExcelImportService.cs`
|
|
- grafische Manual-Excel-Mappings koennen einfache Multiplikationsausdruecke lesen:
|
|
|
|
```text
|
|
=[Header A]*[Header B]
|
|
```
|
|
|
|
- Konstanten wie `=GBP` funktionieren weiterhin.
|
|
|
|
- `Services/DatabaseSeedService.cs`
|
|
- repariert England/TRUK auf:
|
|
|
|
```text
|
|
https://trafagag.sharepoint.com/sites/WorldwideBIPlatform/Import/Finance/UK_B1
|
|
```
|
|
|
|
- seedet fuer `TRUK` ein grafisches Mapping, insbesondere:
|
|
|
|
```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 berechnetes Manual-Excel-Mapping.
|
|
|
|
Aktueller Teststand:
|
|
|
|
- `dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --no-restore -p:UseAppHost=false --verbosity minimal`
|
|
- Tests erfolgreich: `59/59`.
|
|
- Bekannte Warnungen: bestehende MudBlazor-Analyzerwarnungen zu `Dense`.
|
|
|
|
Zusatzfix:
|
|
|
|
- `DatabaseSeedService` prueft vor `EnsureUkManualExcelMapping(...)`, ob `ManualExcelColumnMappings` sauber auf `Sites` referenziert.
|
|
- Falls die Tabelle noch auf `Sites_repair_old` oder eine andere `Sites_*`-Reparaturtabelle zeigt, wird der UK-Mapping-Seed fuer diesen Start uebersprungen.
|
|
- Dadurch kann die Schema-Reparatur sauber durchlaufen.
|
|
|
|
Naechster praktischer Schritt:
|
|
|
|
1. SharePoint-/Graph-Zugriff reparieren.
|
|
2. FinanceProbe ist bereits auf `http://127.0.0.1:5099` gestartet.
|
|
3. `/run/export/TRUK` erneut ausfuehren.
|
|
4. `/finance` erneut pruefen.
|
|
|
|
Praktischer Stand:
|
|
|
|
- Lokale DB ist aktualisiert:
|
|
- `TRUK` Pfad = `UK_B1`
|
|
- `18` aktive Manual-Excel-Mapping-Zeilen
|
|
- `/finance` antwortet mit HTTP `200`.
|
|
- `/run/export/TRUK` scheitert aktuell an Auth/Netzwerk:
|
|
|
|
```text
|
|
ClientSecretCredential authentication failed
|
|
127.0.0.1:9 connection refused
|
|
```
|
|
|
|
- Deshalb enthaelt `CentralSalesRecords` fuer UK noch den alten Importstand, bis SharePoint wieder erreichbar ist.
|
|
|
|
Wichtig:
|
|
|
|
- Das ist keine Sonderlogik, die UK-Zahlen schoenrechnet.
|
|
- Der Mapper setzt die allgemeine fachliche Regel "pro Artikel / Belegposition" um.
|
|
- Die Formel ist im grafischen Mapping sichtbar und nicht hart als UK-Spezialberechnung im Importcode versteckt.
|
|
- Falls nach neuem Export noch eine Restdifferenz bleibt, muss die UK-Datei auf weitere Netto-/Discount-/Frachtspalten geprueft werden.
|
|
|
|
## H155 - Nachtrag 2026-05-08 Manual Excel/CSV / SharePoint-Ordner
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-08 Manual Excel/CSV / SharePoint-Ordner
|
|
|
|
Aktueller Stand fuer manuelle Quellen:
|
|
|
|
- `MANUAL_EXCEL` ist fachlich Manual Excel/CSV.
|
|
- Unterstuetzt werden `.xlsx` und `.csv`; altes `.xls` ist nicht der Zielpfad.
|
|
- Lokale Datei als Quelle:
|
|
- App liest die Datei.
|
|
- App erzeugt eine neue Exportdatei im selben lokalen Ordner.
|
|
- SharePoint-Datei als Quelle:
|
|
- App laedt die Datei temporaer herunter.
|
|
- App erzeugt eine neue Exportdatei und laedt sie in denselben SharePoint-Ordner hoch.
|
|
- SharePoint-Ordner als Quelle:
|
|
- App waehlt automatisch die neueste passende `.xlsx`/`.csv` fuer den Standort.
|
|
- Primaeres Muster: `ddMMyy_TSC.xlsx` oder `ddMMyy_TSC.csv`.
|
|
- Fallback: SharePoint `LastModifiedDateTime`.
|
|
|
|
England / UK:
|
|
|
|
- Standort `England`, `TSC = TRUK`, `SourceSystem = MANUAL_EXCEL`.
|
|
- Quelle ist ein SharePoint-Ordner:
|
|
|
|
```text
|
|
https://trafagag.sharepoint.com/sites/WorldwideBIPlatform/Import/Finance/UK_B1
|
|
```
|
|
|
|
- Beispielauswahl:
|
|
- `010526_TRUK.xlsx` ist neuer als `010426_TRUK.xlsx`.
|
|
- Exportdateien werden wieder in `Import/Finance/UK_B1` geschrieben.
|
|
- Befund am 2026-05-08: England zeigte lokal faelschlich auf die Deutschland-Alphaplan-Datei; lokale DB wurde korrigiert.
|
|
- `DatabaseSeedService` repariert kuenftig einen leeren England/TRUK-Manual-Pfad auf den UK_B1-Ordner.
|
|
|
|
Spanien / Sage:
|
|
|
|
- Spanien nutzt `MANUAL_EXCEL` als technischen Importpfad fuer den Sage-Export.
|
|
- Die Datei `Spain_Sales_2025.csv` konnte gelesen werden (`4'341` Zeilen).
|
|
- Fehler war danach der Exportpfad: die SharePoint-URL wurde als lokaler Dateipfad interpretiert.
|
|
- Fix: SharePoint-Manual-Quellen liefern keinen `ReferenceFilePath` mehr, sondern erzeugen eine neue Exportdatei im Quellordner.
|
|
|
|
Deutschland / Alphaplan:
|
|
|
|
- Deutschland nutzt `MANUAL_EXCEL` als technischen Importpfad fuer Alphaplan-Excel.
|
|
- Grafisches Mapping ist vorhanden.
|
|
- Offener Punkt: konkreter Alphaplan-Datei-/SharePoint-Pfad muss im Standort hinterlegt sein, sonst kommt `Standort 'Deutschland' hat keine manuelle Excel-Datei.`
|
|
|
|
Verifikation:
|
|
|
|
- Tests `55/55` erfolgreich.
|
|
|
|
## H156 - Nachtrag 2026-05-08 FinanceProbe fuer mehr Laender
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-08 FinanceProbe fuer mehr Laender
|
|
|
|
FinanceProbe wurde erweitert:
|
|
|
|
- `FinanceReferences` werden vollstaendig angezeigt, nicht nur bei aktivem Standort oder vorhandenen Ist-Daten.
|
|
- Dadurch sind alle Soll-Laender aus der Finance-Konfiguration im Meeting sichtbar.
|
|
- Neue Sektion `Datenabdeckung je Standort` zeigt je Standort:
|
|
- Quelle/System
|
|
- Manual-/SharePoint-Pfad
|
|
- Aktivstatus
|
|
- Anzahl 2025-Zeilen in `CentralSalesRecords`
|
|
- Summe `SalesPriceValue`
|
|
- Waehrungen und Datumsbereich
|
|
- letzter Exportstatus/Fehler
|
|
- CH/AT-Erkennung im Finance-Service wurde geschaerft, damit `ZSCHWEIZ`-Zeilen mit Land `AT` Oesterreich zugeordnet werden koennen.
|
|
|
|
Wichtig:
|
|
|
|
- `Keine Daten` bedeutet jetzt nicht zwingend fehlende Referenz, sondern oft: Referenz ist vorhanden, aber Ist-Daten wurden noch nicht exportiert/importiert.
|
|
- Fuer neue Laender reicht es, `FinanceReferences` zu pflegen und Daten nach `CentralSalesRecords` zu bringen; die Probe zeigt sie dann automatisch.
|
|
|
|
## H157 - Nachtrag 2026-05-11 FinanceProbe KI-Steuerung
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-11 FinanceProbe KI-Steuerung
|
|
|
|
FinanceProbe kann jetzt nicht nur vergleichen, sondern im Testkontext auch Exporte ausloesen:
|
|
|
|
- `/run/export/{siteKey}`: einzelner Standort nach `Id`, `TSC` oder `Land`
|
|
- `/run/export-all`: alle aktiven Standorte plus zentrale Datei
|
|
- `/run/consolidated`: zentrale Datei aus `CentralSalesRecords`
|
|
|
|
Die Routen liefern eine HTML-Run-Summary mit Exportlogs, Finance-Abgleich und Datenabdeckung.
|
|
|
|
Wichtig:
|
|
|
|
- Das ist eine temporaere Test-/KI-Steuerung.
|
|
- Nicht als produktive API betrachten.
|
|
- Echte SAP/HANA/SharePoint-Zugriffe funktionieren nur mit vorhandenen Credentials und Netzverbindung auf dem Rechner.
|
|
|
|
## H158 - Nachtrag 2026-05-07 Mapper-Konsolidierung / Finance-Konfiguration
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-07 Mapper-Konsolidierung / Finance-Konfiguration
|
|
|
|
Architekturstand:
|
|
|
|
- `MappedSalesRecordComposer` ist die gemeinsame Engine fuer grafisches Mapping.
|
|
- SAP OData und generisches HANA-Mapping nutzen denselben Composer fuer Joins und Zielfeldmapping.
|
|
- SAP OData laedt weiter ueber `SapGatewayService`.
|
|
- HANA-Tabellen/Views laden weiter ueber `HanaQueryService`.
|
|
- Der alte B1-HANA-Pfad ohne Mapping bleibt als Legacy-Pfad fuer bestehende BI1/SAGE-Standorte erhalten.
|
|
- `ConsolidatedExportService.ExportAsync()` erzeugt die zentrale Datei nur noch aus `CentralSalesRecords`; es gibt keinen zweiten Records-Parameter mehr.
|
|
- Manual Excel/CSV akzeptiert im Standort-Editor und Upload `.xlsx` und `.csv`.
|
|
|
|
Neue Konfigurationstabellen:
|
|
|
|
- `FinanceReferences`: Soll-/check.xlsx-Referenzen je Jahr und Land/Key.
|
|
- `FinanceIntercompanyRules`: IC-/2nd-party-Regeln nach Scope, Kundennummer oder Namensbestandteil.
|
|
- Budgetkurse 2025 liegen als `CurrencyExchangeRates` mit `Notes = Budget 2025`.
|
|
- Config-Export/-Import nimmt `FinanceReferences` und `FinanceIntercompanyRules` mit.
|
|
|
|
Offen:
|
|
|
|
- Manual-Excel-Import hat noch zwei Modi: Header-Automatik und grafisches Mapping.
|
|
- Der alte B1-HANA-Spezialpfad ist bewusst noch vorhanden, sollte aber mittelfristig durch gepflegte HANA-Mappings abgeloest werden.
|
|
|
|
Verifikation:
|
|
|
|
- Hauptprojekt Build erfolgreich.
|
|
- Tests `52/52` erfolgreich.
|
|
|
|
## H159 - Nachtrag 2026-05-07 SAP OData / ZSCHWEIZ / Schweiz-Oesterreich
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-07 SAP OData / ZSCHWEIZ / Schweiz-Oesterreich
|
|
|
|
Aktueller Architekturentscheid:
|
|
|
|
- `ZSCHWEIZ` wird ueber SAP OData/Gateway gelesen.
|
|
- Direkter HANA-Spezialcode fuer `ZSCHWEIZ` wurde vermieden.
|
|
- Der grafische Quellen- und Feldmapper wird fuer SAP OData verwendet.
|
|
- Fuer direkte HANA-Tabellen/Views gibt es ebenfalls grafisches Mapping; das ist aber nicht der geplante Pfad fuer `ZSCHWEIZ`.
|
|
|
|
Quellsysteme:
|
|
|
|
- `SAP` = `SAP OData`, Anschlussart `SAP_GATEWAY`.
|
|
- `SAP_HANA` = `SAP HANA Tables/Views`, Anschlussart `HANA`.
|
|
- `BI1` und `SAGE` bleiben HANA-basierte Quellsysteme.
|
|
- `MANUAL_EXCEL` bleibt Excel/CSV.
|
|
|
|
ABAP/SAP:
|
|
|
|
- Datei `report.abap` enthaelt Report `ZTRAFAG_SCHWEIZ_EXPORT`.
|
|
- Ziel-Tabelle in SAP: `ZSCHWEIZ`.
|
|
- `BUKRS 1100` wird als Schweiz (`TRCH`, `CH`) geschrieben.
|
|
- `BUKRS 1200` wird als Oesterreich (`TRAT`, `AT`) geschrieben.
|
|
- `CUSTOMER_LAND` enthaelt das urspruengliche Kundenland.
|
|
- Der Report schreibt paketweise per Upsert.
|
|
|
|
App-Seed:
|
|
|
|
- Standort `ZSCHWEIZ` / `Schweiz/Oesterreich` wird inaktiv angelegt bzw. repariert.
|
|
- `SourceSystem = SAP`.
|
|
- Quelle `Z`, EntitySet `ZSCHWEIZSet`.
|
|
- Quelle und Feldmapping werden beim App-Start per Upsert nachgezogen; eine teilweise vorhandene ZSCHWEIZ-Konfiguration bleibt dadurch nicht leer.
|
|
- Initiales Mapping:
|
|
- `Tsc <- Z.TSC`
|
|
- `Land <- Z.LAND1`
|
|
- `InvoiceNumber <- Z.VBELN`
|
|
- `PositionOnInvoice <- Z.POSNR`
|
|
- `SalesPriceValue <- Z.NETWR_HC`
|
|
- `SalesCurrency <- Z.HWAER`
|
|
- `CustomerCountry <- Z.CUSTOMER_LAND`
|
|
|
|
Wichtig fuer naechsten Einstieg:
|
|
|
|
- Wenn die zentrale SAP-Service-URL noch auf `ZPOWERBI_EINKAUF_SRV` zeigt, muss beim Standort `ZSCHWEIZ` ein Service-URL-Override fuer den `ZSCHWEIZ`-OData-Service gesetzt werden.
|
|
- Feldinfos kommen ueber `$metadata`; manuelle Feldliste ist nur noetig, wenn Gateway/Metadata nicht funktioniert.
|
|
- Nach URL-Setzung: `Entity Sets refreshen`, `Felder aus Quellen laden`, Mapping kontrollieren, Standort aktivieren, Export testen.
|
|
|
|
Verifikation:
|
|
|
|
- Hauptprojekt Build erfolgreich.
|
|
- Tests `52/52` erfolgreich.
|
|
|
|
## H160 - Nachtrag 2026-05-05 Aktueller Handoff FinanceProbe / Laenderabgleich
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-05-05 Aktueller Handoff FinanceProbe / Laenderabgleich
|
|
|
|
Der aktuelle Arbeitsstand fuer den naechsten Einstieg ist der lokale FinanceProbe:
|
|
|
|
```text
|
|
http://localhost:55417/finance
|
|
```
|
|
|
|
Der FinanceProbe wurde als Meeting-Ansicht erweitert:
|
|
|
|
- `Meeting Ampel 2025`
|
|
- `Detail alle Laender`
|
|
- `Germany Excel sample check`
|
|
- `Spain CSV direct check`
|
|
|
|
Ampel-Bedeutung:
|
|
|
|
- Gruen: Ist/Soll passt rechnerisch gegen Referenz.
|
|
- Gelb: technische Daten vorhanden, aber Differenz oder fachliche Abgrenzung offen.
|
|
- Grau: keine belastbaren Ist-Daten im aktuellen Import.
|
|
|
|
Wichtige Waehrungsregel fuer Management-Aussage:
|
|
|
|
- Wenn die Quelle CHF liefert, kann CHF direkt als CHF gezeigt werden.
|
|
- Wenn die Quelle EUR/USD/GBP/INR usw. liefert, ist es Mandanten- bzw. Originalwaehrung.
|
|
- CHF-Ausweis braucht dann eine separate FX-Regel oder einen offiziell bestaetigten Kurs.
|
|
|
|
## H161 - Spanien
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Spanien
|
|
|
|
Vorhandene finale Kandidatendatei:
|
|
|
|
```text
|
|
sagespain/v2/Spain_Sales_2025.csv
|
|
```
|
|
|
|
FinanceProbe liest diese Datei direkt.
|
|
|
|
Aktueller Stand:
|
|
|
|
- Zeilen: `4'341`
|
|
- Ist `SalesPriceValue`: `3'082'320.18` EUR
|
|
- Soll aus `check.xlsx`: `3'102'333.61`
|
|
- Differenz: `-20'013.43`
|
|
- Status: Gelb / Pruefen
|
|
|
|
Technisch:
|
|
|
|
- `ManualExcelImportService` kann jetzt semikolongetrennte CSV-Dateien lesen.
|
|
- Spanien-v2-CSV kann damit als `MANUAL_EXCEL` importiert werden.
|
|
- In der Detailtabelle wird Spanien nicht mehr als `Keine Daten` gezeigt, sondern als `Pruefen` mit dem v2-CSV-Wert.
|
|
|
|
Offen fachlich:
|
|
|
|
- Periodenlogik: `FechaFactura` vs. andere Datumsfelder
|
|
- Serien: `REG`, `LAT`, `PRO`, `REC`
|
|
- Behandlung von Gutschriften / `REC`
|
|
- offizielle Sage-Auswertung mit identischem Filter zur Sollzahl
|
|
|
|
## H162 - Deutschland
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Deutschland
|
|
|
|
Vorhandenes Beispielfile:
|
|
|
|
```text
|
|
DE_Beispiel_Export_Daten.xlsx
|
|
```
|
|
|
|
Wichtig:
|
|
|
|
- Das File ist ein Beispielfile, keine finale DE-Jahresdatei.
|
|
- Es darf nicht als finale Ist-Zahl gegen die Jahresreferenz verwendet werden.
|
|
|
|
Technischer Check:
|
|
|
|
- relevante Spalte: `NettoPreisGesamtX`
|
|
- Mapping-Ziel: `SalesPriceValue`
|
|
- Betragszeilen: `2`
|
|
- Summe: `8'290.70` EUR
|
|
- Waehrung: `EUR`
|
|
|
|
Interpretation:
|
|
|
|
- Deutschland-Format ist technisch verstanden.
|
|
- Mapping funktioniert.
|
|
- Finale DE-Zahl fehlt noch.
|
|
- Fuer Abschluss/Meeting wird ein vollstaendiger DE-Jahresfile 2025 oder ein bestaetigter Importlauf benoetigt.
|
|
|
|
## H163 - Geaenderte wichtige Dateien
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Geaenderte wichtige Dateien
|
|
|
|
- `Tools/FinanceProbe/Program.cs`
|
|
- Management-Ampel
|
|
- Spanien-v2-CSV-Direktcheck
|
|
- Deutschland-Beispielfile-Check
|
|
- `Services/ManualExcelImportService.cs`
|
|
- CSV-Support fuer manuelle Quellen
|
|
- `Services/DatabaseSeedService.cs`
|
|
- deaktivierter Spanien-Standort als Seed/Fallback
|
|
- `TrafagSalesExporter.Tests/ManualExcelImportServiceTests.cs`
|
|
- Tests fuer CSV/Mapping
|
|
- `SAGE_SPAIN_EXPORT_2026-05-05.md`
|
|
- Spanien-Doku
|
|
- `lastchange.md`
|
|
- chronologischer Abschlussstand
|
|
|
|
## H164 - Letzte Verifikation
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Letzte Verifikation
|
|
|
|
```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
|
|
- FinanceProbe liefert `HTTP 200`
|
|
|
|
## H165 - Nachtrag 2026-04-29 Dashboard-Referenzcheck Net Sales 2025
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-04-29 Dashboard-Referenzcheck Net Sales 2025
|
|
|
|
Das Dashboard zeigt jetzt oberhalb der Exportaktionen einen Referenzcheck fuer `Net Sales Actuals 2025`.
|
|
|
|
Zweck:
|
|
|
|
- schnelle Gegenpruefung, ob die gezogenen Werte gegen `check.xlsx` / Power-BI-Referenz plausibel sind
|
|
- automatische Ermittlung des Summenfelds, das am besten zum Referenzwert passt
|
|
- sichtbar machen, ob aktuell `SalesPriceValue`, `DocTotalFC - VatSumFC` oder `DocTotal - VatSum` als Vergleichsbasis genutzt wird
|
|
- `DocumentTotal*` wird nur dedupliziert pro Beleg verwendet, weil es ein Belegkopfwert ist und in der positionsbasierten Datei pro Position wiederholt wird
|
|
|
|
Logik:
|
|
|
|
- Ist-Wert = bester Kandidat aus:
|
|
- Summe `CentralSalesRecords.SalesPriceValue`
|
|
- Summe `DocumentTotalForeignCurrency - VatSumForeignCurrency`
|
|
- Summe `DocumentTotalLocalCurrency - VatSumLocalCurrency`
|
|
- Belegkopfwerte werden vor dem Summieren per `TSC` + `DocumentType` + `DocumentEntry` dedupliziert; falls `DocumentEntry` fehlt, per `InvoiceNumber`
|
|
- Jahr = `InvoiceDate`, falls vorhanden, sonst `ExtractionDate`
|
|
- Vergleichsjahr = `2025`
|
|
- Referenzwerte sind aus `check.xlsx` / Power BI Stand 2026-04-29 im Code hinterlegt
|
|
- wenn ein Power-BI-Referenzwert vorhanden ist, wird dieser als Vergleich verwendet
|
|
- sonst wird der LC-Referenzwert verwendet
|
|
|
|
Angezeigt werden:
|
|
|
|
- Firma
|
|
- Ist 2025
|
|
- Referenz
|
|
- Summenfeld
|
|
- Referenzquelle (`Power BI` oder `LC`)
|
|
- Differenz
|
|
- Waehrungen
|
|
- Zeilen
|
|
- Status `OK`, `Pruefen` oder `Keine Daten`
|
|
|
|
Verifikation:
|
|
|
|
- `dotnet build .\TrafagSalesExporter.csproj --verbosity minimal` erfolgreich
|
|
- `dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --verbosity minimal` erfolgreich
|
|
- lokaler Dashboard-Start geprueft: `http://localhost:55416` antwortet mit HTTP `200`
|
|
|
|
Naechster Bedienablauf, damit die korrekten Summen kommen:
|
|
|
|
1. App starten bzw. offen lassen: `http://localhost:55416`
|
|
2. Im Dashboard neue Daten ziehen:
|
|
- entweder `Alle exportieren`
|
|
- oder einzelne Standorte per `Export`
|
|
3. Danach `Zentrale Datei neu erzeugen` ausfuehren.
|
|
4. Oben im Dashboard den Block `Net Sales Actuals 2025 Referenz` pruefen.
|
|
5. Entscheidend ist die Spalte `Summenfeld`:
|
|
- `Sales Price/Value` = Positionssumme
|
|
- `DocTotalFC - VatSumFC` = Netto-Belegsumme in Belegwaehrung, dedupliziert pro Beleg
|
|
- `DocTotal - VatSum` = Netto-Belegsumme in Hauswaehrung, dedupliziert pro Beleg
|
|
6. `Status = OK` bedeutet: Abweichung zur Referenz maximal 1.
|
|
7. `Status = Pruefen` bedeutet: Feld, Datenquelle, Zeitraum oder Standortkonfiguration fachlich kontrollieren.
|
|
|
|
Wichtig:
|
|
|
|
- Mit alten zentralen Daten bleiben die neuen B1-Felder leer bzw. `0`.
|
|
- Fuer die echte Pruefung von `DocEntry`, `DocTotal*`, `VatSum*`, `DocRate` und `OADM.MainCurncy` muss zuerst neu exportiert werden.
|
|
- Fuer neue Jahre ist aktuell noch kein dynamischer Referenzjahres-Schalter eingebaut; der harte Referenzcheck ist Stand jetzt auf `2025`, weil `check.xlsx` die 2025-Referenzen enthaelt.
|
|
|
|
## H166 - Nachtrag 2026-04-29 Export-all-Abbruch / SQLite-FK-Reparatur
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-04-29 Export-all-Abbruch / SQLite-FK-Reparatur
|
|
|
|
Beim Klick auf `Export all` kam:
|
|
|
|
- `An error occurred while saving the entity changes. See the inner exception for details.`
|
|
|
|
Ursache:
|
|
|
|
- die bestehende SQLite-DB hatte in `ExportLogs`, `AppEventLogs` und `CentralSalesRecords` noch Foreign Keys auf `"Sites_repair_old"`
|
|
- diese Reparatur-Zwischentabelle existiert nicht mehr
|
|
- beim Speichern neuer Logs oder zentraler Datensaetze konnte SQLite deshalb nicht mehr korrekt speichern
|
|
|
|
Korrektur:
|
|
|
|
- `DatabaseSchemaMaintenanceService` erkennt jetzt nicht nur `Sites_old`, sondern auch alte Reparaturtabellen wie `Sites_repair_old`
|
|
- betroffene Tabellen werden beim App-Start automatisch neu aufgebaut
|
|
- `AppEventLogService` und `ExportLogService` fangen eigene Log-Speicherfehler ab, damit Logging-Probleme nicht den ganzen Export abbrechen
|
|
- Dashboard-Fehlerausgaben zeigen jetzt auch die Inner Exception, falls vorhanden
|
|
|
|
Verifikation:
|
|
|
|
- App neu gestartet
|
|
- DB-Schema direkt geprueft:
|
|
- `AppEventLogs` -> `FOREIGN KEY (SiteId) REFERENCES Sites (Id)`
|
|
- `ExportLogs` -> `FOREIGN KEY (SiteId) REFERENCES Sites (Id)`
|
|
- `CentralSalesRecords` -> `FOREIGN KEY (SiteId) REFERENCES Sites (Id)`
|
|
- `dotnet build .\TrafagSalesExporter.csproj --verbosity minimal` erfolgreich
|
|
- `dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --verbosity minimal` erfolgreich
|
|
|
|
Direkt danach beobachtete Exportfehler:
|
|
|
|
- Frankreich/Italien/USA: `invalid schema name ... line 40` durch HANA-Query-Quoting
|
|
- Ursache: Query nutzte `"schema"."Tabelle"`
|
|
- Korrektur: wieder `schema."Tabelle"` wie im alten funktionierenden Stand
|
|
- Indien: `authentication failed`
|
|
- Konfiguration/Credentials pruefen, kein Codefehler aus dieser Aenderung
|
|
- England/Spanien/Deutschland: `MANUAL_EXCEL`, aber keine manuelle Excel-Datei hinterlegt
|
|
- entweder Datei hinterlegen oder Standort deaktivieren/Quellsystem korrigieren
|
|
|
|
## H167 - Nachtrag 2026-04-29 B1-Belegwaehrungsfelder aus HANA
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-04-29 B1-Belegwaehrungsfelder aus HANA
|
|
|
|
Der HANA/B1-Export wurde um Beleg- und Hauswaehrungsfelder erweitert.
|
|
|
|
Grund:
|
|
|
|
- `p.StockPrice` muss fachlich in der B1-Hauswaehrung bewertet werden
|
|
- die Hauswaehrung kommt aus `OADM.MainCurncy`
|
|
- bisher wurde `StandardCostCurrency` aus `p.Currency` bzw. `h.DocCur` abgeleitet
|
|
- fuer Power-BI-/Cockpit-Gegenpruefung muessen Belegwaehrung, Hauswaehrung, Netto-/Steuerbetraege und Kurs sichtbar sein
|
|
|
|
Neue Felder in `SalesRecord` und `CentralSalesRecord`:
|
|
|
|
- `DocumentEntry`
|
|
- `DocumentCurrency`
|
|
- `DocumentTotalForeignCurrency`
|
|
- `DocumentTotalLocalCurrency`
|
|
- `VatSumForeignCurrency`
|
|
- `VatSumLocalCurrency`
|
|
- `DocumentRate`
|
|
- `CompanyCurrency`
|
|
|
|
B1-Feldmapping:
|
|
|
|
- `DocumentEntry` = `OINV/ORIN.DocEntry`
|
|
- `DocumentCurrency` = `OINV/ORIN.DocCur`
|
|
- `DocumentTotalForeignCurrency` = `OINV/ORIN.DocTotalFC`
|
|
- `DocumentTotalLocalCurrency` = `OINV/ORIN.DocTotal`
|
|
- `VatSumForeignCurrency` = `OINV/ORIN.VatSumFC`
|
|
- `VatSumLocalCurrency` = `OINV/ORIN.VatSum`
|
|
- `DocumentRate` = `OINV/ORIN.DocRate`
|
|
- `CompanyCurrency` = `OADM.MainCurncy`
|
|
- `StandardCostCurrency` = `OADM.MainCurncy`
|
|
|
|
Technische Umsetzung:
|
|
|
|
- `HanaQueryService` liest `OADM` jetzt per `CROSS JOIN`
|
|
- Invoice- und Credit-Note-Query liefern die neuen Felder
|
|
- bei Gutschriften werden Dokument- und Steuerbetraege mit negativem Vorzeichen uebernommen
|
|
- `CentralSalesRecords`-Schema wurde erweitert
|
|
- bestehende SQLite-DBs erhalten die neuen Spalten per `DatabaseSchemaMaintenanceService`
|
|
- `CentralSalesRecordService` persistiert und liest die neuen Felder
|
|
- `ExcelExportService` schreibt die neuen Spalten in Standort- und `Sales_All_*.xlsx`-Dateien
|
|
- `ManualExcelImportService` kann die neuen Spalten wieder einlesen
|
|
- `ConfigTransferService` erhaelt die neuen Felder beim Remapping zentraler Laufzeitdaten
|
|
|
|
Wichtig fuer Power BI:
|
|
|
|
- die neuen `DocumentTotal*`- und `VatSum*`-Felder sind Belegkopfwerte
|
|
- sie werden in der positionsbasierten Excel pro Positionszeile wiederholt
|
|
- diese Felder duerfen daher nicht blind positionsweise summiert werden
|
|
- fuer Belegkopfsummen in Power BI zuerst nach `DocumentType`, `Invoice Number`, `TSC` und ggf. `Land` deduplizieren
|
|
- besser: nach `TSC` + `DocumentType` + `DocumentEntry` deduplizieren, weil `DocEntry` aus B1 jetzt mitgezogen wird
|
|
- positionsbasierte Auswertungen sollen weiterhin mit positionsbezogenen Feldern wie `Sales Price/Value`, `Quantity` oder `Standard cost` arbeiten
|
|
|
|
Wichtig zum aktuellen Datenbestand:
|
|
|
|
- alte zentrale Daten wurden vor der Erweiterung exportiert und haben fuer die neuen B1-Felder noch `0`
|
|
- nach einem neuen Export/Rebuild der zentralen Daten koennen `DocEntry`, `DocTotal*`, `VatSum*`, `DocRate` und `OADM.MainCurncy` fachlich verglichen werden
|
|
|
|
Verifikation:
|
|
|
|
- `dotnet build .\TrafagSalesExporter.csproj --verbosity minimal` erfolgreich
|
|
- `dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --verbosity minimal` erfolgreich
|
|
- `48/48` Tests gruen
|
|
- `ManualExcelImportServiceTests` pruefen die neuen Excel-Spalten
|
|
- `CentralSalesRecordServiceTests` pruefen Persistenz und Ruecklesen der neuen B1-Felder
|
|
|
|
## H168 - Nachtrag 2026-04-29 Clean-Code-/DI-Befund
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-04-29 Clean-Code-/DI-Befund
|
|
|
|
Der aktuelle Code ist DI-orientiert und deutlich besser strukturiert als zu Beginn des Refactorings, aber noch nicht durchgehend ein Clean-Code-Ideal.
|
|
|
|
Positiv:
|
|
|
|
- Services werden weitgehend ueber Interfaces und DI verdrahtet
|
|
- `DataSourceAdapter` trennt die Quellsysteme
|
|
- Page-Services reduzieren direkte DB-Logik in mehreren Razor-Seiten
|
|
- `Scoped` fuer UI-nahe Services und `Singleton` fuer gemeinsame Infrastruktur/Orchestrierung ist bewusst gewaehlt
|
|
- Testabdeckung fuer zentrale Fachlogik ist vorhanden und waechst
|
|
|
|
Weiterhin offene Clean-Code-Risiken:
|
|
|
|
- `DatabaseInitializationService` ist weiterhin produktiver Reparatur-/Migrationspfad
|
|
- `Settings.razor` und `Standorte.razor` enthalten noch viel Workflow-/UI-Logik
|
|
- `ManagementCockpitService` und `ConfigTransferService` sind breit und sollten spaeter weiter aufgeteilt werden
|
|
- Retry-/Robustheitslayer fuer externe Systeme fehlt
|
|
- Secret-Store fehlt
|
|
- Auth-Rollenmodell ist aktuell pragmatisch, aber noch grob
|
|
|
|
Bewertung:
|
|
|
|
- Architektur: brauchbar bis gut
|
|
- DI: grundsaetzlich sauber
|
|
- Clean Code: mittel bis gut, mit klaren Altlasten
|
|
|
|
Dieser Befund wurde bewusst nur dokumentiert. Die strukturelle Bereinigung wird spaeter priorisiert.
|
|
|
|
## H169 - Nachtrag 2026-04-29 Authentifizierung / AD-Zugriffsschutz
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-04-29 Authentifizierung / AD-Zugriffsschutz
|
|
|
|
Nach Rueckmeldung der IT wurde ein Zugriffsschutz fuer die Blazor-App eingebaut.
|
|
|
|
Vorher konnte jeder Benutzer mit Netzwerkzugriff auf die App-URL die Anwendung oeffnen. Das war kritisch, weil die App Verkaufsdaten, Standort-/Quellsystemkonfiguration, SharePoint-Konfiguration, Config Import/Export und Secrets bzw. Zugangsdatenfelder beruehrt.
|
|
|
|
Neuer Stand:
|
|
|
|
- die App ist grundsaetzlich authentifizierungspflichtig
|
|
- produktives Ziel ist Windows Authentication / Active Directory
|
|
- Berechtigungen laufen ueber AD-Gruppen
|
|
- es gibt keine eigene Benutzer-/Passwortverwaltung in der App
|
|
- es gibt keinen versteckten produktiven Backdoor
|
|
|
|
Neue Security-Dateien:
|
|
|
|
- `Security/SecurityOptions.cs`
|
|
- `Security/SecurityPolicies.cs`
|
|
- `Security/DevelopmentAuthenticationHandler.cs`
|
|
|
|
Geaenderte zentrale Dateien:
|
|
|
|
- `Program.cs`
|
|
- `Components/Routes.razor`
|
|
- `Components/_Imports.razor`
|
|
- `Components/Layout/NavMenu.razor`
|
|
- `Components/Layout/MainLayout.razor`
|
|
- `appsettings.json`
|
|
- `appsettings.Development.json`
|
|
|
|
Aktuelles Rollenmodell:
|
|
|
|
- `Security:AccessGroups` steuert Zugriff auf die App
|
|
- `Security:AdminGroups` steuert Admin-Berechtigung
|
|
- Default-Gruppen sind `TRAFAG\\TrafagSalesExporter-Users` und `TRAFAG\\TrafagSalesExporter-Admins`
|
|
- echte Gruppennamen muessen von der IT bestaetigt oder angepasst werden
|
|
|
|
Admin-geschuetzte Seiten:
|
|
|
|
- `Settings`
|
|
- `Standorte`
|
|
- `Transformations`
|
|
|
|
Dashboard, Management Cockpit und Logs bleiben fuer berechtigte angemeldete Benutzer sichtbar.
|
|
|
|
Development:
|
|
|
|
- `appsettings.Development.json` aktiviert bei `ASPNETCORE_ENVIRONMENT=Development` einen lokalen Development-Auth-Handler
|
|
- Default-User: `DEV\\TrafagDeveloper`
|
|
- `DevelopmentUserIsAdmin=true`, damit lokal weiter programmiert werden kann
|
|
- produktiv darf die App nicht mit `Development` laufen
|
|
|
|
IIS-/IT-Hinweise:
|
|
|
|
1. Windows Authentication aktivieren
|
|
2. Anonymous Authentication deaktivieren
|
|
3. `ASPNETCORE_ENVIRONMENT` produktiv nicht auf `Development` setzen
|
|
4. AD-Gruppen fuer Benutzer und Admins anlegen oder bestehende Gruppen eintragen
|
|
5. `Security:AccessGroups` und `Security:AdminGroups` in produktiver Konfiguration korrekt setzen
|
|
|
|
Aktueller IIS-Deployment-Nachtrag 2026-05-20:
|
|
|
|
- Vollstaendige Detaildoku: `docs/DEPLOYMENT_IIS_HANDOFF_2026-05-19.md`
|
|
- Fuehrendes Projekt bleibt `TrafagSalesExporter`.
|
|
- Publish-Ausgabe heisst fuer IIS weiterhin `BiDashboard.dll`, ohne EXE/AppHost.
|
|
- Publish-Ziel: `\\trch-webapp-bidashboard.trafagch.local\BiDashboard$\`
|
|
- Browser-URL: `https://trch-webapp-bidashboard.trafagch.local/BiDashboard/`
|
|
- `diag.txt` unter `/BiDashboard/diag.txt` ist erreichbar und beweist, dass IIS auf den richtigen Publish-Ordner zeigt.
|
|
- Der verbleibende `500` entsteht beim ASP.NET-Core-Start oder im ASP.NET-Core-IIS-Modul.
|
|
- `web.config` steht aktuell auf `hostingModel="outofprocess"`, `stdoutLogEnabled="true"` und `ASPNETCORE_DETAILEDERRORS=true`.
|
|
- Wenn `logs` leer bleibt, muss der Serveradmin im Event Viewer pruefen: `IIS AspNetCore Module V2`, `.NET Runtime`, `Application Error`.
|
|
- Server muss kein Microsoft Excel installiert haben; XLSX wird ueber ClosedXML/OpenXML gelesen.
|
|
|
|
Verifikation:
|
|
|
|
```text
|
|
dotnet build .\TrafagSalesExporter.csproj --verbosity minimal
|
|
dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --verbosity minimal
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- Build erfolgreich
|
|
- Tests erfolgreich
|
|
- `48/48` Tests gruen
|
|
- Auth-Policy-Tests fuer AccessGroup, AdminGroup und Development-Admin vorhanden
|
|
- lokaler Development-Auth-Start geprueft: `http://localhost:55416` antwortet mit HTTP `200`
|
|
- bekannte MudBlazor-Analyzer-Warnungen zu `Dense` bleiben
|
|
|
|
## H170 - Nachtrag 2026-04-29 Management-Cockpit-Auswertung
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-04-29 Management-Cockpit-Auswertung
|
|
|
|
Seit dem letzten dokumentierten Stand vom 2026-04-17 wurde das `Management Cockpit` weiter ausgebaut. Dieser Abschnitt rekonstruiert den aktuellen Stand aus dem Code, weil die Aenderungen nach einem PC-Absturz nicht direkt nachdokumentiert wurden.
|
|
|
|
## H171 - Neue Auswertlogik
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Neue Auswertlogik
|
|
|
|
Das Cockpit ist nicht mehr nur auf Umsatz als feste Kennzahl beschraenkt.
|
|
|
|
Neu gibt es auswählbare Summenfelder:
|
|
|
|
- `Sales Price/Value`
|
|
- `Quantity`
|
|
- `Standard cost`
|
|
- `Quantity * Standard cost`
|
|
|
|
Diese Auswahl gilt fuer:
|
|
|
|
- dateibasierte Analyse vorhandener Excel-Exporte
|
|
- zentrale Roh-Auswertung aus `CentralSalesRecords`
|
|
|
|
## H172 - Anzeige-Waehrung und Wechselkurse
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Anzeige-Waehrung und Wechselkurse
|
|
|
|
Fuer betragliche Summenfelder kann jetzt eine Anzeige-Waehrung gewaehlt werden:
|
|
|
|
- `EUR`
|
|
- `USD`
|
|
- `Original`
|
|
|
|
Die Umrechnung nutzt `CurrencyExchangeRateService`.
|
|
|
|
Wichtig:
|
|
|
|
- nicht-betragliche Werte wie `Quantity` werden nicht umgerechnet
|
|
- bei `Original` bleiben Werte in der jeweiligen Quellwaehrung
|
|
- bei fehlendem Wechselkurs wird der betroffene Wert mit `0` in die Zielwaehrung eingerechnet
|
|
- fehlende Kurse werden als Anzahl `Nicht umgerechnet` bzw. in Hinweisen/Finding sichtbar gemacht
|
|
- Wechselkurse werden pro Quellwaehrung, Zielwaehrung und Datum gecacht, damit grosse Auswertungen nicht unnoetig oft die gleiche Rate aufloesen
|
|
|
|
## H173 - Zusätzliche Summenfelder in der zentralen Sicht
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Zusätzliche Summenfelder in der zentralen Sicht
|
|
|
|
Die zentrale Roh-Auswertung kann neben dem Haupt-Summenfeld weitere Summenfelder anzeigen.
|
|
|
|
Diese Zusatzwerte werden aktuell in den Zeitreihen ausgegeben:
|
|
|
|
- Jahreswerte
|
|
- Monatswerte
|
|
- Tageswerte im gewaehlten Monat
|
|
|
|
Beispiel:
|
|
|
|
- Hauptwert: `Sales Price/Value`
|
|
- Zusatzwerte: `Quantity`, `Quantity * Standard cost`
|
|
|
|
Damit kann die zentrale Sicht Umsatz, Mengen und Kostennaeherung nebeneinander darstellen.
|
|
|
|
## H174 - UI-Stand
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### UI-Stand
|
|
|
|
`Components/Pages/ManagementCockpit.razor` hat neue Controls:
|
|
|
|
- Summenfeld fuer Excel-Dateianalyse
|
|
- Anzeige-Waehrung fuer Excel-Dateianalyse
|
|
- Summenfeld fuer zentrale Roh-Auswertung
|
|
- weitere Summenfelder fuer zentrale Roh-Auswertung per Mehrfachauswahl
|
|
- Anzeige-Waehrung fuer zentrale Roh-Auswertung
|
|
|
|
Die Tabellen wurden von festem Text `Umsatz` auf generische `Werte` / `Jahreswerte` / `Monatswerte` umgestellt.
|
|
|
|
Die vorher dokumentierte Manometer-/Gauge-Sicht ist im aktuellen Arbeitsstand nicht mehr aktiv sichtbar. Stattdessen liegt der Fokus wieder auf Kennzahlen, Hinweisen und tabellarischen Auswertungen.
|
|
|
|
## H175 - Technische Umsetzung
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Technische Umsetzung
|
|
|
|
Betroffene Dateien:
|
|
|
|
- `Components/Pages/ManagementCockpit.razor`
|
|
- `Models/ManagementCockpitModels.cs`
|
|
- `Services/IManagementCockpitService.cs`
|
|
- `Services/ManagementCockpitPageService.cs`
|
|
- `Services/ManagementCockpitService.cs`
|
|
- `TrafagSalesExporter.Tests/ManagementCockpitServiceTests.cs`
|
|
|
|
Neue bzw. erweiterte Modelle:
|
|
|
|
- `ManagementCockpitValueFieldKeys`
|
|
- `ManagementCockpitCurrencyOptions`
|
|
- `ManagementCockpitValueFieldOption`
|
|
- `ManagementCockpitAnalysisOptions`
|
|
- `ManagementCockpitAggregatedFieldValue`
|
|
|
|
Neue Felder in Ergebnissen:
|
|
|
|
- gewaehltes Summenfeld
|
|
- Anzeige-Waehrung
|
|
- Anzahl fehlender Wechselkurse
|
|
- Zusatzwerte pro Zeitreihe
|
|
|
|
## H176 - Testabdeckung
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Testabdeckung
|
|
|
|
Die `ManagementCockpitServiceTests` wurden erweitert um Tests fuer:
|
|
|
|
- Umrechnung zentraler Werte in EUR
|
|
- Caching von Wechselkursauflösungen
|
|
- Mengen-Summe ohne Waehrungsumrechnung
|
|
- Zusatz-Summenfelder in Jahres- und Monatswerten
|
|
|
|
Noch offen:
|
|
|
|
- UI manuell pruefen
|
|
- genaue fachliche Zielwaehrung fuer Standardberichte bestaetigen
|
|
- entscheiden, ob `CHF` ebenfalls als direkte Anzeige-Waehrung angeboten werden soll
|
|
- klaeren, ob fehlende Wechselkurse langfristig mit `0`, Originalwert oder separater Fehlergruppe dargestellt werden sollen
|
|
|
|
## H177 - Nachtrag 2026-04-17 Refactoring- und HANA-Stand
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-04-17 Refactoring- und HANA-Stand
|
|
|
|
Der Stand aus den frueheren Nachtraegen ist fuer Architektur und HANA-Zugriff nicht mehr vollstaendig.
|
|
|
|
Inzwischen gilt zusaetzlich:
|
|
|
|
## H178 - 1. DataSourceAdapter-Pattern ist eingefuehrt
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 1. DataSourceAdapter-Pattern ist eingefuehrt
|
|
|
|
Die Quellsysteme `HANA`, `SAP_GATEWAY` und `MANUAL_EXCEL` laufen nicht mehr ueber einen grossen `if/else`-Block im `SiteExportService`.
|
|
|
|
Neu:
|
|
|
|
- `Services/DataSources/IDataSourceAdapter.cs`
|
|
- `Services/DataSources/IDataSourceAdapterResolver.cs`
|
|
- `Services/DataSources/DataSourceAdapterResolver.cs`
|
|
- `Services/DataSources/DataSourceFetchContext.cs`
|
|
- `Services/DataSources/DataSourceFetchResult.cs`
|
|
- `Services/DataSources/DataSourceCredentials.cs`
|
|
- `Services/DataSources/HanaDataSourceAdapter.cs`
|
|
- `Services/DataSources/SapGatewayDataSourceAdapter.cs`
|
|
- `Services/DataSources/ManualExcelDataSourceAdapter.cs`
|
|
|
|
Neuer Zuschnitt:
|
|
|
|
- `SiteExportService` ist jetzt deutlich schlanker und nur noch Export-Pipeline
|
|
- Adapter loesen Quellsystem-spezifisches Laden auf
|
|
- fuer ein weiteres Quellsystem ist kein Umbau im `SiteExportService` mehr noetig
|
|
|
|
## H179 - 2. Page-Services sind nicht mehr Singleton
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 2. Page-Services sind nicht mehr Singleton
|
|
|
|
UI-nahe Services laufen jetzt pro Blazor-Circuit als `Scoped`.
|
|
|
|
Betroffen:
|
|
|
|
- `ISettingsPageService`
|
|
- `IStandortePageService`
|
|
- `IStandorteSapEditorService`
|
|
- `IManagementCockpitPageService`
|
|
- `IDashboardPageService`
|
|
- `ILogsPageService`
|
|
- `ITransformationsPageService`
|
|
|
|
Wichtig:
|
|
|
|
- `ExportOrchestrationService` bleibt bewusst `Singleton`, weil Exportstatus ueber Circuits geteilt werden muss
|
|
- stateless Infrastruktur-Services bleiben weiter `Singleton`
|
|
|
|
## H180 - 3. Datenbank-Initialisierung ist aufgeteilt
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 3. Datenbank-Initialisierung ist aufgeteilt
|
|
|
|
Der fruehere monolithische `DatabaseInitializationService` ist inzwischen in grobe Verantwortungsbloecke getrennt:
|
|
|
|
- `DatabaseInitializationService` als Orchestrator
|
|
- `DatabaseSchemaMaintenanceService` fuer Schema-/Repair-Logik
|
|
- `DatabaseSeedService` fuer Defaultdaten und Stammdaten-Seeding
|
|
- `DatabaseInitializationService.SchemaSql.cs` als SQL-Definitionsblock
|
|
|
|
Das reduziert das groesste Architektur-Risiko deutlich, auch wenn die Startmigrationen weiterhin ein sensibler Teil des Systems bleiben.
|
|
|
|
## H181 - 4. Weitere Razor-Seiten sind entlastet
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 4. Weitere Razor-Seiten sind entlastet
|
|
|
|
Neben den frueher bereits entlasteten Seiten laufen jetzt auch diese Seiten ueber Page-Services statt direkten `DbContext`-Zugriffen:
|
|
|
|
- `Dashboard.razor` ueber `DashboardPageService`
|
|
- `Logs.razor` ueber `LogsPageService`
|
|
- `Transformations.razor` ueber `TransformationsPageService`
|
|
|
|
Der Rest an direkter Persistenzlogik in Razor ist damit deutlich kleiner geworden.
|
|
|
|
## H182 - 5. Kritische HANA-Risiken wurden entschärft
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 5. Kritische HANA-Risiken wurden entschärft
|
|
|
|
## H183 - SQL-Injection-Schutz
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
#### SQL-Injection-Schutz
|
|
|
|
Im `HanaQueryService` wurden die kritischen interpolierten SQL-Stellen bereinigt:
|
|
|
|
- `tsc` und `dateFilter` laufen jetzt parametriert in `HanaCommand`
|
|
- `schema` wird als Identifier streng validiert und gequotet
|
|
|
|
Damit ist der akute Injection-Pfad in den HANA-Verkaufsabfragen geschlossen.
|
|
|
|
## H184 - Async statt `.GetAwaiter().GetResult()`
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
#### Async statt `.GetAwaiter().GetResult()`
|
|
|
|
Die blockierenden HANA-Aufrufe wurden auf echte Async-Methoden umgestellt:
|
|
|
|
- `IHanaQueryService` ist jetzt async-basiert
|
|
- `HanaQueryService` nutzt `OpenAsync`, `ExecuteReaderAsync`, `ReadAsync`, `ExecuteScalarAsync`
|
|
- Aufrufer wie `HanaDataSourceAdapter`, `StandortePageService` und `SettingsPageService` verwenden keine `Task.Run`-Workarounds mehr fuer HANA
|
|
|
|
Damit ist das fruehere Deadlock-/Blocking-Risiko in diesem Pfad deutlich reduziert.
|
|
|
|
## H185 - 6. Test- und Build-Stand
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 6. Test- und Build-Stand
|
|
|
|
Verifiziert wurde zuletzt mit:
|
|
|
|
```text
|
|
dotnet build .\TrafagSalesExporter.csproj --verbosity minimal
|
|
dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --verbosity minimal
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- Projekt-Build erfolgreich
|
|
- `36/36` Tests gruen
|
|
|
|
Bekannt:
|
|
|
|
- `dotnet build .\TrafagSalesExporter.sln` endet in dieser Umgebung weiterhin mit Exitcode `1` ohne konkrete Compilerfehler
|
|
- das Hauptprojekt und das Testprojekt bauen aber erfolgreich
|
|
- bekannte Warnungen bleiben:
|
|
- `MSB3270` wegen HANA-Assembly-Architektur
|
|
- MudBlazor-Analyzer zu `Dense`
|
|
|
|
## H186 - 7. Aktuelles Architektururteil
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 7. Aktuelles Architektururteil
|
|
|
|
Der Zustand ist jetzt deutlich professioneller als zu Beginn des Refactorings:
|
|
|
|
- Datenquellen sauberer getrennt
|
|
- UI konsistenter ueber Page-Services geschnitten
|
|
- groesster Start-/Schema-Block zerlegt
|
|
- HANA-Pfad sicherer und sauberer asynchron
|
|
|
|
Aber noch nicht vollendet:
|
|
|
|
- keine gezielten Adapter-/Resolver-Unit-Tests
|
|
- keine Retry-Strategie fuer SharePoint / SAP / HANA-Netzpfade
|
|
- kein Secret-Store
|
|
- `DatabaseInitializationService` bleibt trotz Zerlegung ein sensibler produktiver Migrationspfad
|
|
|
|
## H187 - Nachtrag 2026-04-17
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-04-17
|
|
|
|
Der dokumentierte Stand in diesem Handoff war bei der Waehrungslogik nicht mehr aktuell.
|
|
|
|
Inzwischen gilt:
|
|
|
|
- Kurstabellen fuer `CurrencyExchangeRates` sind im System vorhanden
|
|
- `Settings` enthaelt bereits eine Pflegeoberflaeche fuer Wechselkurse
|
|
- `ExchangeRateImportService` importiert ECB-Tageskurse nach `CurrencyExchangeRates`
|
|
- `NormalizeCurrencyCode` ist als Value-Transformation vorhanden
|
|
- `ConvertCurrency` ist als Record-Transformation vorhanden
|
|
- `Program.cs` registriert beide Strategien sowie `CurrencyExchangeRateService` und `ExchangeRateImportService`
|
|
|
|
Wichtig:
|
|
|
|
- die Roh-Auswertung im `Management Cockpit` rechnet Stand heute weiterhin bewusst **nicht** in CHF um
|
|
- dort bleibt der Umsatz weiterhin in `Sales Currency`
|
|
- die Waehrungsumrechnung ist aktuell Teil des allgemeinen Transformations-/Mapping-Systems, nicht der Cockpit-Rohsicht
|
|
|
|
Zusatzlich wurden am 2026-04-17 fehlende Unit-Tests fuer die Waehrungslogik nachgezogen:
|
|
|
|
- `CurrencyExchangeRateServiceTests`
|
|
- `ExchangeRateImportServiceTests`
|
|
- Erweiterungen in
|
|
- `TransformationStrategiesTests`
|
|
- `RecordTransformationServiceTests`
|
|
- `TransformationCatalogTests`
|
|
|
|
Aktueller Teststatus nach diesem Nachtrag:
|
|
|
|
```text
|
|
dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --verbosity minimal
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- erfolgreich
|
|
- `31/31` Tests gruen
|
|
- bekannte Warnung bleibt:
|
|
- SAP HANA Architekturwarnung `MSB3270`
|
|
|
|
## H188 - Architekturpruefung 2026-04-17
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Architekturpruefung 2026-04-17
|
|
|
|
Es wurde eine erneute Gesamtpruefung der Architektur gemacht, ausdruecklich ohne neue Implementierung.
|
|
|
|
## H189 - Gesamturteil
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Gesamturteil
|
|
|
|
Die Grundrichtung ist weiterhin sinnvoll:
|
|
|
|
- klare Trennung der Quellsysteme `SAP`, `BI1`, `SAGE`, `MANUAL_EXCEL`
|
|
- zentrales fachliches Zielschema ueber `SalesRecord`
|
|
- zentrale technische Ablage ueber `CentralSalesRecords`
|
|
- separater Orchestrator fuer Standort- und Konsolidierungsexport
|
|
- Transformationssystem als eigener Layer
|
|
|
|
Aber:
|
|
|
|
- die Architektur ist **noch nicht stabil genug**, um sie als "fertig sauber" zu betrachten
|
|
- die groessten Risiken liegen aktuell nicht in SAP oder Waehrungen, sondern in
|
|
- Start-/Schema-Initialisierung
|
|
- Config-Import
|
|
- Verteilung von Logik zwischen Razor-Seiten und Services
|
|
|
|
## H190 - Wichtigste Architektur-Risiken
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Wichtigste Architektur-Risiken
|
|
|
|
## H191 - 1. Start-/Schema-Initialisierung ist fragil
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
#### 1. Start-/Schema-Initialisierung ist fragil
|
|
|
|
`DatabaseInitializationService` mischt derzeit:
|
|
|
|
- `EnsureCreated`
|
|
- manuelle `ALTER TABLE`-Pflege
|
|
- FK-Reparaturlogik
|
|
- Seeding
|
|
- empfohlenes Regel-Seeding
|
|
|
|
Das ist funktional hilfreich, aber architektonisch gefaehrlich, weil:
|
|
|
|
- die App-Initialisierung dadurch viel implizite Datenmigration enthaelt
|
|
- Verhalten schwer vorhersehbar wird
|
|
- Fehler im Migrationspfad sofort produktive Daten treffen
|
|
|
|
Wichtiger konkreter Befund aus der Pruefung:
|
|
|
|
- beim Kopieren von `Sites_old` nach `Sites` ist die Spaltenreihenfolge im SQL inkonsistent
|
|
- dadurch koennen Werte wie `ManualImportFilePath`, `SapServiceUrl`, `SapEntitySet` verschoben gespeichert werden
|
|
- das ist eine reale Datenkorruptionsgefahr und kein reines Architekturthema
|
|
|
|
## H192 - 2. Config-Import ist destruktiv und nicht atomar
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 2. Config-Import ist destruktiv und nicht atomar
|
|
|
|
`ConfigTransferService.ImportJsonAsync` loescht aktuell zuerst grosse Teile der Konfiguration und Daten:
|
|
|
|
- Sites
|
|
- HanaServers
|
|
- Transformation Rules
|
|
- SAP-Konfiguration
|
|
- Wechselkurse
|
|
- sogar `CentralSalesRecords`
|
|
|
|
und baut danach mit mehreren `SaveChangesAsync()`-Zwischenschritten neu auf.
|
|
|
|
Risiko:
|
|
|
|
- wenn der Import in der Mitte scheitert, bleibt das System teilweise geloescht zurueck
|
|
- `CentralSalesRecords` gehoeren fachlich ohnehin nicht sauber in einen normalen Config-Import
|
|
|
|
## H193 - 3. Zu viel Fach- und Persistenzlogik in Razor-Seiten
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 3. Zu viel Fach- und Persistenzlogik in Razor-Seiten
|
|
|
|
`Settings.razor` und `Standorte.razor` machen aktuell sehr viel direkt:
|
|
|
|
- `DbContext` oeffnen
|
|
- Daten laden und speichern
|
|
- Konfigurationsimport/-export anstossen
|
|
- SAP-Refresh
|
|
- Upload-Handling
|
|
- Teile der Validierung / Persistenzlogik
|
|
|
|
Das funktioniert momentan, fuehrt aber langfristig zu:
|
|
|
|
- schwer testbarer UI-Logik
|
|
- verstreuten Regeln
|
|
- hoeherem Seiteneffekt-Risiko bei Erweiterungen
|
|
|
|
## H194 - 4. Vertrag zwischen Orchestrator und konsolidiertem Export ist unscharf
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 4. Vertrag zwischen Orchestrator und konsolidiertem Export ist unscharf
|
|
|
|
`ExportOrchestrationService` sammelt bei `ExportAllAsync` bereits `consolidatedRecords`, uebergibt sie weiter, aber `ConsolidatedExportService` ignoriert diesen Parameter und liest erneut aus `CentralSalesRecords`.
|
|
|
|
Das zeigt ein offenes Architekturthema:
|
|
|
|
- Soll die zentrale Datei aus dem Live-Exportlauf gebaut werden?
|
|
- oder immer nur aus dem persistenten Read Model `CentralSalesRecords`?
|
|
|
|
Aktuell ist beides halb vorhanden.
|
|
|
|
## H195 - 5. Reporting-/Cockpit-Logik ist noch nicht voll verallgemeinert
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 5. Reporting-/Cockpit-Logik ist noch nicht voll verallgemeinert
|
|
|
|
Bei der Pruefung wurde gesehen:
|
|
|
|
- `ManagementCockpitService` enthaelt noch hartcodierte Jahreslogik fuer `2025` und `2026`
|
|
- die Rohsicht bleibt bewusst ohne CHF-Umrechnung
|
|
|
|
Das ist fuer den aktuellen Stand akzeptabel, zeigt aber:
|
|
|
|
- Reporting ist noch kein voll abstrahierter fachlicher Layer
|
|
|
|
## H196 - Empfohlenes Sollbild
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Empfohlenes Sollbild
|
|
|
|
Die naechste Architektur-Stufe sollte in diese Richtung gehen:
|
|
|
|
## H197 - 1. Klare Schichten
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 1. Klare Schichten
|
|
|
|
- UI:
|
|
- Razor nur fuer Interaktion, Anzeige, Formularzustand
|
|
- Application:
|
|
- Use Cases / Commands / Queries fuer Export, Config, SAP-Refresh, Wechselkurse, Standortpflege
|
|
- Domain / Fachlogik:
|
|
- Transformationen, Mappingregeln, Waehrungsumrechnung, Cockpit-Berechnungen
|
|
- Infrastructure:
|
|
- HANA, SAP Gateway, SQLite, SharePoint, Dateisystem
|
|
|
|
## H198 - 2. Versionierte Migrationen statt manueller Start-Reparaturen
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 2. Versionierte Migrationen statt manueller Start-Reparaturen
|
|
|
|
Statt immer mehr Reparaturlogik beim App-Start:
|
|
|
|
- Schema-Aenderungen versionieren
|
|
- Migrationspfade testbar machen
|
|
- Startlogik nur noch fuer minimale Bootstrap-Aufgaben behalten
|
|
|
|
## H199 - 3. Config-Import als atomarer Vorgang
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 3. Config-Import als atomarer Vorgang
|
|
|
|
Ziel:
|
|
|
|
- alles in einer Transaktion oder bewusst in klar getrennten Phasen
|
|
- kein halb geloeschter Zustand bei Fehlern
|
|
- `CentralSalesRecords` aus normalem Config-Import eher herausnehmen
|
|
|
|
## H200 - 4. Zentrale Export-Semantik entscheiden
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 4. Zentrale Export-Semantik entscheiden
|
|
|
|
Explizit festlegen:
|
|
|
|
- zentrale Datei immer aus `CentralSalesRecords`
|
|
oder
|
|
- zentrale Datei aus dem aktuellen Export-Snapshot
|
|
|
|
Danach die doppelte Semantik entfernen.
|
|
|
|
## H201 - Priorisierung aus Architektursicht
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Priorisierung aus Architektursicht
|
|
|
|
Wenn nach Stabilitaet priorisiert wird, dann in dieser Reihenfolge:
|
|
|
|
1. `DatabaseInitializationService` / Migrationspfad absichern
|
|
2. `ConfigTransferService.ImportJsonAsync` atomar und weniger destruktiv machen
|
|
3. Logik aus `Settings.razor` und `Standorte.razor` in Anwendungsservices verschieben
|
|
4. Export-Semantik fuer Konsolidierung vereinheitlichen
|
|
5. erst danach weitere Fachfeatures wie Cockpit-CHF, Budget, Gruppenlogik
|
|
|
|
## H202 - Kurzfazit
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Kurzfazit
|
|
|
|
Die Architektur ist nicht schlecht. Das Grundmodell traegt.
|
|
|
|
Aber:
|
|
|
|
- sie ist noch nicht robust genug fuer ruhigen weiteren Ausbau ohne technische Konsolidierung
|
|
- die aktuelle Hauptgefahr liegt in Infrastruktur- und Persistenzlogik, nicht in den Fachfeatures
|
|
|
|
Fuer den naechsten Einstieg nach Absturz gilt daher:
|
|
|
|
1. zuerst diesen Architektur-Nachtrag lesen
|
|
2. dann `DatabaseInitializationService` und `ConfigTransferService` als Risikobloecke ansehen
|
|
3. neue Fachfeatures erst nach dieser technischen Konsolidierung beginnen
|
|
|
|
## H203 - Nachtrag HANA-/Standort-Workflow 2026-04-17
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Nachtrag HANA-/Standort-Workflow 2026-04-17
|
|
|
|
Nach der Architekturpruefung wurde der doppelte HANA-Workflow bereinigt.
|
|
|
|
## H204 - Altes Problem
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Altes Problem
|
|
|
|
Vorher gab es zwei konkurrierende Stellen fuer HANA-Konfiguration:
|
|
|
|
- oben eine eigene `HANA Server`-Verwaltung
|
|
- unten im Standortdialog noch einmal eine fast vollstaendige HANA-Verbindung
|
|
|
|
Dadurch war unklar:
|
|
|
|
- was die zentrale Wahrheit ist
|
|
- wann ein zentraler Server geaendert wird
|
|
- wann still ein separater Server pro Standort entsteht
|
|
|
|
## H205 - Neue Logik
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Neue Logik
|
|
|
|
Oben gilt jetzt:
|
|
|
|
- `HANA Server` ist zentrale HANA-Konfiguration pro Quellsystem
|
|
- aktuell relevant fuer:
|
|
- `BI1`
|
|
- `SAGE`
|
|
|
|
Unten im Standort gilt jetzt:
|
|
|
|
- Standort pflegt nur noch standortspezifische Daten
|
|
- `Schema`
|
|
- `TSC`
|
|
- `Land`
|
|
- `SourceSystem`
|
|
- optionale Username-/Password-Overrides
|
|
- die technische HANA-Verbindung kommt aus der zentralen Konfiguration des Quellsystems
|
|
|
|
## H206 - Technische Umsetzung
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Technische Umsetzung
|
|
|
|
- `HanaServer` hat jetzt zusaetzlich `SourceSystem`
|
|
- `DatabaseInitializationService` stellt zentrale Eintraege fuer `BI1` und `SAGE` sicher
|
|
- bestehende verknuepfte HANA-Server werden dabei moeglichst auf `BI1` / `SAGE` gemappt
|
|
- `SiteExportService` baut HANA-Verbindungen jetzt aus der zentralen HANA-Konfiguration des Quellsystems
|
|
- `Settings.razor` testet BI1/SAGE nicht mehr ueber einen Beispiel-Standort, sondern ueber die zentrale HANA-Konfiguration
|
|
- `Standorte.razor` speichert im Standort fuer HANA-basierte Systeme keine eigene Vollverbindung mehr
|
|
|
|
## H207 - Wichtige Konsequenz
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Wichtige Konsequenz
|
|
|
|
Fachlich gilt jetzt:
|
|
|
|
- oben = Standardkonfiguration pro Quellsystem
|
|
- unten = Standort + optionale Credential-Overrides
|
|
|
|
Das entspricht der gewuenschten Logik:
|
|
|
|
- gleiche BI1-/SAGE-Standorte koennen zentrale Verbindungswerte teilen
|
|
- Ausnahmen koennen weiter ueber Username-/Password-Overrides reagieren
|
|
|
|
## H208 - UI-Nachtrag
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### UI-Nachtrag
|
|
|
|
Die frueher doppelte und dadurch verwirrende UI wurde danach auch sichtbar bereinigt.
|
|
|
|
Aktueller UI-Stand:
|
|
|
|
- oben heisst der Bereich jetzt klar `Zentrale HANA-Konfiguration`
|
|
- im Standortdialog gibt es fuer HANA keine zweite technische Eingabestrecke mehr
|
|
- dort wird nur noch die aktive Zentralverbindung angezeigt
|
|
- Host, Port, SSL und technische Parameter werden explizit nach oben verwiesen
|
|
- der zentrale Verbindungstest in `Settings.razor` meldet jetzt sauber die zentrale HANA-Verbindung
|
|
|
|
## H209 - Nachtrag Quellsystem-Verwaltung 2026-04-17
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Nachtrag Quellsystem-Verwaltung 2026-04-17
|
|
|
|
Die bisher noch hart codierten Quellsystem-Listen wurden entfernt und durch echte Stammdaten ersetzt.
|
|
|
|
## H210 - Neuer Stand
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Neuer Stand
|
|
|
|
- neues Modell `SourceSystemDefinition`
|
|
- Quellsysteme werden jetzt zentral in der DB gehalten statt in Razor-Arrays
|
|
- pro Quellsystem werden gepflegt:
|
|
- `Code`
|
|
- `DisplayName`
|
|
- `ConnectionKind`
|
|
- `IsActive`
|
|
- `CentralUsername`
|
|
- `CentralPassword`
|
|
|
|
## H211 - Neue GUI-Logik
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Neue GUI-Logik
|
|
|
|
- `Settings.razor` enthaelt jetzt eine pflegbare Quellsystem-Tabelle
|
|
- dort koennen Quellsysteme per GUI angelegt, bearbeitet und gespeichert werden
|
|
- Anschlussart ist nicht mehr implizit im Code, sondern pro Quellsystem konfigurierbar
|
|
- zentrale Zugangsdaten haengen jetzt am Quellsystem selbst
|
|
|
|
## H212 - Anschlussarten
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Anschlussarten
|
|
|
|
Aktuell technisch vorgesehen:
|
|
|
|
- `HANA`
|
|
- `SAP_GATEWAY`
|
|
- `MANUAL_EXCEL`
|
|
|
|
Damit gilt:
|
|
|
|
- HANA-Konfiguration oben in `Standorte.razor` nur noch fuer Quellsysteme mit Anschlussart `HANA`
|
|
- Standort-Dropdown zieht seine Quellsysteme jetzt aus `SourceSystemDefinitions`
|
|
- Transformationsregeln ziehen ihre Quellsystem-Auswahl ebenfalls aus `SourceSystemDefinitions`
|
|
|
|
## H213 - Technische Umsetzung
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Technische Umsetzung
|
|
|
|
- `AppDbContext` hat jetzt `DbSet<SourceSystemDefinition>`
|
|
- `DatabaseInitializationService` erzeugt und seedet `SourceSystemDefinitions`
|
|
- `SiteExportService` loest zentrale Credentials jetzt ueber `SourceSystemDefinition`
|
|
- `ConfigTransferService` exportiert/importiert jetzt auch `SourceSystemDefinitions`
|
|
|
|
## H214 - Verifikation
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Verifikation
|
|
|
|
Nach dieser Umstellung geprueft:
|
|
|
|
```text
|
|
dotnet build .\TrafagSalesExporter.csproj -v minimal
|
|
dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --verbosity minimal
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- Build erfolgreich
|
|
- Tests erfolgreich
|
|
- `31/31` Tests gruen
|
|
|
|
## H215 - Bereinigung der Legacy-Credentials
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Bereinigung der Legacy-Credentials
|
|
|
|
Danach wurden auch die alten zentralen Credential-Felder technisch bereinigt.
|
|
|
|
Aktueller Stand:
|
|
|
|
- `ExportSettings` enthaelt keine alten Felder mehr fuer `SapUsername`, `Bi1Username`, `SageUsername` usw.
|
|
- der Config-Export schreibt zentrale Zugangsdaten nur noch ueber `SourceSystemDefinitions`
|
|
- `ConfigTransferService` hat keinen aktiven Legacy-Credential-Pfad mehr
|
|
- die fruehere Temp-Datei `standorte_numbered.tmp` wurde entfernt
|
|
|
|
Wichtig:
|
|
|
|
- bestehende DB-Spalten koennen physisch noch vorhanden sein, sind aber kein aktiver Codepfad mehr
|
|
- fuehrende Wahrheit fuer zentrale Zugangsdaten ist jetzt ausschliesslich `SourceSystemDefinition`
|
|
|
|
## H216 - Schema-Bereinigung
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Schema-Bereinigung
|
|
|
|
Danach wurde auch die SQLite-Schemabereinigung nachgezogen.
|
|
|
|
Aktueller Stand:
|
|
|
|
- `DatabaseInitializationService` erkennt alte Credential-Spalten in `ExportSettings`
|
|
- wenn diese Legacy-Spalten noch existieren, wird `ExportSettings` beim Start auf das neue Schema rekonstruiert
|
|
- erhalten bleiben nur die noch gueltigen Felder:
|
|
- `DateFilter`
|
|
- `TimerHour`
|
|
- `TimerMinute`
|
|
- `TimerEnabled`
|
|
- `DebugLoggingEnabled`
|
|
- `LocalSiteExportFolder`
|
|
- `LocalConsolidatedExportFolder`
|
|
|
|
Damit gilt jetzt:
|
|
|
|
- alte zentrale SAP/BI1/SAGE-Credentials sind nicht nur logisch entfernt
|
|
- sie werden bei bestehender DB auch aktiv aus dem `ExportSettings`-Schema entfernt
|
|
|
|
## H217 - Letzte Bereinigung HANA-Credentials
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Letzte Bereinigung HANA-Credentials
|
|
|
|
Danach wurde auch die letzte doppelte Credential-Stelle in der HANA-Verwaltung entfernt.
|
|
|
|
Aktueller Stand:
|
|
|
|
- zentrale HANA-Konfiguration speichert nur noch technische Verbindungsdaten
|
|
- `Host`
|
|
- `Port`
|
|
- `DatabaseName`
|
|
- `UseSsl`
|
|
- `ValidateCertificate`
|
|
- `AdditionalParams`
|
|
- Username/Password werden nicht mehr in der zentralen HANA-UI gepflegt
|
|
- HANA-Verbindungstests in `Standorte.razor` verwenden jetzt die zentralen Credentials aus `SourceSystemDefinition`
|
|
- `SiteExportService` faellt bei HANA nicht mehr auf in `HanaServer` gespeicherte Credentials zurueck
|
|
- `ConfigTransferService` exportiert/importiert fuer `HanaServer` keine Username-/Password-Werte mehr
|
|
- `DatabaseInitializationService` bereinigt bei bestehender DB auch das `HanaServers`-Schema und entfernt die Altspalten `Username` / `Password`
|
|
|
|
Die fachliche Reihenfolge ist jetzt eindeutig:
|
|
|
|
1. zentrale Credentials aus `SourceSystemDefinition`
|
|
2. optionale Override-Credentials am `Site`
|
|
3. technische HANA-Verbindung aus der zentralen HANA-Konfiguration
|
|
|
|
## H218 - EF-/SQLite-Fix
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### EF-/SQLite-Fix
|
|
|
|
Beim ersten Lauf nach der Schema-Bereinigung trat noch ein Mapping-Fehler auf:
|
|
|
|
- `SQLite Error 1: 'no such column: h.Password'`
|
|
|
|
Ursache:
|
|
|
|
- `HanaServers`-Schema war bereits ohne `Username` / `Password`
|
|
- das EF-Modell `HanaServer` hat diese Properties aber noch als normale Spalten behandelt
|
|
|
|
Fix:
|
|
|
|
- `HanaServer.Username` und `HanaServer.Password` sind jetzt `[NotMapped]`
|
|
- damit bleiben sie fuer Laufzeit-Verbindungsaufbau und Tests nutzbar
|
|
- EF erwartet sie aber nicht mehr als Datenbankspalten
|
|
|
|
## H219 - Nachtrag Zentrale SAP-Steuerung 2026-04-17
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Nachtrag Zentrale SAP-Steuerung 2026-04-17
|
|
|
|
Der verbleibende Architekturbruch bei SAP wurde ebenfalls bereinigt.
|
|
|
|
## H220 - Neuer Stand
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Neuer Stand
|
|
|
|
- `SourceSystemDefinition` enthaelt jetzt auch `CentralServiceUrl`
|
|
- zentrale SAP-Service-URL wird damit am Quellsystem gepflegt, nicht mehr primaer am Standort
|
|
- `Standorte.razor` behandelt `SapServiceUrl` jetzt als Override
|
|
- wenn kein Override gesetzt ist, zieht SAP die URL zentral aus dem Quellsystem
|
|
|
|
## H221 - UI
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### UI
|
|
|
|
- `Settings.razor` hat fuer Quellsysteme jetzt eine Dialogbearbeitung statt nur Inline-Tabellenfelder
|
|
- dadurch ist das Quellsystem sauber editierbar
|
|
- fuer `SAP_GATEWAY` wird dort die zentrale SAP-Service-URL gepflegt
|
|
- `Standorte.razor` zeigt bei SAP jetzt:
|
|
- zentrale SAP Service URL
|
|
- optionales `SAP Service URL Override`
|
|
|
|
## H222 - Laufzeitlogik
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Laufzeitlogik
|
|
|
|
- `SiteExportService` verwendet bei SAP die effektive URL aus
|
|
- Standort-Override
|
|
- sonst `SourceSystemDefinition.CentralServiceUrl`
|
|
- SAP-Verbindungstest in `Settings.razor` testet die zentrale URL direkt aus dem Quellsystem
|
|
- Dashboard zeigt fuer SAP jetzt ebenfalls die effektive zentrale bzw. ueberschriebene URL
|
|
|
|
## H223 - Verifikation
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Verifikation
|
|
|
|
Nach der Umstellung geprueft:
|
|
|
|
```text
|
|
dotnet build .\TrafagSalesExporter.csproj -v minimal
|
|
dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --verbosity minimal
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- Build erfolgreich
|
|
- Tests erfolgreich
|
|
- `31/31` Tests gruen
|
|
|
|
## H224 - Nachtrag 2026-04-16
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-04-16
|
|
|
|
Seit dem letzten Handoff wurden weitere Funktionen umgesetzt, die unten im alten Stand noch nicht voll enthalten sind.
|
|
|
|
## H225 - Zielbild
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Zielbild
|
|
|
|
Die App wurde von einem reinen BI1/HANA-Exporter zu einer kombinierten Plattform erweitert:
|
|
|
|
- `BI1` und `SAGE` bleiben auf direktem HANA-Zugriff
|
|
- `SAP` laeuft separat ueber SAP Gateway / OData
|
|
- SAP-Quellen koennen gelesen, gejoint und auf das zentrale `SalesRecord`-Schema gemappt werden
|
|
- Standort-Exporte werden lokal als Excel geschrieben
|
|
- zusaetzlich werden Datensaetze in eine zentrale SQLite-Tabelle geschrieben
|
|
- ein konsolidierter Export liest aus dieser zentralen Tabelle
|
|
|
|
## H226 - Wichtigste umgesetzte Funktionen
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Wichtigste umgesetzte Funktionen
|
|
|
|
## H227 - 1. Zentrale Credentials pro Quellsystem
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 1. Zentrale Credentials pro Quellsystem
|
|
|
|
Es gibt zentrale Zugangsdaten in `ExportSettings` fuer:
|
|
|
|
- `SAP`
|
|
- `BI1`
|
|
- `SAGE`
|
|
|
|
Zusaetzlich gibt es pro Standort optionale Overrides:
|
|
|
|
- `UsernameOverride`
|
|
- `PasswordOverride`
|
|
|
|
Aufloesungsreihenfolge:
|
|
|
|
1. Standort-Override
|
|
2. zentrale Credentials des Quellsystems
|
|
3. bei HANA zusaetzlich Fallback auf alten `HanaServer.Username/Password`
|
|
|
|
## H228 - 2. SAP von BI1/HANA getrennt
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 2. SAP von BI1/HANA getrennt
|
|
|
|
`SAP` nutzt nicht mehr den HANA-Pfad, sondern eine eigene Gateway/OData-Strecke.
|
|
|
|
Pro SAP-Standort gibt es:
|
|
|
|
- `SapServiceUrl`
|
|
- `SapEntitySet`
|
|
- `SapEntitySetsCache`
|
|
- `SapEntitySetsRefreshedAtUtc`
|
|
|
|
Refresh der SAP-Quellen erfolgt nur auf Knopfdruck.
|
|
|
|
Beispiel Service URL:
|
|
|
|
```text
|
|
http://travt762.sap.trafag.com:8000/sap/opu/odata/sap/ZPOWERBI_EINKAUF_SRV/
|
|
```
|
|
|
|
Wichtig:
|
|
|
|
- Service URL immer nur bis zum Service
|
|
- Entity Set separat auswaehlen
|
|
|
|
## H229 - 3. SAP-Quellen, Joins und Feldmappings
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 3. SAP-Quellen, Joins und Feldmappings
|
|
|
|
Fuer SAP gibt es mehrere neue Modelle:
|
|
|
|
- `SapSourceDefinition`
|
|
- `SapJoinDefinition`
|
|
- `SapFieldMapping`
|
|
|
|
Unterstuetzt wird:
|
|
|
|
- mehrere SAP-Quellen pro Standort
|
|
- Alias pro Quelle
|
|
- Primaerquelle
|
|
- Join-Definitionen
|
|
- Mapping von `Alias.Feldname` auf zentrales Schema
|
|
|
|
UI-Erweiterungen:
|
|
|
|
- `Quellen refreshen`
|
|
- `Felder aus Quellen laden`
|
|
- Join-Key-Auswahl aus Metadaten
|
|
- `Auto-Match` fuer gleiche Feldnamen zwischen Primaerquelle und anderen Quellen
|
|
|
|
## H230 - 4. Zentrale Datenspeicherung
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 4. Zentrale Datenspeicherung
|
|
|
|
Neue Tabelle:
|
|
|
|
- `CentralSalesRecords`
|
|
|
|
Verwendung:
|
|
|
|
- pro Standort werden alte zentrale Saetze dieses Standorts ersetzt
|
|
- konsolidierte Excel liest aus `CentralSalesRecords`
|
|
|
|
Wichtig:
|
|
|
|
- zentrale Excel wird nicht appendet
|
|
- sie wird aus dem aktuellen Zustand der zentralen Tabelle neu erstellt
|
|
|
|
## H231 - 5. Exportpfade
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 5. Exportpfade
|
|
|
|
Neue Konfigurationsmoeglichkeiten:
|
|
|
|
Zentral in `Settings`:
|
|
|
|
- `LocalSiteExportFolder`
|
|
- `LocalConsolidatedExportFolder`
|
|
|
|
Pro Standort:
|
|
|
|
- `LocalExportFolderOverride`
|
|
|
|
Fallback wenn leer:
|
|
|
|
```text
|
|
./output
|
|
```
|
|
|
|
relativ zum App-Verzeichnis.
|
|
|
|
## H232 - 6. SharePoint
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 6. SharePoint
|
|
|
|
SharePoint-Upload ist optional.
|
|
|
|
Wenn keine vollstaendige SharePoint-Konfiguration vorhanden ist:
|
|
|
|
- Excel wird trotzdem lokal erzeugt
|
|
- kein Upload nach SharePoint
|
|
|
|
Benoetigte SharePoint-Werte:
|
|
|
|
- `Tenant ID`
|
|
- `Client ID`
|
|
- `Client Secret`
|
|
|
|
Das sind Entra App Registration Werte, nicht normale Benutzer-Credentials.
|
|
|
|
## H233 - 7. Config Import/Export
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 7. Config Import/Export
|
|
|
|
Es gibt JSON-Import/Export der Konfiguration mit Checkbox:
|
|
|
|
- mit Secrets
|
|
- ohne Secrets
|
|
|
|
Enthalten sind u. a.:
|
|
|
|
- SharePoint Config
|
|
- ExportSettings
|
|
- HanaServers
|
|
- Sites
|
|
- Transformation Rules
|
|
- SAP-Quellen
|
|
- SAP-Joins
|
|
- SAP-Mappings
|
|
|
|
## H234 - 8. Logging und Live-Status
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 8. Logging und Live-Status
|
|
|
|
Neue technische Logs ueber `AppEventLogs`.
|
|
|
|
Sichtbar:
|
|
|
|
- auf `/logs`
|
|
- im Dashboard als `Live-Status`
|
|
|
|
Geloggt werden u. a.:
|
|
|
|
- HANA-Query Start
|
|
- SAP Refresh
|
|
- SAP Reads
|
|
- Transformationen
|
|
- Excel-Erstellung
|
|
- zentrale Tabellenspeicherung
|
|
- Export erfolgreich / fehlgeschlagen
|
|
|
|
## H235 - 9. Excel oeffnen
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 9. Excel oeffnen
|
|
|
|
Im Dashboard gibt es neben `Export` den Button:
|
|
|
|
- `Excel oeffnen`
|
|
|
|
Dieser nutzt `ExportLogs.FilePath`.
|
|
|
|
Voraussetzungen:
|
|
|
|
- letzter Export erfolgreich
|
|
- `FilePath` gespeichert
|
|
- Datei existiert lokal
|
|
|
|
## H236 - 10. Management Cockpit
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 10. Management Cockpit
|
|
|
|
Es gibt einen neuen Menuepunkt:
|
|
|
|
- `Management Cockpit`
|
|
|
|
Funktion:
|
|
|
|
- Auswahl vorhandener Excel-Dateien
|
|
- Analyse einer exportierten Standort-Datei
|
|
- Kennzahlen fuer Geschaeftsinhaber / Management
|
|
|
|
Aktuell enthalten:
|
|
|
|
- Umsatz
|
|
- geschaetzte Kosten
|
|
- geschaetzte Marge
|
|
- Rechnungsanzahl
|
|
- Kundenanzahl
|
|
- Top Kunden
|
|
- Top Produktgruppen
|
|
- Top Sales Owner
|
|
- Datenqualitaetshinweise
|
|
- automatische Management-Aussagen
|
|
|
|
## H237 - 11. Manueller Excel-Import pro Standort
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 11. Manueller Excel-Import pro Standort
|
|
|
|
Es gibt jetzt einen vierten `SourceSystem`-Typ:
|
|
|
|
- `MANUAL_EXCEL`
|
|
|
|
Gedanke:
|
|
|
|
- Standort ohne Netz-/Systemanbindung liefert nur Excel
|
|
- Datei wird im Standort hochgeladen
|
|
- Export liest diese Datei statt SAP/HANA
|
|
- Daten werden in `CentralSalesRecords` fuer diesen Standort ersetzt
|
|
- der zentrale Export liest weiter nur aus `CentralSalesRecords`
|
|
|
|
Neue Site-Felder:
|
|
|
|
- `ManualImportFilePath`
|
|
- `ManualImportLastUploadedAtUtc`
|
|
|
|
Wichtig:
|
|
|
|
- das ist kein Excel-zu-Excel-Merge
|
|
- die App importiert ins zentrale Schema und erzeugt danach die zentrale Datei neu
|
|
|
|
## H238 - 12. Dashboard erweitert
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 12. Dashboard erweitert
|
|
|
|
Im Dashboard gibt es jetzt zusaetzlich:
|
|
|
|
- separaten Bereich `Zentrale Datei`
|
|
- `Excel oeffnen` fuer die neueste zentrale Datei `Sales_All_*.xlsx`
|
|
- Button `Alle exportieren`
|
|
- Button `Zentrale Datei neu erzeugen`
|
|
|
|
Bedeutung:
|
|
|
|
- `Alle exportieren` liest alle Quellen neu und erzeugt danach die zentrale Datei
|
|
- `Zentrale Datei neu erzeugen` schreibt nur aus `CentralSalesRecords` eine neue zentrale Excel
|
|
|
|
## H239 - 13. Management Cockpit Roh-Auswertung aus Zentraldaten
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 13. Management Cockpit Roh-Auswertung aus Zentraldaten
|
|
|
|
Zusaetzlich zur dateibasierten Cockpit-Analyse gibt es jetzt eine Roh-Auswertung direkt aus `CentralSalesRecords`.
|
|
|
|
Aktuell umgesetzt:
|
|
|
|
- Auswahl Jahr
|
|
- optional Auswahl Monat
|
|
- Jahresumsatz
|
|
- Monatsumsatz
|
|
- Tagesumsatz im gewaehlten Monat
|
|
- Umsatz nach Quelle
|
|
- Umsatz nach Land
|
|
- Periodenabdeckung / Zeilen / Rechnungen / Standorte / Laender / Waehrungen
|
|
|
|
Bewusst noch nicht enthalten:
|
|
|
|
- kein Intercompany-Filter
|
|
- keine CHF-Umrechnung
|
|
- kein Budgetvergleich
|
|
- keine Spartenlogik
|
|
- keine Gruppenlogik
|
|
- keine Margenlogik
|
|
|
|
## H240 - 14. Transformationssystem erweitert
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 14. Transformationssystem erweitert
|
|
|
|
Das Transformationssystem kann jetzt zwei Ebenen:
|
|
|
|
- `Value` fuer einfache feldweise Regeln aus der GUI
|
|
- `Record` fuer komplexere C#-Strategien per Strategy Pattern
|
|
|
|
Umgesetzt:
|
|
|
|
- neues Feld `RuleScope` auf `FieldTransformationRule`
|
|
- dynamischer Strategiekatalog
|
|
- GUI liest verfuegbare Typen aus dem Katalog
|
|
- erste `Record`-Strategie: `FirstNonEmpty`
|
|
|
|
Beispiel:
|
|
|
|
- `TargetField = CustomerName`
|
|
- `TransformationType = FirstNonEmpty`
|
|
- `Argument = CustomerName|SupplierName|Name`
|
|
|
|
## H241 - 15. Schema-Lookup fuer HANA-Standorte
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 15. Schema-Lookup fuer HANA-Standorte
|
|
|
|
Im Standortdialog fuer HANA-basierte Standorte gibt es jetzt:
|
|
|
|
- Button `Schemas laden`
|
|
- Lookup mit gueltigen Schemas aus HANA
|
|
|
|
Die Liste wird nicht blind aus allen Schemas gelesen, sondern auf typische B1-Schemas eingeschraenkt, in denen z. B. Tabellen wie
|
|
|
|
- `OINV`
|
|
- `INV1`
|
|
- `ORIN`
|
|
- `RIN1`
|
|
- `OCRD`
|
|
- `OITM`
|
|
|
|
vorhanden sind.
|
|
|
|
Wichtig:
|
|
|
|
- manuelle Eingabe bleibt moeglich
|
|
- fuer `BI1` und `SAGE` werden beim Lookup die effektiven Credentials inkl. zentraler Zugangsdaten / Overrides verwendet
|
|
- das reduziert Fehler wie `invalid schema name`
|
|
|
|
## H242 - 16. Testabdeckung ausgebaut
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### 16. Testabdeckung ausgebaut
|
|
|
|
Es gibt jetzt ein separates Testprojekt:
|
|
|
|
- `TrafagSalesExporter.Tests`
|
|
|
|
Automatisiert getestet werden aktuell:
|
|
|
|
- Transformationsstrategien
|
|
- `RecordTransformationService`
|
|
- `TransformationCatalog`
|
|
- `ManualExcelImportService`
|
|
- `ManagementCockpitService`
|
|
- `ConfigTransferService`
|
|
|
|
Wichtiger bereits gefundener Bug:
|
|
|
|
- deutsches Dezimalformat wie `1,50` wurde im manuellen Excel-Import falsch interpretiert
|
|
- Parsing wurde korrigiert
|
|
|
|
## H243 - Wichtige Dateien
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Wichtige Dateien
|
|
|
|
## H244 - Modelle
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Modelle
|
|
|
|
- `Models/Site.cs`
|
|
- `Models/ExportSettings.cs`
|
|
- `Models/ExportLog.cs`
|
|
- `Models/CentralSalesRecord.cs`
|
|
- `Models/SapSourceDefinition.cs`
|
|
- `Models/SapJoinDefinition.cs`
|
|
- `Models/SapFieldMapping.cs`
|
|
- `Models/ManagementCockpitModels.cs`
|
|
- `Models/ConfigTransferPackage.cs`
|
|
- `Models/FieldTransformationRule.cs`
|
|
|
|
## H245 - Services
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Services
|
|
|
|
- `Services/SiteExportService.cs`
|
|
- `Services/ConsolidatedExportService.cs`
|
|
- `Services/CentralSalesRecordService.cs`
|
|
- `Services/SapGatewayService.cs`
|
|
- `Services/SapCompositionService.cs`
|
|
- `Services/ConfigTransferService.cs`
|
|
- `Services/AppEventLogService.cs`
|
|
- `Services/ManagementCockpitService.cs`
|
|
- `Services/DatabaseInitializationService.cs`
|
|
- `Services/ExportOrchestrationService.cs`
|
|
- `Services/ManualExcelImportService.cs`
|
|
- `Services/TransformationCatalog.cs`
|
|
- `Services/RecordTransformationService.cs`
|
|
- `Services/TransformationStrategies.cs`
|
|
|
|
## H246 - UI
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### UI
|
|
|
|
- `Components/Pages/Standorte.razor`
|
|
- `Components/Pages/Settings.razor`
|
|
- `Components/Pages/Dashboard.razor`
|
|
- `Components/Pages/Logs.razor`
|
|
- `Components/Pages/ManagementCockpit.razor`
|
|
- `Components/Pages/Transformations.razor`
|
|
- `Components/Layout/NavMenu.razor`
|
|
|
|
## H247 - Tests
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Tests
|
|
|
|
- `TrafagSalesExporter.Tests/TransformationStrategiesTests.cs`
|
|
- `TrafagSalesExporter.Tests/RecordTransformationServiceTests.cs`
|
|
- `TrafagSalesExporter.Tests/TransformationCatalogTests.cs`
|
|
- `TrafagSalesExporter.Tests/ManualExcelImportServiceTests.cs`
|
|
- `TrafagSalesExporter.Tests/ManagementCockpitServiceTests.cs`
|
|
- `TrafagSalesExporter.Tests/ConfigTransferServiceTests.cs`
|
|
|
|
## H248 - Datenbank / Migrationen
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Datenbank / Migrationen
|
|
|
|
Viele Aenderungen laufen ueber `DatabaseInitializationService`.
|
|
|
|
Wichtige neue oder erweiterte Tabellen/Felder:
|
|
|
|
- `Sites`
|
|
- `UsernameOverride`
|
|
- `PasswordOverride`
|
|
- `SapServiceUrl`
|
|
- `SapEntitySet`
|
|
- `SapEntitySetsCache`
|
|
- `SapEntitySetsRefreshedAtUtc`
|
|
- `LocalExportFolderOverride`
|
|
- `ManualImportFilePath`
|
|
- `ManualImportLastUploadedAtUtc`
|
|
- `ExportSettings`
|
|
- zentrale SAP/BI1/SAGE Credentials
|
|
- `LocalSiteExportFolder`
|
|
- `LocalConsolidatedExportFolder`
|
|
- `DebugLoggingEnabled`
|
|
- `FieldTransformationRules`
|
|
- `RuleScope`
|
|
- `ExportLogs`
|
|
- `FilePath`
|
|
- neue Tabellen:
|
|
- `AppEventLogs`
|
|
- `CentralSalesRecords`
|
|
- SAP-Konfigtabellen
|
|
|
|
## H249 - Letztes Hauptproblem und Loesung
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Letztes Hauptproblem und Loesung
|
|
|
|
## H250 - Export hing nach zentraler Speicherung
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
### Export hing nach zentraler Speicherung
|
|
|
|
Der Export blieb zuletzt nach
|
|
|
|
- `Zentrale Tabelle: 20106 Datensaetze gespeichert.`
|
|
|
|
haengen.
|
|
|
|
Die eigentliche Ursache war am Ende nicht mehr der Batch-Insert selbst, sondern ein kaputter SQLite-Schemazustand:
|
|
|
|
- mindestens eine Tabelle referenzierte per FK noch `main.Sites_old`
|
|
- dadurch scheiterte `SaveChangesAsync()` spaeter beim Schreiben in `AppEventLogs` oder `ExportLogs`
|
|
- die alte Tabelle `Sites_old` existierte nicht mehr
|
|
|
|
Beobachteter Fehler:
|
|
|
|
- `SQLite Error 1: 'no such table: main.Sites_old'`
|
|
|
|
## H251 - Umgesetzte Korrekturen
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Umgesetzte Korrekturen
|
|
|
|
- `Components/Pages/Dashboard.razor`
|
|
- Live-Status pollt waehrend laufendem Export nicht mehr permanent `AppEventLogs`
|
|
- stattdessen Anzeige ueber den In-Memory-Status aus `ExportOrchestrationService`
|
|
- `Program.cs`
|
|
- SQLite `Default Timeout` von `10` auf `60` erhoeht
|
|
- `Services/CentralSalesRecordService.cs`
|
|
- nach abgeschlossenem Batch-Insert wird explizit `Zentrale Tabelle aktualisiert` gesetzt
|
|
- `Services/DatabaseInitializationService.cs`
|
|
- automatische Reparaturlogik fuer Tabellen, deren `CREATE TABLE`-SQL noch `Sites_old` referenziert
|
|
- betroffene Tabellen werden beim Start neu aufgebaut und Daten rueberkopiert
|
|
|
|
Danach wurde der Export erfolgreich getestet und geht jetzt wieder durch.
|
|
|
|
## H252 - Was bei einer naechsten Stoerung zuerst zu pruefen ist
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Was bei einer naechsten Stoerung zuerst zu pruefen ist
|
|
|
|
1. Tritt beim App-Start die Schema-Reparatur sauber durch?
|
|
2. Gibt es noch weitere Tabellen mit FK-Referenz auf `Sites_old`?
|
|
3. Erst danach wieder Insert-/Commit-Batches der zentralen Speicherung untersuchen
|
|
|
|
## H253 - Build-Status
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Build-Status
|
|
|
|
Letzter Build:
|
|
|
|
```text
|
|
dotnet build TrafagSalesExporter.sln
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
- erfolgreich
|
|
- bekannte Warnungen bleiben:
|
|
- SAP HANA Architekturwarnung `MSB3270`
|
|
- MudBlazor Analyzer `Dense`
|
|
|
|
## H254 - Nachtrag 2026-04-17 UI-Klarstellung HANA vs. SAP
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-04-17 UI-Klarstellung HANA vs. SAP
|
|
|
|
- `Components/Pages/Standorte.razor`
|
|
- Bereich oben heisst jetzt bewusst `Zentrale HANA-Technik`
|
|
- Hinweistext stellt klar: dort erscheinen nur Quellsysteme mit Anschlussart `HANA`
|
|
- `SAP` wird zentral unter `Settings -> Quellsysteme` gepflegt und gehoert nicht in diese Box
|
|
- der irrefuehrende Button `Server hinzufuegen` wurde entfernt
|
|
- neue HANA-Zeilen entstehen aus den Quellsystem-Stammdaten, nicht mehr aus einer zweiten UI-Erfassung
|
|
- Dialogtitel fuer HANA wurde auf reine Bearbeitung der zentralen Technik reduziert
|
|
|
|
Fachliche Regel jetzt:
|
|
|
|
- `Quellsysteme` verwalten die zentralen Systeme und deren Anschlussart
|
|
- `Standorte` zeigen fuer HANA nur noch die technische Zentralverbindung
|
|
- `SAP` wird nicht mehr implizit in der HANA-Box erwartet
|
|
|
|
## H255 - Nachtrag 2026-04-17 Pruefung Config-Import/Export
|
|
|
|
Quelle: HANDOFF_2026-04-15.md.raw
|
|
|
|
## Nachtrag 2026-04-17 Pruefung Config-Import/Export
|
|
|
|
Der aktuelle Config-Transfer wurde nach den Umbauten nochmals geprueft.
|
|
|
|
Status:
|
|
|
|
- Das aktuelle Import-/Exportformat passt zum neuen Modell.
|
|
- `SourceSystemDefinitions` werden mit `ConnectionKind`, `CentralServiceUrl`, `CentralUsername`, `CentralPassword` importiert/exportiert.
|
|
- `HanaServers` enthalten nur noch technische HANA-Verbindungsdaten und keine Credentials mehr.
|
|
- Standort-Overrides fuer Username/Password sowie SAP Service URL gehen weiterhin mit.
|
|
- Die vorhandenen `ConfigTransferServiceTests` laufen grün.
|
|
|
|
Weiterhin offene Architekturpunkte:
|
|
|
|
- `ConfigTransferService.ImportJsonAsync` ist weiterhin destruktiv und nicht atomar.
|
|
- Erst werden bestehende Daten geloescht, danach wird in mehreren Schritten neu aufgebaut.
|
|
- Wenn der Import in der Mitte scheitert, bleibt ein teilweiser Zustand zurueck.
|
|
- Altformat-Risiko bei `ConnectionKind`:
|
|
- Wenn ein aelteres JSON bereits `SourceSystemDefinitions` enthaelt, aber noch ohne `ConnectionKind`, faellt der DTO-Default auf `HANA`.
|
|
- Dadurch koennte ein altes `SAP` beim Import falsch als `HANA` landen.
|
|
|
|
Fazit:
|
|
|
|
- Fuer Exporte aus dem aktuellen Stand ist der Config-Transfer konsistent.
|
|
- Fuer aeltere JSON-Staende braucht der Import noch eine explizite Migrations-/Fallback-Logik.
|
|
|
|
## H256 - TrafagSalesExporter LLM System Guide
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
# TrafagSalesExporter LLM System Guide
|
|
|
|
Stand: 2026-05-05
|
|
|
|
RAG-Hinweis: Fuer minimale Kontextladung zuerst `docs/RAG_ROUTER.md` lesen. Danach standardmaessig nur die passende Kurzdatei unter `docs/rag/` laden; Original-MDs nur bei Detail-/Auditbedarf.
|
|
|
|
## H257 - Aktueller Projektstand 2026-05-05
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Aktueller Projektstand 2026-05-05
|
|
|
|
Fuer den aktuellen Finance-/Laenderabgleich zuerst diese Dateien lesen:
|
|
|
|
- [HANDOFF_2026-04-15.md](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/HANDOFF_2026-04-15.md)
|
|
- [NEXT_STEPS_2026-04-15.md](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/NEXT_STEPS_2026-04-15.md)
|
|
- [lastchange.md](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/lastchange.md)
|
|
- [SAGE_SPAIN_EXPORT_2026-05-05.md](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/SAGE_SPAIN_EXPORT_2026-05-05.md)
|
|
|
|
Lokaler FinanceProbe:
|
|
|
|
```text
|
|
http://localhost:55417/finance
|
|
```
|
|
|
|
## H258 - Aktueller Zusatzstand 2026-05-07 SAP OData / ZSCHWEIZ
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Aktueller Zusatzstand 2026-05-07 SAP OData / ZSCHWEIZ
|
|
|
|
Schweiz/Oesterreich werden ueber eine neue SAP-Tabelle `ZSCHWEIZ` bereitgestellt.
|
|
|
|
Wichtige Punkte:
|
|
|
|
- ABAP-Report: `report.abap`
|
|
- SAP-Tabelle: `ZSCHWEIZ`
|
|
- OData EntitySet: `ZSCHWEIZSet`
|
|
- App-Standort: `ZSCHWEIZ` / `Schweiz/Oesterreich`
|
|
- Geplanter App-Pfad: `SAP` = `SAP OData`, nicht direkter HANA-Spezialcode
|
|
|
|
Quellsystem-Codes:
|
|
|
|
- `SAP`: SAP OData/Gateway, DisplayName `SAP OData`
|
|
- `SAP_HANA`: direkte HANA-Tabellen/Views, DisplayName `SAP HANA Tables/Views`
|
|
- `BI1`: HANA
|
|
- `SAGE`: HANA
|
|
- `MANUAL_EXCEL`: Excel/CSV
|
|
|
|
Mapper:
|
|
|
|
- SAP OData nutzt `SapSourceDefinition`, `SapJoinDefinition`, `SapFieldMapping`.
|
|
- Direkte HANA-Tabellen/Views koennen dieselben Mapping-Tabellen ebenfalls nutzen.
|
|
- Gemeinsame Mapping-Engine ist `MappedSalesRecordComposer`.
|
|
- `SapCompositionService` und `HanaQueryService.GetMappedSalesRecordsAsync` unterscheiden sich nur noch in der Quellenbeschaffung; Join und `SalesRecord`-Mapping sind zentral.
|
|
- Bei HANA mit gepflegten Quellen/Mappings nutzt `HanaDataSourceAdapter` den generischen Mapping-Pfad.
|
|
- Ohne HANA-Mapping bleibt der alte B1-HANA-Standardpfad fuer `OINV/INV1/ORIN/RIN1` aktiv.
|
|
|
|
Finance-Konfiguration:
|
|
|
|
- `FinanceReferences` enthaelt Soll-/check.xlsx-Referenzen.
|
|
- `FinanceIntercompanyRules` enthaelt 2nd-party/IC-Regeln.
|
|
- Budgetkurse werden als `CurrencyExchangeRates` mit `Notes = Budget 2025` gepflegt.
|
|
- Config-Export/-Import umfasst Finance-Referenzen und IC-Regeln.
|
|
|
|
ZSCHWEIZ-Seed:
|
|
|
|
- Quelle Alias `Z`
|
|
- EntitySet `ZSCHWEIZSet`
|
|
- Mapping auf `SalesRecord` ist vorbefuellt und grafisch editierbar.
|
|
- Beim App-Start wird die ZSCHWEIZ-Quelle samt Feldmapping per Upsert angelegt oder repariert.
|
|
- Wenn Gateway `$metadata` liefert, koennen Felder in der UI per `Felder aus Quellen laden` gelesen werden.
|
|
|
|
ABAP-Fachlogik:
|
|
|
|
- `BUKRS 1100` = Schweiz, `TSC TRCH`, `LAND1 CH`
|
|
- `BUKRS 1200` = Oesterreich, `TSC TRAT`, `LAND1 AT`
|
|
- `CUSTOMER_LAND` = Kundenland aus `KNA1-LAND1`
|
|
- Netto-/Steuerwerte werden in Belegwaehrung und Hauswaehrung geschrieben.
|
|
|
|
Aktuelle FinanceProbe-Funktionen:
|
|
|
|
- `Meeting Ampel 2025` fuer alle Laender aus `check.xlsx`
|
|
- `Detail alle Laender`
|
|
- `Spain CSV direct check`
|
|
- `Germany Excel sample check`
|
|
|
|
Spanien:
|
|
|
|
- Datei: `sagespain/v2/Spain_Sales_2025.csv`
|
|
- Ist: `3'082'320.18` EUR
|
|
- Soll: `3'102'333.61`
|
|
- Differenz: `-20'013.43`
|
|
- Status: Gelb / Pruefen
|
|
- Technisch lesbar, fachliche Differenz noch offen
|
|
|
|
Deutschland:
|
|
|
|
- Datei: `DE_Beispiel_Export_Daten.xlsx`
|
|
- Sample-Summe `NettoPreisGesamtX`: `8'290.70` EUR
|
|
- Nur Beispielfile, keine finale Jahreszahl
|
|
- Mapping technisch verstanden, finaler DE-Jahresfile fehlt
|
|
|
|
Letzte Verifikation:
|
|
|
|
- `dotnet build .\Tools\FinanceProbe\FinanceProbe.csproj --verbosity minimal --no-restore`
|
|
- `dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --verbosity minimal --no-restore`
|
|
- Ergebnis: Build OK, Tests `50/50`, FinanceProbe `HTTP 200`
|
|
|
|
Diese Datei ist fuer andere LLMs gedacht, die das Projekt schnell verstehen und daraus Architekturtexte, Visualisierungen, Ablaufdiagramme oder UI-/Datenflussgrafiken erzeugen sollen.
|
|
|
|
## H259 - Zweck des Systems
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Zweck des Systems
|
|
|
|
`TrafagSalesExporter` ist eine Blazor Server App auf `.NET 8`, die Verkaufsdaten aus mehreren Quellsystemen in ein gemeinsames Zielschema ueberfuehrt.
|
|
|
|
Quellsysteme:
|
|
|
|
- `HANA`-basierte Systeme wie `BI1` und `SAGE`
|
|
- `SAP_GATEWAY` ueber OData
|
|
- `MANUAL_EXCEL` aus hochgeladenen oder referenzierten Excel-Dateien
|
|
|
|
Zielbild:
|
|
|
|
- jede Quelle wird in `SalesRecord` normalisiert
|
|
- Standortdaten koennen lokal als Excel exportiert werden
|
|
- alle Datensaetze werden in `CentralSalesRecords` gespeichert
|
|
- eine zentrale konsolidierte Datei wird aus dem zentralen Datenbestand erzeugt
|
|
- ein `Management Cockpit` analysiert sowohl exportierte Dateien als auch zentrale Rohdaten
|
|
|
|
## H260 - Technologie-Stack
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Technologie-Stack
|
|
|
|
- UI: Blazor Server + MudBlazor
|
|
- Authentifizierung: ASP.NET Core Authentication/Authorization, produktiv Windows Authentication / Active Directory
|
|
- Datenbank: SQLite (`trafag_exporter.db`)
|
|
- Excel lesen/schreiben: ClosedXML
|
|
- SAP HANA Zugriff: `Sap.Data.Hana.Core.v2.1.dll`
|
|
- SAP Gateway / OData: eigener Service ueber HTTP
|
|
- SharePoint Upload/Download: Microsoft Graph + Azure Identity
|
|
- Tests: xUnit
|
|
|
|
## H261 - Einstiegspunkte
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Einstiegspunkte
|
|
|
|
Wichtige Dateien:
|
|
|
|
- [Program.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Program.cs)
|
|
- [Data/AppDbContext.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Data/AppDbContext.cs)
|
|
- [Components/Layout/NavMenu.razor](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Components/Layout/NavMenu.razor)
|
|
|
|
`Program.cs` registriert fast die komplette Architektur ueber DI und fuehrt beim Start `DatabaseInitializationService.InitializeAsync()` aus.
|
|
|
|
Zusaetzlich registriert `Program.cs` den Zugriffsschutz:
|
|
|
|
- `AddCascadingAuthenticationState`
|
|
- Windows Authentication fuer produktive Umgebungen
|
|
- Development-Authentication-Handler nur bei `ASPNETCORE_ENVIRONMENT=Development` und `Security:DevelopmentBypass=true`
|
|
- globale Fallback-Policy fuer authentifizierte/berechtigte User
|
|
- Policy `AdminOnly` fuer administrative Seiten
|
|
|
|
## H262 - Hauptseiten
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Hauptseiten
|
|
|
|
Navigation:
|
|
|
|
- `/` Dashboard
|
|
- `/standorte`
|
|
- `/transformations`
|
|
- `/management-cockpit`
|
|
- `/settings`
|
|
- `/logs`
|
|
|
|
Dateien:
|
|
|
|
- [Components/Pages/Dashboard.razor](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Components/Pages/Dashboard.razor)
|
|
- [Components/Pages/Standorte.razor](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Components/Pages/Standorte.razor)
|
|
- [Components/Pages/Transformations.razor](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Components/Pages/Transformations.razor)
|
|
- [Components/Pages/ManagementCockpit.razor](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Components/Pages/ManagementCockpit.razor)
|
|
- [Components/Pages/Settings.razor](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Components/Pages/Settings.razor)
|
|
- [Components/Pages/Logs.razor](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Components/Pages/Logs.razor)
|
|
|
|
Kurzrollen:
|
|
|
|
- `Dashboard`: Einzel-Export, Alle exportieren, zentrale Datei neu erzeugen, Live-Status
|
|
- `Standorte`: Standortpflege, zentrale HANA-Technik, SAP-Konfiguration pro Standort, manueller Excel-Import
|
|
- `Transformations`: feldweise und record-basierte Regeln
|
|
- `Management Cockpit`: Dateianalyse und Rohanalyse aus `CentralSalesRecords`
|
|
- `Settings`: SharePoint, Exportpfade, Quellsysteme, Wechselkurse, Config Import/Export
|
|
- `Logs`: technische Ereignisprotokolle
|
|
|
|
Security:
|
|
|
|
- alle Routen erfordern Authentifizierung
|
|
- `Settings`, `Standorte` und `Transformations` sind `AdminOnly`
|
|
- Admin-Navigation wird nur fuer Admins angezeigt
|
|
- eingeloggter Benutzer wird im App-Bar angezeigt
|
|
|
|
## H263 - Kernmodelle
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Kernmodelle
|
|
|
|
Wichtige Entity-Klassen:
|
|
|
|
- [Models/Site.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Models/Site.cs)
|
|
- [Models/SourceSystemDefinition.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Models/SourceSystemDefinition.cs)
|
|
- [Models/HanaServer.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Models/HanaServer.cs)
|
|
- [Models/SalesRecord.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Models/SalesRecord.cs)
|
|
- [Models/CentralSalesRecord.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Models/CentralSalesRecord.cs)
|
|
- [Models/FieldTransformationRule.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Models/FieldTransformationRule.cs)
|
|
- [Models/SapSourceDefinition.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Models/SapSourceDefinition.cs)
|
|
- [Models/SapJoinDefinition.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Models/SapJoinDefinition.cs)
|
|
- [Models/SapFieldMapping.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Models/SapFieldMapping.cs)
|
|
- [Models/SharePointConfig.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Models/SharePointConfig.cs)
|
|
- [Models/ExportSettings.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Models/ExportSettings.cs)
|
|
- [Models/ExportLog.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Models/ExportLog.cs)
|
|
- [Models/AppEventLog.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Models/AppEventLog.cs)
|
|
- [Models/CurrencyExchangeRate.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Models/CurrencyExchangeRate.cs)
|
|
|
|
`SalesRecord` / `CentralSalesRecord` enthalten neben den positionsnahen Feldern auch B1-Belegwaehrungsfelder:
|
|
|
|
- `DocumentCurrency` aus `DocCur`
|
|
- `DocumentTotalForeignCurrency` aus `DocTotalFC`
|
|
- `DocumentTotalLocalCurrency` aus `DocTotal`
|
|
- `VatSumForeignCurrency` aus `VatSumFC`
|
|
- `VatSumLocalCurrency` aus `VatSum`
|
|
- `DocumentRate` aus `DocRate`
|
|
- `CompanyCurrency` aus `OADM.MainCurncy`
|
|
|
|
Wichtig: diese Dokumentwerte sind Belegkopfwerte und werden in der positionsbasierten Excel pro Position wiederholt. Fuer Belegkopfsummen muessen Auswertungen nach Beleg deduplizieren.
|
|
|
|
Wichtige Relationen:
|
|
|
|
- `Site -> HanaServer` optional
|
|
- `Site -> SapSourceDefinitions`
|
|
- `Site -> SapJoinDefinitions`
|
|
- `Site -> SapFieldMappings`
|
|
- `Site -> CentralSalesRecords`
|
|
- `SourceSystemDefinition` ist zentrale Stammdatenquelle fuer Quellsysteme
|
|
|
|
## H264 - Datenbanktabellen
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Datenbanktabellen
|
|
|
|
`AppDbContext` enthaelt:
|
|
|
|
- `HanaServers`
|
|
- `SourceSystemDefinitions`
|
|
- `Sites`
|
|
- `SharePointConfigs`
|
|
- `ExportSettings`
|
|
- `ExportLogs`
|
|
- `AppEventLogs`
|
|
- `FieldTransformationRules`
|
|
- `CurrencyExchangeRates`
|
|
- `SapSourceDefinitions`
|
|
- `SapJoinDefinitions`
|
|
- `SapFieldMappings`
|
|
- `CentralSalesRecords`
|
|
|
|
## H265 - Architekturrollen der Services
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Architekturrollen der Services
|
|
|
|
## H266 - Export / Orchestrierung
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
### Export / Orchestrierung
|
|
|
|
- [Services/ExportOrchestrationService.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/ExportOrchestrationService.cs)
|
|
- [Services/SiteExportService.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/SiteExportService.cs)
|
|
- [Services/ConsolidatedExportService.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/ConsolidatedExportService.cs)
|
|
- [Services/CentralSalesRecordService.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/CentralSalesRecordService.cs)
|
|
- [Services/ExportLogService.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/ExportLogService.cs)
|
|
|
|
Rollen:
|
|
|
|
- `ExportOrchestrationService` steuert UI-nahe Exportlaeufe und Live-Status
|
|
- `SiteExportService` entscheidet anhand des Quellsystems, wie ein Standort gelesen wird
|
|
- `CentralSalesRecordService` ersetzt zentrale Saetze pro Standort
|
|
- `ConsolidatedExportService` erzeugt die zentrale Datei
|
|
|
|
## H267 - Datenquellen
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
### Datenquellen
|
|
|
|
- [Services/HanaQueryService.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/HanaQueryService.cs)
|
|
- [Services/SapGatewayService.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/SapGatewayService.cs)
|
|
- [Services/SapCompositionService.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/SapCompositionService.cs)
|
|
- [Services/ManualExcelImportService.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/ManualExcelImportService.cs)
|
|
- [Services/SharePointUploadService.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/SharePointUploadService.cs)
|
|
|
|
Rollen:
|
|
|
|
- `HanaQueryService`: SQL gegen SAP B1/HANA-nahe Schemata
|
|
- `SapGatewayService`: OData-Metadaten und Reads
|
|
- `SapCompositionService`: Mehrquellen-/Join-/Mapping-Aufbau fuer SAP
|
|
- `ManualExcelImportService`: Import im Exportformat aus `.xlsx`
|
|
- `SharePointUploadService`: Upload fuer Exportdateien und Download fuer manuelle Excel-Dateien
|
|
|
|
## H268 - Transformation / Mapping
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
### Transformation / Mapping
|
|
|
|
- [Services/TransformationCatalog.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/TransformationCatalog.cs)
|
|
- [Services/TransformationStrategies.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/TransformationStrategies.cs)
|
|
- [Services/RecordTransformationService.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/RecordTransformationService.cs)
|
|
- [Services/CurrencyExchangeRateService.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/CurrencyExchangeRateService.cs)
|
|
- [Services/ExchangeRateImportService.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/ExchangeRateImportService.cs)
|
|
|
|
Rollen:
|
|
|
|
- `Value`-Transformationen fuer einzelne Felder
|
|
- `Record`-Transformationen fuer zeilenweite Regeln
|
|
- Wechselkursimport und -umrechnung
|
|
|
|
## H269 - Reporting / Monitoring / Infrastruktur
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
### Reporting / Monitoring / Infrastruktur
|
|
|
|
- [Services/ManagementCockpitService.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/ManagementCockpitService.cs)
|
|
- [Services/AppEventLogService.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/AppEventLogService.cs)
|
|
- [Services/ConfigTransferService.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/ConfigTransferService.cs)
|
|
- [Services/DatabaseInitializationService.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/DatabaseInitializationService.cs)
|
|
- [Services/TimerBackgroundService.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/TimerBackgroundService.cs)
|
|
|
|
## H270 - Der wichtigste technische Ablauf
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Der wichtigste technische Ablauf
|
|
|
|
## H271 - 1. Standort-Export
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
### 1. Standort-Export
|
|
|
|
Pfad:
|
|
|
|
`Dashboard/Standorte -> ExportOrchestrationService -> SiteExportService`
|
|
|
|
`SiteExportService` unterscheidet drei Modi:
|
|
|
|
1. `SAP_GATEWAY`
|
|
- SAP-Quellen lesen
|
|
- SAP-Joins anwenden
|
|
- SAP-Feldmappings auf `SalesRecord`
|
|
- Transformationen anwenden
|
|
- Standort-Excel erzeugen
|
|
- `CentralSalesRecords` ersetzen
|
|
- optional SharePoint-Upload
|
|
|
|
2. `HANA`
|
|
- effektive zentrale HANA-Konfiguration laden
|
|
- optionale Standort-Credential-Overrides anwenden
|
|
- SQL in HANA ausfuehren
|
|
- `SalesRecord` erzeugen
|
|
- Transformationen anwenden
|
|
- Standort-Excel erzeugen
|
|
- `CentralSalesRecords` ersetzen
|
|
- optional SharePoint-Upload
|
|
|
|
3. `MANUAL_EXCEL`
|
|
- `ManualImportFilePath` auswerten
|
|
- wenn lokal/UNC vorhanden: lokal lesen
|
|
- wenn SharePoint-Referenz: via Graph temp herunterladen
|
|
- Excel in `SalesRecord` lesen
|
|
- Transformationen anwenden
|
|
- keine neue Standortdatei erzeugen, bestehende Excel dient als Eingabe
|
|
- `CentralSalesRecords` ersetzen
|
|
|
|
## H272 - 2. Konsolidierter Export
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
### 2. Konsolidierter Export
|
|
|
|
Pfad:
|
|
|
|
`Dashboard -> ExportOrchestrationService -> ConsolidatedExportService`
|
|
|
|
Semantik aktuell:
|
|
|
|
- die zentrale Datei basiert fachlich auf `CentralSalesRecords`
|
|
- `ExportAllAsync()` sammelt zwar auch `consolidatedRecords`, aber die zentrale Exportsemantik ist historisch noch nicht vollkommen bereinigt
|
|
|
|
## H273 - 3. Management Cockpit
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
### 3. Management Cockpit
|
|
|
|
Zwei Betriebsarten:
|
|
|
|
1. Dateibasiert
|
|
- vorhandene `.xlsx` waehlen
|
|
- Datei mit ClosedXML lesen
|
|
- Summenfeld waehlen
|
|
- Anzeige-Waehrung waehlen
|
|
- Kennzahlen, Top-Listen, Datenqualitaet, Findings erzeugen
|
|
|
|
2. Zentraldatenbasiert
|
|
- direkt aus `CentralSalesRecords`
|
|
- Jahr/Monat Filter
|
|
- Summenfeld waehlen
|
|
- optionale weitere Summenfelder fuer Zeitreihen waehlen
|
|
- Anzeige-Waehrung waehlen
|
|
- Rohsicht ohne Intercompany-, Budget- oder Spartelogik
|
|
|
|
Aktuelle Summenfelder:
|
|
|
|
- `Sales Price/Value`
|
|
- `Quantity`
|
|
- `Standard cost`
|
|
- `Quantity * Standard cost`
|
|
|
|
Aktuelle Anzeige-Waehrungen:
|
|
|
|
- `EUR`
|
|
- `USD`
|
|
- `Original`
|
|
|
|
Die Waehrungsumrechnung nutzt `CurrencyExchangeRateService`. Bei `Original` bleiben Werte in Quellwaehrungen gruppiert. Nicht-betragliche Summenfelder wie `Quantity` haben keine Waehrung. Fehlende Wechselkurse werden gezaehlt und in Hinweisen bzw. Findings sichtbar; betroffene Werte werden in der Zielwaehrung mit `0` einbezogen.
|
|
|
|
## H274 - Quellsystemlogik
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Quellsystemlogik
|
|
|
|
## H275 - SourceSystemDefinition
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
### SourceSystemDefinition
|
|
|
|
`SourceSystemDefinition` ist die fuehrende Wahrheit fuer:
|
|
|
|
- `Code`
|
|
- `DisplayName`
|
|
- `ConnectionKind`
|
|
- `IsActive`
|
|
- `CentralUsername`
|
|
- `CentralPassword`
|
|
- `CentralServiceUrl` fuer SAP
|
|
|
|
Anschlussarten:
|
|
|
|
- `HANA`
|
|
- `SAP_GATEWAY`
|
|
- `MANUAL_EXCEL`
|
|
|
|
## H276 - HANA
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
### HANA
|
|
|
|
Fachliche Logik:
|
|
|
|
- zentrale technische HANA-Konfiguration pro Quellsystem
|
|
- keine separaten Vollverbindungen pro Standort
|
|
- Standort speichert nur Fachdaten plus optionale Username-/Password-Overrides
|
|
|
|
Schema-Lookup:
|
|
|
|
- in `Standorte` gibt es jetzt `Schemas laden`
|
|
- Lookup fragt `sys.tables` in HANA ab
|
|
- eingeschraenkt auf typische B1-Schemas mit Tabellen wie `OINV`, `INV1`, `ORIN`, `RIN1`, `OCRD`, `OITM`
|
|
|
|
## H277 - SAP
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
### SAP
|
|
|
|
Fachliche Logik:
|
|
|
|
- zentrale SAP Service URL in `SourceSystemDefinition.CentralServiceUrl`
|
|
- Standort kann `SapServiceUrl` als Override pflegen
|
|
- pro Standort gibt es SAP-Quellen, Joins und Feldmappings
|
|
|
|
## H278 - Manual Excel
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
### Manual Excel
|
|
|
|
Fachliche Logik:
|
|
|
|
- `Site.ManualImportFilePath` kann sein:
|
|
- lokaler Windows-Pfad
|
|
- UNC-Pfad
|
|
- SharePoint-URL
|
|
- SharePoint-Pfad unterhalb der konfigurierten Site
|
|
- Standortdaten werden aus der Excel eingelesen und in `CentralSalesRecords` uebernommen
|
|
- SharePoint dient hier als Eingangsquelle, nicht nur als Exportziel
|
|
|
|
## H279 - Transformationen
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Transformationen
|
|
|
|
Das System unterscheidet:
|
|
|
|
- `Value`-Transformationen
|
|
- `Record`-Transformationen
|
|
|
|
Beispiele:
|
|
|
|
- `Copy`
|
|
- `Uppercase`
|
|
- `Lowercase`
|
|
- `Prefix`
|
|
- `Suffix`
|
|
- `Replace`
|
|
- `Constant`
|
|
- `NormalizeCurrencyCode`
|
|
- `FirstNonEmpty`
|
|
- `ConvertCurrency`
|
|
|
|
Technischer Ablauf:
|
|
|
|
- Regeln liegen in `FieldTransformationRules`
|
|
- `TransformationCatalog` meldet verfuegbare Strategien an die UI
|
|
- `RecordTransformationService` wendet record-basierte Strategien an
|
|
|
|
## H280 - Wechselkurse
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Wechselkurse
|
|
|
|
Vorhanden:
|
|
|
|
- `CurrencyExchangeRates`
|
|
- `ExchangeRateImportService` fuer ECB-Tageskurse
|
|
- `NormalizeCurrencyCode`
|
|
- `ConvertCurrency`
|
|
- `ManagementCockpitService` kann betragliche Cockpit-Kennzahlen in `EUR` oder `USD` umrechnen
|
|
|
|
Wichtig:
|
|
|
|
- die Rohsicht im `Management Cockpit` kann jetzt Anzeige-Waehrungen nutzen
|
|
- `CHF` ist im Cockpit aktuell nicht als direkte Anzeige-Waehrung in der UI angeboten
|
|
- CHF bleibt weiterhin Teil des allgemeinen Transformationssystems
|
|
- fachlich ist noch zu klaeren, ob CHF als Standard- oder zusaetzliche Cockpit-Anzeige-Waehrung gebraucht wird
|
|
|
|
## H281 - SharePoint-Rolle im Gesamtsystem
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## SharePoint-Rolle im Gesamtsystem
|
|
|
|
`SharePointConfig` enthaelt:
|
|
|
|
- `SiteUrl`
|
|
- `ExportFolder`
|
|
- `CentralExportFolder`
|
|
- `TenantId`
|
|
- `ClientId`
|
|
- `ClientSecret`
|
|
|
|
Verwendung:
|
|
|
|
- Upload von Standort-Exporten
|
|
- Upload der zentralen Datei
|
|
- Download von manuellen Excel-Dateien fuer `MANUAL_EXCEL`
|
|
|
|
Wichtig:
|
|
|
|
- die App arbeitet gegen dieselbe SharePoint-Site, die in `Settings` konfiguriert ist
|
|
- fuer `MANUAL_EXCEL` muessen Referenzen auf derselben Site aufloesbar sein
|
|
|
|
## H282 - Startinitialisierung / Migrationen
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Startinitialisierung / Migrationen
|
|
|
|
Kritische Datei:
|
|
|
|
- [Services/DatabaseInitializationService.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/DatabaseInitializationService.cs)
|
|
|
|
Aktuelle Rolle:
|
|
|
|
- `EnsureCreated`
|
|
- Schema-Ergaenzungen per `ALTER TABLE`
|
|
- Tabellen-Rebuilds bei Legacy-Schemas
|
|
- FK-Reparaturen
|
|
- Stammdaten-Seeding
|
|
- empfohlene Transformationsregeln
|
|
|
|
Bekannte Architekturrealitaet:
|
|
|
|
- das ist funktional hilfreich, aber kein sauberes Migrationssystem
|
|
- die Startlogik traegt produktive Schema-Reparaturverantwortung
|
|
- das ist einer der wichtigsten technischen Risikobloecke
|
|
|
|
Bereits gehaertete Fehlerbilder:
|
|
|
|
- kaputte FK-Referenzen auf `Sites_old`
|
|
- kaputte FK-Referenzen auf `HanaServers_repair_old`
|
|
- Legacy-Credential-Spalten in `ExportSettings`
|
|
- Legacy-Credential-Spalten in `HanaServers`
|
|
- verschobene Spalten im `Sites_old -> Sites`-Kopierpfad
|
|
|
|
## H283 - Authentifizierung / Autorisierung
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Authentifizierung / Autorisierung
|
|
|
|
Dateien:
|
|
|
|
- [Security/SecurityOptions.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Security/SecurityOptions.cs)
|
|
- [Security/SecurityPolicies.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Security/SecurityPolicies.cs)
|
|
- [Security/DevelopmentAuthenticationHandler.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Security/DevelopmentAuthenticationHandler.cs)
|
|
- [Components/Routes.razor](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Components/Routes.razor)
|
|
- [Components/Layout/NavMenu.razor](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Components/Layout/NavMenu.razor)
|
|
- [Components/Layout/MainLayout.razor](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Components/Layout/MainLayout.razor)
|
|
|
|
Produktives Ziel:
|
|
|
|
- Windows Authentication / Active Directory
|
|
- keine eigene Benutzerverwaltung
|
|
- Zugriff ueber AD-Gruppen
|
|
- Adminrechte ueber separate AD-Gruppe
|
|
|
|
Konfiguration in `appsettings.json`:
|
|
|
|
- `Security:AccessGroups`
|
|
- `Security:AdminGroups`
|
|
- `Security:DevelopmentBypass`
|
|
- `Security:DevelopmentUserIsAdmin`
|
|
- `Security:DevelopmentUserName`
|
|
|
|
Default-Gruppen:
|
|
|
|
- `TRAFAG\\TrafagSalesExporter-Users`
|
|
- `TRAFAG\\TrafagSalesExporter-Admins`
|
|
|
|
Development:
|
|
|
|
- `appsettings.Development.json` aktiviert einen lokalen Development-Auth-Handler
|
|
- dieser ist nur fuer lokale Entwicklung gedacht
|
|
- produktiv darf `ASPNETCORE_ENVIRONMENT` nicht `Development` sein
|
|
|
|
IIS-Betrieb:
|
|
|
|
- Windows Authentication aktivieren
|
|
- Anonymous Authentication deaktivieren
|
|
- AD-Gruppennamen in produktiver Konfiguration setzen
|
|
|
|
## H284 - Config Import / Export
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Config Import / Export
|
|
|
|
Dateien:
|
|
|
|
- [Services/ConfigTransferService.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Services/ConfigTransferService.cs)
|
|
- [Models/ConfigTransferPackage.cs](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/Models/ConfigTransferPackage.cs)
|
|
|
|
Aktueller Stand:
|
|
|
|
- JSON Export/Import fuer Konfiguration
|
|
- Secrets optional
|
|
- `SourceSystemDefinitions` im aktuellen Modell enthalten
|
|
- HANA-Technik ohne HANA-Credentials
|
|
- Standort-Overrides bleiben erhalten
|
|
|
|
Wichtige Punkte:
|
|
|
|
- Import laeuft jetzt transaktional
|
|
- alte `ConnectionKind`-lose Formate bekommen Fallbacks
|
|
- `CentralSalesRecords` werden nicht mehr blind geloescht
|
|
- bestehende zentrale Laufzeitdaten werden fuer weiterhin vorhandene Standorte remappt
|
|
|
|
## H285 - Logging
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Logging
|
|
|
|
Es gibt zwei Log-Ebenen:
|
|
|
|
- `ExportLogs` fuer fachliche Exporthistorie
|
|
- `AppEventLogs` fuer technische und UI-nahe Ereignisse
|
|
|
|
Die `Logs`-Seite liest vor allem `AppEventLogs`.
|
|
|
|
## H286 - Tests
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Tests
|
|
|
|
Testprojekt:
|
|
|
|
- [TrafagSalesExporter.Tests](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/TrafagSalesExporter.Tests)
|
|
|
|
Aktuell vorhandene Schwerpunkte:
|
|
|
|
- Transformationen
|
|
- Record-Transformationen
|
|
- TransformationCatalog
|
|
- CurrencyExchangeRateService
|
|
- ExchangeRateImportService
|
|
- ManualExcelImportService
|
|
- ManagementCockpitService
|
|
- ConfigTransferService
|
|
- DatabaseInitializationService
|
|
|
|
`ManagementCockpitServiceTests` decken inzwischen auch ab:
|
|
|
|
- zentrale Analyse nach Jahr/Monat
|
|
- Tages-, Monats-, Jahres-, Quellen- und Laenderwerte
|
|
- waehlbare Summenfelder
|
|
- Waehrungsumrechnung in EUR
|
|
- Wechselkurs-Caching
|
|
- Mengen-Auswertung ohne Waehrungsumrechnung
|
|
- Zusatz-Summenfelder in Zeitreihen
|
|
|
|
`SecurityPolicyFactoryTests` decken inzwischen ab:
|
|
|
|
- App-Zugriff fuer User in `AccessGroups`
|
|
- Ablehnung fuer User ausserhalb der Access-Gruppen
|
|
- Development-Auth-Zugriff im lokalen Modus
|
|
- Admin-Zugriff fuer User in `AdminGroups`
|
|
- Ablehnung normaler User fuer `AdminOnly`
|
|
- Development-Admin-Claim
|
|
|
|
`CentralSalesRecordServiceTests` decken inzwischen ab:
|
|
|
|
- Persistenz und Ruecklesen der B1-Belegwaehrungsfelder in `CentralSalesRecords`
|
|
|
|
Wichtig:
|
|
|
|
- es gibt aktuell keine echten UI-Komponententests mit `bUnit`
|
|
- es gibt keine Browser-E2E-Tests mit `Playwright`
|
|
- viele Button-Aktionen sind nur indirekt ueber Services und Persistenz getestet
|
|
|
|
## H287 - Bekannte offene Architekturfragen
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Bekannte offene Architekturfragen
|
|
|
|
Fuer andere LLMs wichtig, damit Visualisierungen nicht zu glatt oder zu idealisiert werden:
|
|
|
|
1. `DatabaseInitializationService` ist ein produktiver Reparatur-/Migrationslayer, nicht nur Bootstrap.
|
|
2. `Settings.razor` und `Standorte.razor` enthalten weiterhin relativ viel Anwendungslogik.
|
|
3. Die Semantik der konsolidierten Datei ist historisch teilweise doppelt angelegt.
|
|
4. Das `Management Cockpit` ist noch kein voll generalisierter Reporting-Layer.
|
|
5. SharePoint ist sowohl Exportziel als auch bei `MANUAL_EXCEL` mittlerweile moegliche Eingangsquelle.
|
|
|
|
## H288 - Empfohlene Diagramme fuer andere LLMs
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Empfohlene Diagramme fuer andere LLMs
|
|
|
|
## H289 - 1. Kontextdiagramm
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
### 1. Kontextdiagramm
|
|
|
|
Zeige:
|
|
|
|
- Benutzer
|
|
- Blazor App
|
|
- SQLite
|
|
- SAP HANA
|
|
- SAP Gateway
|
|
- lokale Dateisystempfade
|
|
- SharePoint
|
|
|
|
## H290 - 2. Komponenten-/Service-Diagramm
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
### 2. Komponenten-/Service-Diagramm
|
|
|
|
Gruppiere:
|
|
|
|
- UI
|
|
- Orchestrierung
|
|
- Quelladapter
|
|
- Transformation
|
|
- Persistenz
|
|
- Reporting
|
|
|
|
## H291 - 3. Datenflussdiagramm pro Quelltyp
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
### 3. Datenflussdiagramm pro Quelltyp
|
|
|
|
Je ein separater Flow fuer:
|
|
|
|
- HANA
|
|
- SAP Gateway
|
|
- Manual Excel lokal
|
|
- Manual Excel SharePoint
|
|
|
|
## H292 - 4. ER-Diagramm
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
### 4. ER-Diagramm
|
|
|
|
Fokussiere auf:
|
|
|
|
- `SourceSystemDefinition`
|
|
- `HanaServer`
|
|
- `Site`
|
|
- `SapSourceDefinition`
|
|
- `SapJoinDefinition`
|
|
- `SapFieldMapping`
|
|
- `CentralSalesRecord`
|
|
- `FieldTransformationRule`
|
|
|
|
## H293 - 5. Sequenzdiagramm fuer Export
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
### 5. Sequenzdiagramm fuer Export
|
|
|
|
Wichtige Stationen:
|
|
|
|
- Dashboard
|
|
- ExportOrchestrationService
|
|
- SiteExportService
|
|
- spezifischer Quellservice
|
|
- Transformation
|
|
- CentralSalesRecordService
|
|
- Excel/SharePoint
|
|
- ExportLog/AppEventLog
|
|
|
|
## H294 - Prompt-Vorlage fuer ein anderes LLM
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Prompt-Vorlage fuer ein anderes LLM
|
|
|
|
Wenn ein anderes LLM daraus Visualisierungen erzeugen soll, funktioniert diese Anweisung gut:
|
|
|
|
> Lies `LLM_SYSTEM_GUIDE.md` als primaeren Systemkontext. Erzeuge daraus ein Architekturdiagramm, ein Datenflussdiagramm fuer HANA/SAP/MANUAL_EXCEL, ein ER-Diagramm der wichtigsten Tabellen und ein Sequenzdiagramm fuer `ExportAsync`. Achte darauf, dass `DatabaseInitializationService` produktive Reparaturlogik enthaelt und dass `MANUAL_EXCEL` sowohl lokal als auch ueber SharePoint gelesen werden kann.
|
|
|
|
## H295 - Weitere Kontextdateien
|
|
|
|
Quelle: LLM_SYSTEM_GUIDE.md.raw
|
|
|
|
## Weitere Kontextdateien
|
|
|
|
Zusatzkontext fuer Verlauf und Risiken:
|
|
|
|
- [HANDOFF_2026-04-15.md](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/HANDOFF_2026-04-15.md)
|
|
- [NEXT_STEPS_2026-04-15.md](C:/Users/koi/source/repos/Ai/TrafagSalesExporter/NEXT_STEPS_2026-04-15.md)
|
|
|
|
Diese beiden Dateien sind wichtig, wenn ein anderes LLM nicht nur Struktur, sondern auch historische Umbauten, Risiken und Prioritaeten verstehen soll.
|
|
|
|
## H296 - Finance Handoff 2026-05-18
|
|
|
|
Quelle: FINANCE_HANDOFF_2026-05-18.md.raw
|
|
|
|
# Finance Handoff 2026-05-18
|
|
|
|
Dieses Dokument fasst den aktuellen Stand der Finance-Abstimmung zusammen, damit die Arbeit ohne Wissensverlust fortgesetzt werden kann.
|
|
|
|
## H297 - Aktueller Stand
|
|
|
|
Quelle: FINANCE_HANDOFF_2026-05-18.md.raw
|
|
|
|
## Aktueller Stand
|
|
|
|
Testprogramm:
|
|
|
|
```text
|
|
http://127.0.0.1:5099/finance
|
|
```
|
|
|
|
Die App laeuft lokal auf `127.0.0.1:5099`. Der letzte Check der Seite ergab HTTP `200`.
|
|
|
|
Aktuelle Excel:
|
|
|
|
```text
|
|
docs/FINANCE_AMPEL_LAENDER_2026-05-18_21-27.xlsx
|
|
```
|
|
|
|
Aktuelle Cache-Dateien:
|
|
|
|
```text
|
|
docs/it_cache_2025.csv
|
|
docs/spain_cache_2025.csv
|
|
```
|
|
|
|
## H298 - Nachtrag 2026-05-19
|
|
|
|
Quelle: FINANCE_HANDOFF_2026-05-18.md.raw
|
|
|
|
## Nachtrag 2026-05-19
|
|
|
|
Nach diesem Handoff wurden noch vier relevante Schritte umgesetzt und committed:
|
|
|
|
1. Haupt-App-Finance-Vergleich an FinanceProbe angeglichen.
|
|
2. Leere Ist-Zeilen ohne belastbaren Ist-Wert aus dem Finance-Vergleich gefiltert.
|
|
3. Berechnungsformeln je Land dokumentiert.
|
|
4. Finance Cockpit mit separatem Login technisch geschuetzt; fachliche/produktive Abnahme noch offen.
|
|
|
|
Wichtige neue Doku:
|
|
|
|
```text
|
|
docs/FINANCE_BERECHNUNGSFORMELN_LAENDER_2026-05-19.md
|
|
```
|
|
|
|
Diese Datei beschreibt die aktuell verwendete Soll/Ist-Logik fuer `/finance-cockpit/vergleich` und `/finance`, inklusive Jahresfilter, Kandidatenberechnung, Deduplizierung, bevorzugter Ist-Variante und landesspezifischer Quellen/Formeln.
|
|
|
|
Neue Finance-Cockpit-Sperre, Stand technisch:
|
|
|
|
- `FinanceCockpitAccessService`
|
|
- `FinanceCockpitAccessOptions`
|
|
- `FinanceCockpitUnlockPanel`
|
|
- Konfiguration in `appsettings.json` unter `FinanceCockpitAccess`
|
|
- DI-Registrierung in `Program.cs`
|
|
- Route-/Navigation-Schutz in `Routes.razor` und `NavMenu.razor`
|
|
|
|
Wichtig: Der HR-KPI-Login bleibt separat. Die neue Sperre betrifft das Finance Cockpit und laeuft wie HR-KPI ueber Benutzername plus SHA-256-Passwort-Hash. Finance hat ein eigenes Passwort:
|
|
|
|
```text
|
|
Benutzer: finance
|
|
Passwort: Trafag-Finance-Cockpit-2026!
|
|
```
|
|
|
|
AD-/Rollenpruefung ist fuer den Moment nicht geloescht, sondern in `appsettings.json` mit `Security.Enabled = false` deaktiviert. Die vorhandenen `AccessGroups` und `AdminGroups` bleiben in der Konfiguration stehen und koennen spaeter wieder aktiviert werden. Die Finance-Sperre bleibt davon unabhaengig aktiv.
|
|
|
|
## H299 - Zentrale Excel fuer CFO-/Finance-Filter
|
|
|
|
Quelle: FINANCE_HANDOFF_2026-05-18.md.raw
|
|
|
|
### Zentrale Excel fuer CFO-/Finance-Filter
|
|
|
|
Die zentrale Datei `Sales_All_yyyy-MM-dd.xlsx` enthaelt am rechten Ende einen zusammengehoerigen Finance-Spaltenblock:
|
|
|
|
```text
|
|
Finance | Year
|
|
Finance | Country Key
|
|
Finance | Date
|
|
Finance | Net Sales Actual
|
|
Finance | Currency
|
|
Finance | Include
|
|
Finance | Source Value Field
|
|
```
|
|
|
|
Zusaetzlich wird nur in der zentralen Datei ein Hilfsblatt erzeugt:
|
|
|
|
```text
|
|
Finance Filter Hilfe
|
|
```
|
|
|
|
Damit soll Finance dieselben Ist-Summen aus Excel filtern koennen wie im Testprogramm bzw. auf `/finance-cockpit/vergleich`.
|
|
|
|
Vorgehen im Excel:
|
|
|
|
1. `Finance | Year` auf das gewuenschte Jahr filtern, z. B. `2025`.
|
|
2. `Finance | Country Key` auf Land filtern, z. B. `IT`, `UK`, `ES`, `AT`.
|
|
3. `Finance | Include = TRUE` filtern.
|
|
4. `Finance | Net Sales Actual` summieren.
|
|
|
|
Gepruefter Vergleich gegen `FinanceReconciliationService` fuer 2025:
|
|
|
|
| Key | Finance-Service | Excel-Finance-Spalten | Differenz |
|
|
| --- | ---: | ---: | ---: |
|
|
| AT | `3'438'121.37` | `3'438'121.37` | `0.00` |
|
|
| CH | `43'521'390.82` | `43'521'390.82` | `0.00` |
|
|
| ES | `3'082'320.18` | `3'082'320.18` | `0.00` |
|
|
| FR | `1'471'218.44` | `1'471'218.44` | `0.00` |
|
|
| IN | `750'936'591.38` | `750'936'591.38` | `0.00` |
|
|
| IT | `7'669'641.47` | `7'669'641.47` | `0.00` |
|
|
| UK | `3'533'710.09` | `3'533'710.09` | `0.00` |
|
|
| US | `3'749'865.33` | `3'749'865.33` | `0.00` |
|
|
|
|
Hinweis: Fuer AT/CH waehlt der Finance-Service intern `Nettofakturawert Hauswaehrung pro Position`; in den aktuellen Daten ist dieser Wert identisch mit `SalesPriceValue`, daher stimmen die Excel-Finance-Spalten exakt.
|
|
|
|
## H300 - Aktuelle Soll/Ist-Werte
|
|
|
|
Quelle: FINANCE_HANDOFF_2026-05-18.md.raw
|
|
|
|
## Aktuelle Soll/Ist-Werte
|
|
|
|
| Land | Ist | Soll | Differenz | Waehrung | Status |
|
|
| --- | ---: | ---: | ---: | --- | --- |
|
|
| FR | `1'471'218.44` | `1'471'218.00` | `0.44` | EUR | OK |
|
|
| IN | `750'936'591.38` | `750'936'591.00` | `0.38` | INR | OK |
|
|
| US | `3'749'865.33` | `3'749'865.00` | `0.33` | USD | OK |
|
|
| IT | `7'669'641.47` | `7'669'840.00` | `-198.53` | EUR | Fast passend, Filter fachlich bestaetigen |
|
|
| UK | `3'533'710.09` | `3'538'972.00` | `-5'261.91` | GBP | Kleine Restdifferenz |
|
|
| AT | `3'438'121.37` | `3'443'863.00` | `-5'741.63` | EUR | Kleine Restdifferenz |
|
|
| ES | `3'082'320.18` | `3'102'333.61` | `-20'013.43` | EUR | Groesste Restdifferenz |
|
|
|
|
Prioritaet fuer Folgearbeit:
|
|
|
|
1. ES pruefen: vermutlich Zuschlaege/Fracht/Nebenkosten/Rhino-Auswertungslogik.
|
|
2. AT und UK Restdifferenzen klaeren.
|
|
3. IT fachlich bestaetigen, weil der aktuelle Filter noch provisorisch ist.
|
|
|
|
## H301 - Grundregeln
|
|
|
|
Quelle: FINANCE_HANDOFF_2026-05-18.md.raw
|
|
|
|
## Grundregeln
|
|
|
|
- Net Sales Actuals werden in der Hauswaehrung des Landes verglichen.
|
|
- CHF ist nur Kontroll-/Reporting-Sicht ueber Budgetkurse, nicht Standardvergleich.
|
|
- Fuehrend ist Netto ohne VAT/MwSt.
|
|
- Gutschriften/Credit Notes muessen negativ in die Summe laufen.
|
|
- Standard-Ist bleibt inklusive Intercompany; IC/2nd-party wird separat gezeigt, ausser ein Land hat fachlich bestaetigte Ausschluesse.
|
|
- Jahresabgrenzung: bevorzugt Buchungsdatum/PostingDate. Wenn Quelle kein PostingDate liefert: InvoiceDate, danach ExtractionDate.
|
|
|
|
## H302 - Italien
|
|
|
|
Quelle: FINANCE_HANDOFF_2026-05-18.md.raw
|
|
|
|
## Italien
|
|
|
|
Quelle:
|
|
|
|
- `BI1` / SAP B1 via HANA
|
|
- TSC `TRIT`
|
|
- Schema `it01_p`
|
|
|
|
Wichtige Erkenntnisse:
|
|
|
|
- Italien ist B1, nicht Sage.
|
|
- Frankreich und Italien kommen beide aus BI1/B1; FR passt mit `SalesPriceValue`.
|
|
- Screenshot `italien.png` zeigte fuer Italien die relevante B1-/Finance-Sicht auf Konto:
|
|
|
|
```text
|
|
47005 - Ricavi vendite e prestazioni
|
|
```
|
|
|
|
Aktueller technischer Arbeitsfilter in `Services/HanaQueryService.cs` fuer `it01_p`:
|
|
|
|
```sql
|
|
AcctCode LIKE '47005%'
|
|
AcctCode NOT LIKE '4700504%'
|
|
CardCode NOT IN (
|
|
'C_IT01_0022987',
|
|
'C_IT01_0306928',
|
|
'C_IT01_0306138',
|
|
'C_IT01_0309653',
|
|
'C_IT01_0304885',
|
|
'C_IT01_0306475'
|
|
)
|
|
```
|
|
|
|
Aus Cache berechnete Herleitung:
|
|
|
|
```text
|
|
10'603'550.59 - 2'933'909.12 = 7'669'641.47 EUR
|
|
Soll/Rhino = 7'669'840.00 EUR
|
|
Differenz = -198.53 EUR
|
|
```
|
|
|
|
Die sechs provisorisch ausgeschlossenen Kunden:
|
|
|
|
| Kunde | Betrag |
|
|
| --- | ---: |
|
|
| FAIVELEY TRANSPORT ITALIA S.P.A. | `1'689'857.70` |
|
|
| SYSTEM CERAMICS S.P.A. | `323'409.00` |
|
|
| WABTEC MZT | `282'647.40` |
|
|
| FINCANTIERI NEXTECH S.P.A | `268'166.37` |
|
|
| METAL WORK SERVICE S.R.L. | `203'425.15` |
|
|
| ELEMASTER S.P.A. | `166'403.50` |
|
|
|
|
Wichtig: Dieser IT-Filter ist ein Arbeits-/Prueffilter, noch nicht fachlich final bestaetigt.
|
|
|
|
Nachtrag 2026-05-20:
|
|
|
|
- Finance-Leiter bestaetigt als fachliche Methode: `Trafag Italia` aus dem externen IT-Finance-Ist ausschliessen.
|
|
- Identische IT-Zeilen mit leerem `Supplier country` nur einmal zaehlen.
|
|
- Die alte Kundenausschluss-Kombination bleibt als 2025-Analyse dokumentiert, ist aber nicht die fuehrende Methode fuer Folgejahre.
|
|
|
|
Detaildokument:
|
|
|
|
```text
|
|
docs/FINANCE_IT_VORGEHEN_2026-05-18.md
|
|
```
|
|
|
|
## H303 - UK
|
|
|
|
Quelle: FINANCE_HANDOFF_2026-05-18.md.raw
|
|
|
|
## UK
|
|
|
|
Quelle:
|
|
|
|
- Fachlich Sage, nicht SAP B1.
|
|
- TSC `TRUK`.
|
|
- App-Anschluss: `MANUAL_EXCEL`.
|
|
- SharePoint-Ordner heisst technisch `Import/Finance/UK_B1`, aber das bedeutet nicht B1.
|
|
|
|
Aktuelle Berechnung:
|
|
|
|
```text
|
|
SageNetSales([Sales Price/Value], [Quantity], [Document Type], [DocumentType], [Type])
|
|
```
|
|
|
|
Bedeutung:
|
|
|
|
- `Sales Price/Value * Quantity`
|
|
- Credit Notes werden bei erkennbarem Sage-Typ negativ erzwungen.
|
|
- Waehrung ist GBP.
|
|
|
|
Wichtige Korrektur:
|
|
|
|
- UK wird gegen Local Currency/GBP geprueft.
|
|
- Der fruehere `CheckValue 3'749'865.00` war fuer UK falsch und wurde entfernt.
|
|
- Korrektes Soll fuer UK ist `LocalCurrencyValue = 3'538'972.00 GBP`.
|
|
|
|
Aktueller Stand:
|
|
|
|
```text
|
|
Ist = 3'533'710.09 GBP
|
|
Soll = 3'538'972.00 GBP
|
|
Differenz = -5'261.91 GBP
|
|
```
|
|
|
|
Detaildokument:
|
|
|
|
```text
|
|
docs/FINANCE_UK_QUELLE_KORREKTUR_2026-05-18.md
|
|
```
|
|
|
|
## H304 - Spanien
|
|
|
|
Quelle: FINANCE_HANDOFF_2026-05-18.md.raw
|
|
|
|
## Spanien
|
|
|
|
Quelle:
|
|
|
|
- Sage CSV
|
|
- TSC `TRES`
|
|
- Datei: `sageSpain/v2/Spain_Sales_2025.csv`
|
|
- Cache: `docs/spain_cache_2025.csv`
|
|
|
|
Berechnung:
|
|
|
|
- `SalesPriceValue` aus `LineasAlbaranCliente.ImporteNeto`
|
|
- Credit Notes/REC negativ
|
|
- Datumsbasis: `FechaFactura`
|
|
- Waehrung: EUR
|
|
|
|
Aktuelle Zerlegung:
|
|
|
|
```text
|
|
Zeilen = 4'341
|
|
Invoice = 3'140'921.50 EUR
|
|
Credit Notes = -58'601.32 EUR
|
|
Ist = 3'082'320.18 EUR
|
|
Soll/Rhino = 3'102'333.61 EUR
|
|
Differenz = -20'013.43 EUR
|
|
```
|
|
|
|
Nach Serie:
|
|
|
|
| Serie | Zeilen | Betrag |
|
|
| --- | ---: | ---: |
|
|
| REG | `3'079` | `2'407'451.30` |
|
|
| LAT | `1'118` | `480'199.20` |
|
|
| PRO | `43` | `253'271.00` |
|
|
| REC | `101` | `-58'601.32` |
|
|
|
|
Bewertung:
|
|
|
|
- Differenz ist ca. `0.65%`.
|
|
- Gutschriften sind nicht das Problem, sie sind bereits negativ.
|
|
- Wahrscheinlich fehlen oder unterscheiden sich kleinere Sage-/Rhino-Bestandteile: Fracht, Portes, Zuschlaege, Rundungen, Versicherung, Finanzierung, nicht-artikelbezogene Belegpositionen oder eine andere Sage-Auswertung.
|
|
- Nicht einfach auf Belegkopf `DocumentNetAmount` wechseln: deduplizierter Belegkopf liegt bei `2'907'901.79` und passt schlechter.
|
|
|
|
## H305 - Geaenderte Programmteile
|
|
|
|
Quelle: FINANCE_HANDOFF_2026-05-18.md.raw
|
|
|
|
## Geaenderte Programmteile
|
|
|
|
Wichtige Dateien:
|
|
|
|
```text
|
|
Services/HanaQueryService.cs
|
|
Services/ManualExcelImportService.cs
|
|
Services/DatabaseSeedService.cs
|
|
scripts/Export-SageSpainSalesCsv.ps1
|
|
SageSpainFinalExportPackage/Export-SageSpainSalesCsv.ps1
|
|
TrafagSalesExporter.Tests/ManualExcelImportServiceTests.cs
|
|
```
|
|
|
|
Wichtige technische Aenderungen:
|
|
|
|
- IT: provisorischer B1-Konto-/Kundenausschlussfilter fuer `it01_p`.
|
|
- UK: `SageNetSales(...)` im Manual-Excel-Importer.
|
|
- UK: `FinanceReference` nutzt fuer UK nur `LocalCurrencyValue = 3'538'972`, kein `CheckValue`.
|
|
- ES: Sage-Spain-SQL erzwingt Credit Notes mit `-ABS(...)`.
|
|
- Test ergaenzt, der positive Credit-Note-Rohbetraege negativ macht.
|
|
|
|
## H306 - Validierung
|
|
|
|
Quelle: FINANCE_HANDOFF_2026-05-18.md.raw
|
|
|
|
## Validierung
|
|
|
|
Build:
|
|
|
|
```text
|
|
dotnet build .\TrafagSalesExporter.csproj --no-restore -p:UseAppHost=false -p:OutDir=.\obj\verify_uk_reference\ --verbosity minimal
|
|
```
|
|
|
|
Ergebnis: erfolgreich.
|
|
|
|
Tests:
|
|
|
|
```text
|
|
dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --no-restore -p:UseAppHost=false --verbosity minimal
|
|
```
|
|
|
|
Ergebnis:
|
|
|
|
```text
|
|
71/71 Tests gruen
|
|
```
|
|
|
|
FinanceProbe:
|
|
|
|
```text
|
|
http://127.0.0.1:5099/finance
|
|
```
|
|
|
|
Ergebnis: HTTP `200`.
|
|
|
|
## H307 - Commits
|
|
|
|
Quelle: FINANCE_HANDOFF_2026-05-18.md.raw
|
|
|
|
## Commits
|
|
|
|
Relevante Commits:
|
|
|
|
| Commit | Inhalt |
|
|
| --- | --- |
|
|
| `fb85e2e` | Sage-Berechnungen korrigiert, IT/UK-Doku und Ampel ergaenzt |
|
|
| `3d40d76` | UK auf GBP Local Currency als Referenz umgestellt |
|
|
| `f721d95` | Aktuelle Excel und Spanien-Cache ergaenzt |
|
|
| `bc6bfdf` | Finance-Handoff dokumentiert |
|
|
| `8f1b1b8` | Haupt-Finance-Vergleich an Probe angeglichen |
|
|
| `f855e06` | Leere Ist-Zeilen im Finance-Vergleich gefiltert |
|
|
| `5c654ad` | Finance-Berechnungsformeln je Land dokumentiert |
|
|
| `9c544af` | Finance Cockpit mit Login technisch geschuetzt |
|
|
| `ebbc5a1` | Finance-Filterspalten in zentrale Excel ergaenzt |
|
|
| `b23f73e` | Finance-Hilfsblatt in zentrale Excel ergaenzt |
|
|
|
|
Dieses Handoff wurde danach als weiterer Commit hinzugefuegt.
|
|
|
|
## H308 - Nicht aufraeumen ohne Ruecksprache
|
|
|
|
Quelle: FINANCE_HANDOFF_2026-05-18.md.raw
|
|
|
|
## Nicht aufraeumen ohne Ruecksprache
|
|
|
|
Es gibt noch untracked/temporaere Arbeitsdateien und alte Word-/Excel-Backups. Diese wurden bewusst nicht committed, weil sie entweder temporär, defekt, Logdateien oder Zwischenstaende sind.
|
|
|
|
Bekannt uncommitted:
|
|
|
|
```text
|
|
.tmp_tools/
|
|
Tools/FinanceProbe/.tmp_tools/
|
|
verify_probe_out*/
|
|
financeprobe.*.log
|
|
docs/CFO_Kurzbericht_270515.docx
|
|
docs/CFO_Kurzbericht_270515*.bak.docx
|
|
docs/CFO_Kurzbericht_270515_NEU*.docx
|
|
docs/FINANCE_AMPEL_LAENDER_2026-05-18.xlsx
|
|
docs/FINANCE_AMPEL_LAENDER_2026-05-18_20-32.xlsx
|
|
docs/FINANCE_AMPEL_LAENDER_2026-05-19.xlsx
|
|
docs/it_cache_2025.csv
|
|
italien.png
|
|
financeprobe.*.log
|
|
mainapp.*.log
|
|
```
|
|
|
|
Wenn weitergearbeitet wird, zuerst `git status --short` pruefen und keine fremden/alten Dateien blind loeschen.
|
|
|
|
## H309 - Naechste sinnvolle Schritte
|
|
|
|
Quelle: FINANCE_HANDOFF_2026-05-18.md.raw
|
|
|
|
## Naechste sinnvolle Schritte
|
|
|
|
1. ES: Sage-/Rhino-Unterschied von `20'013.43 EUR` gegen Fracht/Zuschlaege/Nebenkosten pruefen.
|
|
2. AT: Differenz `-5'741.63 EUR` analysieren.
|
|
3. UK: Restdifferenz `-5'261.91 GBP` klaeren, aber UK ist jetzt nahe am LC-Soll.
|
|
4. IT: provisorischen Kundenausschluss fachlich bestaetigen oder durch offizielle B1/Rhino-Filterregel ersetzen.
|
|
5. AD-/Rollenpruefung spaeter wieder aktivieren, sobald geklaert ist, welche Gruppen produktiv gelten. Dazu `Security.Enabled` wieder auf `true` setzen; Gruppen sind nicht geloescht.
|
|
6. `/finance-cockpit/vergleich` und `/finance` nebeneinander pruefen, wenn neue Daten geladen wurden; beide sollen dieselbe `FinanceReconciliationService`-Logik nutzen.
|
|
|
|
## H310 - Finance Dashboard Todo
|
|
|
|
Quelle: FINANCE_DASHBOARD_TODO_2026-05-15.md.raw
|
|
|
|
# Finance Dashboard Todo
|
|
|
|
Stand: 2026-05-20
|
|
|
|
Hinweis:
|
|
|
|
Dieses Dokument ist eine historische Todo-Liste vom 2026-05-15 und wurde am 2026-05-20 nachgezogen. Fuer den aktuell fuehrenden Dokumentenstatus siehe:
|
|
|
|
```text
|
|
docs/MD_DOKUMENTENSTATUS_2026-05-20.md
|
|
```
|
|
|
|
Ziel: Aufbau eines modernen, uebersichtlichen Intranet-Dashboards fuer das Group Sales Reporting, zugaenglich fuer alle freigegebenen Benutzer.
|
|
|
|
## H311 - Todo
|
|
|
|
Quelle: FINANCE_DASHBOARD_TODO_2026-05-15.md.raw
|
|
|
|
## Todo
|
|
|
|
| Prio | Aufgabe | Status |
|
|
| --- | --- | --- |
|
|
| 1 | Fuehrendes CFO-Dokument verwenden: `FINANCE_CHEF_SUMMARY_2026-05-15.docx` | Historisch; neue Anwenderdoku `FINANCE_COCKPIT_ANLEITUNG_FINANZ_2026-05-20.docx` ergaenzt |
|
|
| 1 | Offene Finance-Entscheide mit Andreas/Finance durchgehen | Offen |
|
|
| 1 | Italien-Abweichung klaeren: Berechnungsart, Deduplizierung, Intercompany | Teilweise geklaert; Finance-Leiter bestaetigte Methode, Restdifferenz dokumentiert |
|
|
| 1 | Italien IC-Diagnose besprechen: Trafag, Magnetic Sense/Magnets Sense und Gesellschaft fuer Sensorik erklaeren einen grossen Teil, aber nicht die ganze Abweichung | Historisch; neue IT-Methode verwendet `CustomerName` Trafag Italia und Dublettenregel |
|
|
| 1 | Deutschland: finalen Jahresfile 2025 beschaffen | Erledigt technisch; DE Alphaplan ist eingebaut, Fachabgrenzung Kundenlaender bleibt offen |
|
|
| 2 | UK/England: Jahresvollstaendigkeit und Restdifferenz pruefen | Teilweise erledigt; UK ist Sage/Manual Excel, Mapping korrigiert, Restdifferenz klein/offen |
|
|
| 2 | CH/AT: Sollzuordnung und Trennung final bestaetigen | Offen |
|
|
| 2 | Spanien und Oesterreich: kleinere Differenzen klaeren | Offen |
|
|
| 2 | Intercompany-/2nd-party-Kundenliste final definieren | Offen |
|
|
| 3 | Budgetkurse je Jahr als Quelle festlegen | Offen |
|
|
| 3 | Dashboard-Sicht fuer CFO: nur Laender mit Abweichung und Handlungsbedarf anzeigen | In Arbeit; Finance Summary und Soll/Ist Sicht vorhanden |
|
|
| 3 | Detailansicht je Land mit Berechnungsart und Pruefspur behalten | In Arbeit; Rohdaten-/Diagnosereiter bleibt erhalten |
|
|
| 3 | Freigabe-/Berechtigungskonzept fuer Intranet-Dashboard klaeren | Offen |
|
|
|
|
## H312 - Naechster Termin
|
|
|
|
Quelle: FINANCE_DASHBOARD_TODO_2026-05-15.md.raw
|
|
|
|
## Naechster Termin
|
|
|
|
Ziel im Termin:
|
|
- Deutschland und Spanien muss finales Excel schicken (Rohali 2 mal nachgehakt warte auf finales File)
|
|
- Grundlogik bestaetigen: Hauswaehrung, Nettofakturawert, Buchungsdatum, Berechnung pro Belegposition.
|
|
- Offene Laenderabweichungen priorisieren.
|
|
- Pro Land festlegen, welche Datenquelle und Berechnungslogik final gilt.
|
|
|
|
## H313 - IT / Intercompany Diagnose
|
|
|
|
Quelle: FINANCE_DASHBOARD_TODO_2026-05-15.md.raw
|
|
|
|
## 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.
|
|
|
|
## H314 - Finance: Welches Dokument gilt?
|
|
|
|
Quelle: FINANCE_WELCHES_DOKUMENT_GILT_2026-05-15.md.raw
|
|
|
|
# Finance: Welches Dokument gilt?
|
|
|
|
Stand: 2026-05-20
|
|
|
|
## H315 - Aktueller Nachtrag 2026-05-20
|
|
|
|
Quelle: FINANCE_WELCHES_DOKUMENT_GILT_2026-05-15.md.raw
|
|
|
|
## Aktueller Nachtrag 2026-05-20
|
|
|
|
Zum alten CFO-/Finance-Termin-Dokument ist eine neue Anwenderdoku fuer das Cockpit hinzugekommen:
|
|
|
|
```text
|
|
docs/FINANCE_COCKPIT_ANLEITUNG_FINANZ_2026-05-20.docx
|
|
```
|
|
|
|
Diese neue Word-Datei ist die bessere Anleitung fuer Finance-Anwender im Cockpit. Das CFO-Dokument vom 2026-05-15 bleibt historische Termin-/Entscheidgrundlage.
|
|
|
|
Technisch/fachlich aktuell fuehrend:
|
|
|
|
- `Management Analyse` Reiter `Finance Summary`
|
|
- zentrale Excel `Finance Summary`
|
|
- `FinanceRuleEngine`
|
|
- `docs/FINANCE_ENTSCHEIDE.md`
|
|
- `docs/MD_DOKUMENTENSTATUS_2026-05-20.md`
|
|
|
|
## H316 - Fuehrendes Dokument
|
|
|
|
Quelle: FINANCE_WELCHES_DOKUMENT_GILT_2026-05-15.md.raw
|
|
|
|
## Fuehrendes Dokument
|
|
|
|
Fuer den CFO-/Finance-Termin vom 2026-05-15 galt:
|
|
|
|
```text
|
|
docs/FINANCE_CHEF_SUMMARY_2026-05-15.docx
|
|
```
|
|
|
|
Dieses Dokument ist die aktuellste CFO-Kurzfassung mit Ampel, Laendertabelle, Pruefquellen, Prioritaeten und empfohlenen Massnahmen.
|
|
|
|
## H317 - Geloeschte alte Fassung
|
|
|
|
Quelle: FINANCE_WELCHES_DOKUMENT_GILT_2026-05-15.md.raw
|
|
|
|
## Geloeschte alte Fassung
|
|
|
|
Die alte Fassung `docs/FINANCE_CHEF_SUMMARY_2026-05-13.docx` wurde entfernt, weil sie durch die Version vom 2026-05-15 ersetzt ist.
|
|
|
|
## H318 - Entscheidbasis
|
|
|
|
Quelle: FINANCE_WELCHES_DOKUMENT_GILT_2026-05-15.md.raw
|
|
|
|
## Entscheidbasis
|
|
|
|
Die fachlichen Entscheide stehen separat hier:
|
|
|
|
```text
|
|
entscheide.md
|
|
docs/FINANCE_ENTSCHEIDE.md
|
|
```
|
|
|
|
Kurzfassung der wichtigsten Entscheide:
|
|
|
|
| Thema | Entscheid |
|
|
| --- | --- |
|
|
| Fuehrende Waehrung | Hauswaehrung je Land |
|
|
| CHF-Sicht | Nur separat mit Budgetkursen |
|
|
| Aggregation | Pro Artikel bzw. Belegposition |
|
|
| Wertbasis | Nettofakturawert |
|
|
| Jahresabgrenzung 2025 | Buchungsdatum |
|
|
| Gutschriften / Storno | Separat ausweisen, positionsbasiert behandeln |
|
|
| Intercompany / 2nd-party | Separat klassifizieren und als Auswahl/Sicht fuehren |
|
|
| Indien | INR ist fuehrend |
|
|
| Italien | Hauswaehrung, Intercompany separat pruefen |
|
|
|
|
## H319 - Wichtig fuer Rueckfragen
|
|
|
|
Quelle: FINANCE_WELCHES_DOKUMENT_GILT_2026-05-15.md.raw
|
|
|
|
## Wichtig fuer Rueckfragen
|
|
|
|
Falls im Termin gefragt wird, ob die Berechnungslogik schon entschieden ist:
|
|
|
|
> Ja. Die Grundlogik ist entschieden: Hauswaehrung, Nettofakturawert, Buchungsdatum und Berechnung pro Belegposition. Offen sind vor allem Datenvollstaendigkeit, Intercompany-Abgrenzung, Budgetkursquelle und die fachliche Freigabe einzelner Laenderabweichungen.
|
|
|
|
## H320 - Was noch nicht final ist
|
|
|
|
Quelle: FINANCE_WELCHES_DOKUMENT_GILT_2026-05-15.md.raw
|
|
|
|
## Was noch nicht final ist
|
|
|
|
| Thema | Status |
|
|
| --- | --- |
|
|
| IT | Kritisch; grosse Abweichung, Berechnungsart/IC/Deduplizierung pruefen |
|
|
| UK / EN | Hoch; Restdifferenz und Jahresvollstaendigkeit pruefen |
|
|
| DE | Hoch; finaler Jahresfile fehlt, Sample nicht verwenden |
|
|
| CH / AT | Hoch; Sollzuordnung und Trennung finalisieren |
|
|
| ES / AT | Mittel; kleinere Differenzen klaeren |
|
|
| FR / IN / US | Rechnerisch freigabefaehig |
|
|
|
|
## H321 - Email an Spanien: Abweichung Net Sales 2025
|
|
|
|
Quelle: FINANCE_ES_MAIL_ABWEICHUNG_2026-05-15.md.raw
|
|
|
|
# Email an Spanien: Abweichung Net Sales 2025
|
|
|
|
**Asunto:** Revision diferencia Net Sales 2025 - Espana
|
|
|
|
Hola,
|
|
|
|
En la reconciliacion de Net Sales 2025 para Espana hemos identificado una diferencia pendiente de aclarar contra el valor de referencia de Rhino / `check.xlsx`.
|
|
|
|
Resumen:
|
|
|
|
- Actual Espana: `3.082.320,18 EUR`
|
|
- Referencia Rhino: `3.102.333,61 EUR`
|
|
- Diferencia: `-20.013,43 EUR`
|
|
|
|
La diferencia no parece muy grande, pero antes de cerrar el dato necesitamos confirmar la causa.
|
|
|
|
Por favor, podeis revisar los siguientes puntos?
|
|
|
|
1. Periodo incluido en el fichero
|
|
Confirmar que el fichero `Spain_Sales_2025.csv` contiene todo el ano 2025 completo.
|
|
|
|
2. Series incluidas
|
|
Confirmar que las series `REG`, `LAT`, `PRO` y `REC` deben incluirse en el calculo de Net Sales 2025.
|
|
|
|
3. Abonos / Credit Notes
|
|
Confirmar que los abonos estan incluidos correctamente y con signo negativo.
|
|
|
|
4. Criterio de fecha
|
|
Confirmar que fecha debe utilizarse para la delimitacion del ano 2025: fecha de factura, fecha contable u otra fecha.
|
|
|
|
5. Importe correcto
|
|
Confirmar si el campo utilizado como importe neto de ventas es el correcto para comparar contra Rhino / `check.xlsx`.
|
|
|
|
Objetivo: aclarar si la diferencia de `-20.013,43 EUR` se explica por periodo, series, abonos o por el campo de importe utilizado.
|
|
|
|
Gracias y saludos,
|
|
|
|
## H322 - Email an Italien: Abweichung Net Sales 2025
|
|
|
|
Quelle: FINANCE_IT_MAIL_ABWEICHUNG_2026-05-15.md.raw
|
|
|
|
# Email an Italien: Abweichung Net Sales 2025
|
|
|
|
**Oggetto:** Verifica differenza Net Sales 2025 - Italia
|
|
|
|
Ciao,
|
|
|
|
nella riconciliazione dei Net Sales 2025 per l'Italia abbiamo identificato una differenza significativa rispetto al valore di riferimento Rhino / `check.xlsx`.
|
|
|
|
Riepilogo:
|
|
|
|
- Actual Italia: `14.704.336,29 EUR`
|
|
- Riferimento Rhino: `7.669.840,00 EUR`
|
|
- Differenza: `+7.034.496,29 EUR`
|
|
|
|
La differenza e molto rilevante. Prima di chiudere il dato dobbiamo confermare quale logica di calcolo e corretta per l'Italia.
|
|
|
|
Potete per favore verificare i seguenti punti?
|
|
|
|
1. Base di calcolo corretta
|
|
Confermare quale valore deve essere usato per i Net Sales 2025: valore netto per riga/posizione, totale documento deduplicato oppure un'altra logica.
|
|
|
|
2. Totali documento vs. posizioni
|
|
Verificare se i totali documento sono ripetuti su piu righe e quindi devono essere conteggiati una sola volta per documento.
|
|
|
|
3. Intercompany / 2nd-party
|
|
Confermare quali clienti o transazioni devono essere esclusi come Intercompany o 2nd-party.
|
|
|
|
4. Note di credito / Credit Notes
|
|
Confermare che le note di credito sono incluse correttamente e con segno negativo.
|
|
|
|
5. Criterio data
|
|
Confermare quale data deve essere utilizzata per delimitare il 2025: data registrazione, data fattura o altra data.
|
|
|
|
6. Valuta
|
|
Confermare che la valuta di confronto per l'Italia e `EUR`.
|
|
|
|
Obiettivo: capire se la differenza di `+7.034.496,29 EUR` deriva da doppio conteggio dei documenti, trattamento Intercompany, criteri data o dal campo importo utilizzato.
|
|
|
|
Grazie e saluti,
|
|
|
|
## H323 - Email an UK / England: Abweichung Net Sales 2025
|
|
|
|
Quelle: FINANCE_UK_MAIL_ABWEICHUNG_2026-05-15.md.raw
|
|
|
|
# Email an UK / England: Abweichung Net Sales 2025
|
|
|
|
**Subject:** Review difference Net Sales 2025 - UK
|
|
|
|
Hi,
|
|
|
|
In the Net Sales 2025 reconciliation for UK / England, we identified a difference against the Rhino / `check.xlsx` reference value.
|
|
|
|
Summary:
|
|
|
|
- Actual UK: `3,533,710.09 GBP`
|
|
- Rhino reference: `3,749,865.00 GBP`
|
|
- Reference UK LC/GBP: `3,538,972.00 GBP`
|
|
- Difference: `-5,261.91 GBP`
|
|
|
|
The mapping has already been reviewed technically, but we still need to clarify the remaining difference before closing the 2025 value.
|
|
|
|
Important clarification: UK / England is treated as a Sage source. The current SharePoint folder name `UK_B1` is only a technical folder/source reference and does not mean that UK is read from SAP Business One.
|
|
|
|
Could you please check the following points?
|
|
|
|
1. Full-year completeness
|
|
Confirm that the UK source file/import contains the full year 2025 and not only a partial period.
|
|
|
|
2. Period included
|
|
We currently see data from approximately `03.01.2025` to `22.12.2025`. Please confirm whether this is complete for 2025 or if transactions outside this range are missing.
|
|
|
|
3. Credit notes
|
|
Confirm that credit notes are included correctly and with the correct negative sign.
|
|
|
|
4. Net sales field
|
|
Confirm which column should be used as the net sales amount for comparison with Rhino / `check.xlsx`.
|
|
|
|
5. Discounts, freight or additional charges
|
|
Please check whether discounts, freight, additional charges or other adjustments are included in the Rhino reference but not in the current import value, or vice versa.
|
|
|
|
6. 2nd-party / 3rd-party / Intercompany
|
|
Confirm whether any customers or transactions should be excluded from the Net Sales 2025 value.
|
|
|
|
7. Currency
|
|
Confirm that the correct comparison currency for UK is `GBP`.
|
|
|
|
Goal: clarify whether the difference of `-216,154.91 GBP` is caused by an incomplete period, credit notes, a different net sales field, adjustments, or 2nd-party/3rd-party handling.
|
|
|
|
Thanks and best regards,
|
|
|