Organize markdown docs for RAG routing
This commit is contained in:
@@ -1,733 +1,19 @@
|
||||
# TrafagSalesExporter LLM System Guide
|
||||
# LLM System Guide
|
||||
|
||||
Stand: 2026-05-05
|
||||
Stand: 2026-05-27
|
||||
|
||||
## Aktueller Projektstand 2026-05-05
|
||||
Diese Datei ist fuer tokenarme RAG-Nutzung komprimiert.
|
||||
|
||||
Fuer den aktuellen Finance-/Laenderabgleich zuerst diese Dateien lesen:
|
||||
## Kontext-Regel
|
||||
|
||||
- [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)
|
||||
1. Zuerst `docs/RAG_ROUTER.md` laden.
|
||||
2. Danach genau eine passende Kurzdatei aus `docs/rag/` laden.
|
||||
3. Original-/Rohdokus nur bei Detail-, Audit- oder Fehleranalysebedarf laden.
|
||||
|
||||
Lokaler FinanceProbe:
|
||||
## Volltext Bei Bedarf
|
||||
|
||||
Die Detailhistorie liegt hier:
|
||||
|
||||
```text
|
||||
http://localhost:55417/finance
|
||||
docs/raw_md_archive/HISTORY_CANONICAL.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.
|
||||
|
||||
## 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
|
||||
|
||||
## 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
|
||||
|
||||
## 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
|
||||
|
||||
## 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
|
||||
|
||||
## 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
|
||||
|
||||
## Datenbanktabellen
|
||||
|
||||
`AppDbContext` enthaelt:
|
||||
|
||||
- `HanaServers`
|
||||
- `SourceSystemDefinitions`
|
||||
- `Sites`
|
||||
- `SharePointConfigs`
|
||||
- `ExportSettings`
|
||||
- `ExportLogs`
|
||||
- `AppEventLogs`
|
||||
- `FieldTransformationRules`
|
||||
- `CurrencyExchangeRates`
|
||||
- `SapSourceDefinitions`
|
||||
- `SapJoinDefinitions`
|
||||
- `SapFieldMappings`
|
||||
- `CentralSalesRecords`
|
||||
|
||||
## Architekturrollen der Services
|
||||
|
||||
### 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
|
||||
|
||||
### 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
|
||||
|
||||
### 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
|
||||
|
||||
### 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)
|
||||
|
||||
## Der wichtigste technische Ablauf
|
||||
|
||||
### 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
|
||||
|
||||
### 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
|
||||
|
||||
### 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.
|
||||
|
||||
## Quellsystemlogik
|
||||
|
||||
### SourceSystemDefinition
|
||||
|
||||
`SourceSystemDefinition` ist die fuehrende Wahrheit fuer:
|
||||
|
||||
- `Code`
|
||||
- `DisplayName`
|
||||
- `ConnectionKind`
|
||||
- `IsActive`
|
||||
- `CentralUsername`
|
||||
- `CentralPassword`
|
||||
- `CentralServiceUrl` fuer SAP
|
||||
|
||||
Anschlussarten:
|
||||
|
||||
- `HANA`
|
||||
- `SAP_GATEWAY`
|
||||
- `MANUAL_EXCEL`
|
||||
|
||||
### 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`
|
||||
|
||||
### 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
|
||||
|
||||
### 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
|
||||
|
||||
## 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
|
||||
|
||||
## 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
|
||||
|
||||
## 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
|
||||
|
||||
## 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
|
||||
|
||||
## 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
|
||||
|
||||
## 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
|
||||
|
||||
## Logging
|
||||
|
||||
Es gibt zwei Log-Ebenen:
|
||||
|
||||
- `ExportLogs` fuer fachliche Exporthistorie
|
||||
- `AppEventLogs` fuer technische und UI-nahe Ereignisse
|
||||
|
||||
Die `Logs`-Seite liest vor allem `AppEventLogs`.
|
||||
|
||||
## 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
|
||||
|
||||
## 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.
|
||||
|
||||
## Empfohlene Diagramme fuer andere LLMs
|
||||
|
||||
### 1. Kontextdiagramm
|
||||
|
||||
Zeige:
|
||||
|
||||
- Benutzer
|
||||
- Blazor App
|
||||
- SQLite
|
||||
- SAP HANA
|
||||
- SAP Gateway
|
||||
- lokale Dateisystempfade
|
||||
- SharePoint
|
||||
|
||||
### 2. Komponenten-/Service-Diagramm
|
||||
|
||||
Gruppiere:
|
||||
|
||||
- UI
|
||||
- Orchestrierung
|
||||
- Quelladapter
|
||||
- Transformation
|
||||
- Persistenz
|
||||
- Reporting
|
||||
|
||||
### 3. Datenflussdiagramm pro Quelltyp
|
||||
|
||||
Je ein separater Flow fuer:
|
||||
|
||||
- HANA
|
||||
- SAP Gateway
|
||||
- Manual Excel lokal
|
||||
- Manual Excel SharePoint
|
||||
|
||||
### 4. ER-Diagramm
|
||||
|
||||
Fokussiere auf:
|
||||
|
||||
- `SourceSystemDefinition`
|
||||
- `HanaServer`
|
||||
- `Site`
|
||||
- `SapSourceDefinition`
|
||||
- `SapJoinDefinition`
|
||||
- `SapFieldMapping`
|
||||
- `CentralSalesRecord`
|
||||
- `FieldTransformationRule`
|
||||
|
||||
### 5. Sequenzdiagramm fuer Export
|
||||
|
||||
Wichtige Stationen:
|
||||
|
||||
- Dashboard
|
||||
- ExportOrchestrationService
|
||||
- SiteExportService
|
||||
- spezifischer Quellservice
|
||||
- Transformation
|
||||
- CentralSalesRecordService
|
||||
- Excel/SharePoint
|
||||
- ExportLog/AppEventLog
|
||||
|
||||
## 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.
|
||||
|
||||
## 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.
|
||||
|
||||
Reference in New Issue
Block a user