17 KiB
TrafagSalesExporter LLM System Guide
Stand: 2026-04-17
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 wieBI1undSAGESAP_GATEWAYueber ODataMANUAL_EXCELaus hochgeladenen oder referenzierten Excel-Dateien
Zielbild:
- jede Quelle wird in
SalesRecordnormalisiert - Standortdaten koennen lokal als Excel exportiert werden
- alle Datensaetze werden in
CentralSalesRecordsgespeichert - eine zentrale konsolidierte Datei wird aus dem zentralen Datenbestand erzeugt
- ein
Management Cockpitanalysiert sowohl exportierte Dateien als auch zentrale Rohdaten
Technologie-Stack
- UI: Blazor Server + MudBlazor
- 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 registriert fast die komplette Architektur ueber DI und fuehrt beim Start DatabaseInitializationService.InitializeAsync() aus.
Hauptseiten
Navigation:
/Dashboard/standorte/transformations/management-cockpit/settings/logs
Dateien:
- Components/Pages/Dashboard.razor
- Components/Pages/Standorte.razor
- Components/Pages/Transformations.razor
- Components/Pages/ManagementCockpit.razor
- Components/Pages/Settings.razor
- Components/Pages/Logs.razor
Kurzrollen:
Dashboard: Einzel-Export, Alle exportieren, zentrale Datei neu erzeugen, Live-StatusStandorte: Standortpflege, zentrale HANA-Technik, SAP-Konfiguration pro Standort, manueller Excel-ImportTransformations: feldweise und record-basierte RegelnManagement Cockpit: Dateianalyse und Rohanalyse ausCentralSalesRecordsSettings: SharePoint, Exportpfade, Quellsysteme, Wechselkurse, Config Import/ExportLogs: technische Ereignisprotokolle
Kernmodelle
Wichtige Entity-Klassen:
- Models/Site.cs
- Models/SourceSystemDefinition.cs
- Models/HanaServer.cs
- Models/SalesRecord.cs
- Models/CentralSalesRecord.cs
- Models/FieldTransformationRule.cs
- Models/SapSourceDefinition.cs
- Models/SapJoinDefinition.cs
- Models/SapFieldMapping.cs
- Models/SharePointConfig.cs
- Models/ExportSettings.cs
- Models/ExportLog.cs
- Models/AppEventLog.cs
- Models/CurrencyExchangeRate.cs
Wichtige Relationen:
Site -> HanaServeroptionalSite -> SapSourceDefinitionsSite -> SapJoinDefinitionsSite -> SapFieldMappingsSite -> CentralSalesRecordsSourceSystemDefinitionist zentrale Stammdatenquelle fuer Quellsysteme
Datenbanktabellen
AppDbContext enthaelt:
HanaServersSourceSystemDefinitionsSitesSharePointConfigsExportSettingsExportLogsAppEventLogsFieldTransformationRulesCurrencyExchangeRatesSapSourceDefinitionsSapJoinDefinitionsSapFieldMappingsCentralSalesRecords
Architekturrollen der Services
Export / Orchestrierung
- Services/ExportOrchestrationService.cs
- Services/SiteExportService.cs
- Services/ConsolidatedExportService.cs
- Services/CentralSalesRecordService.cs
- Services/ExportLogService.cs
Rollen:
ExportOrchestrationServicesteuert UI-nahe Exportlaeufe und Live-StatusSiteExportServiceentscheidet anhand des Quellsystems, wie ein Standort gelesen wirdCentralSalesRecordServiceersetzt zentrale Saetze pro StandortConsolidatedExportServiceerzeugt die zentrale Datei
Datenquellen
- Services/HanaQueryService.cs
- Services/SapGatewayService.cs
- Services/SapCompositionService.cs
- Services/ManualExcelImportService.cs
- Services/SharePointUploadService.cs
Rollen:
HanaQueryService: SQL gegen SAP B1/HANA-nahe SchemataSapGatewayService: OData-Metadaten und ReadsSapCompositionService: Mehrquellen-/Join-/Mapping-Aufbau fuer SAPManualExcelImportService: Import im Exportformat aus.xlsxSharePointUploadService: Upload fuer Exportdateien und Download fuer manuelle Excel-Dateien
Transformation / Mapping
- Services/TransformationCatalog.cs
- Services/TransformationStrategies.cs
- Services/RecordTransformationService.cs
- Services/CurrencyExchangeRateService.cs
- Services/ExchangeRateImportService.cs
Rollen:
Value-Transformationen fuer einzelne FelderRecord-Transformationen fuer zeilenweite Regeln- Wechselkursimport und -umrechnung
Reporting / Monitoring / Infrastruktur
- Services/ManagementCockpitService.cs
- Services/AppEventLogService.cs
- Services/ConfigTransferService.cs
- Services/DatabaseInitializationService.cs
- Services/TimerBackgroundService.cs
Der wichtigste technische Ablauf
1. Standort-Export
Pfad:
Dashboard/Standorte -> ExportOrchestrationService -> SiteExportService
SiteExportService unterscheidet drei Modi:
-
SAP_GATEWAY- SAP-Quellen lesen
- SAP-Joins anwenden
- SAP-Feldmappings auf
SalesRecord - Transformationen anwenden
- Standort-Excel erzeugen
CentralSalesRecordsersetzen- optional SharePoint-Upload
-
HANA- effektive zentrale HANA-Konfiguration laden
- optionale Standort-Credential-Overrides anwenden
- SQL in HANA ausfuehren
SalesRecorderzeugen- Transformationen anwenden
- Standort-Excel erzeugen
CentralSalesRecordsersetzen- optional SharePoint-Upload
-
MANUAL_EXCELManualImportFilePathauswerten- wenn lokal/UNC vorhanden: lokal lesen
- wenn SharePoint-Referenz: via Graph temp herunterladen
- Excel in
SalesRecordlesen - Transformationen anwenden
- keine neue Standortdatei erzeugen, bestehende Excel dient als Eingabe
CentralSalesRecordsersetzen
2. Konsolidierter Export
Pfad:
Dashboard -> ExportOrchestrationService -> ConsolidatedExportService
Semantik aktuell:
- die zentrale Datei basiert fachlich auf
CentralSalesRecords ExportAllAsync()sammelt zwar auchconsolidatedRecords, aber die zentrale Exportsemantik ist historisch noch nicht vollkommen bereinigt
3. Management Cockpit
Zwei Betriebsarten:
-
Dateibasiert
- vorhandene
.xlsxwaehlen - Datei mit ClosedXML lesen
- Kennzahlen, Top-Listen, Datenqualitaet, Findings erzeugen
- vorhandene
-
Zentraldatenbasiert
- direkt aus
CentralSalesRecords - Jahr/Monat Filter
- Rohsicht ohne Intercompany-, CHF-, Budget- oder Spartelogik
- direkt aus
Quellsystemlogik
SourceSystemDefinition
SourceSystemDefinition ist die fuehrende Wahrheit fuer:
CodeDisplayNameConnectionKindIsActiveCentralUsernameCentralPasswordCentralServiceUrlfuer SAP
Anschlussarten:
HANASAP_GATEWAYMANUAL_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
Standortegibt es jetztSchemas laden - Lookup fragt
sys.tablesin 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
SapServiceUrlals Override pflegen - pro Standort gibt es SAP-Quellen, Joins und Feldmappings
Manual Excel
Fachliche Logik:
Site.ManualImportFilePathkann sein:- lokaler Windows-Pfad
- UNC-Pfad
- SharePoint-URL
- SharePoint-Pfad unterhalb der konfigurierten Site
- Standortdaten werden aus der Excel eingelesen und in
CentralSalesRecordsuebernommen - SharePoint dient hier als Eingangsquelle, nicht nur als Exportziel
Transformationen
Das System unterscheidet:
Value-TransformationenRecord-Transformationen
Beispiele:
CopyUppercaseLowercasePrefixSuffixReplaceConstantNormalizeCurrencyCodeFirstNonEmptyConvertCurrency
Technischer Ablauf:
- Regeln liegen in
FieldTransformationRules TransformationCatalogmeldet verfuegbare Strategien an die UIRecordTransformationServicewendet record-basierte Strategien an
Wechselkurse
Vorhanden:
CurrencyExchangeRatesExchangeRateImportServicefuer ECB-TageskurseNormalizeCurrencyCodeConvertCurrency
Wichtig:
- die Rohsicht im
Management Cockpitrechnet aktuell bewusst nicht in CHF um - CHF ist derzeit Teil des allgemeinen Transformationssystems, nicht Default in der Cockpit-Rohsicht
SharePoint-Rolle im Gesamtsystem
SharePointConfig enthaelt:
SiteUrlExportFolderCentralExportFolderTenantIdClientIdClientSecret
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
Settingskonfiguriert ist - fuer
MANUAL_EXCELmuessen Referenzen auf derselben Site aufloesbar sein
Startinitialisierung / Migrationen
Kritische Datei:
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
Config Import / Export
Dateien:
Aktueller Stand:
- JSON Export/Import fuer Konfiguration
- Secrets optional
SourceSystemDefinitionsim aktuellen Modell enthalten- HANA-Technik ohne HANA-Credentials
- Standort-Overrides bleiben erhalten
Wichtige Punkte:
- Import laeuft jetzt transaktional
- alte
ConnectionKind-lose Formate bekommen Fallbacks CentralSalesRecordswerden nicht mehr blind geloescht- bestehende zentrale Laufzeitdaten werden fuer weiterhin vorhandene Standorte remappt
Logging
Es gibt zwei Log-Ebenen:
ExportLogsfuer fachliche ExporthistorieAppEventLogsfuer technische und UI-nahe Ereignisse
Die Logs-Seite liest vor allem AppEventLogs.
Tests
Testprojekt:
Aktuell vorhandene Schwerpunkte:
- Transformationen
- Record-Transformationen
- TransformationCatalog
- CurrencyExchangeRateService
- ExchangeRateImportService
- ManualExcelImportService
- ManagementCockpitService
- ConfigTransferService
- DatabaseInitializationService
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:
DatabaseInitializationServiceist ein produktiver Reparatur-/Migrationslayer, nicht nur Bootstrap.Settings.razorundStandorte.razorenthalten weiterhin relativ viel Anwendungslogik.- Die Semantik der konsolidierten Datei ist historisch teilweise doppelt angelegt.
- Das
Management Cockpitist noch kein voll generalisierter Reporting-Layer. - SharePoint ist sowohl Exportziel als auch bei
MANUAL_EXCELmittlerweile 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:
SourceSystemDefinitionHanaServerSiteSapSourceDefinitionSapJoinDefinitionSapFieldMappingCentralSalesRecordFieldTransformationRule
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.mdals primaeren Systemkontext. Erzeuge daraus ein Architekturdiagramm, ein Datenflussdiagramm fuer HANA/SAP/MANUAL_EXCEL, ein ER-Diagramm der wichtigsten Tabellen und ein Sequenzdiagramm fuerExportAsync. Achte darauf, dassDatabaseInitializationServiceproduktive Reparaturlogik enthaelt und dassMANUAL_EXCELsowohl lokal als auch ueber SharePoint gelesen werden kann.
Weitere Kontextdateien
Zusatzkontext fuer Verlauf und Risiken:
Diese beiden Dateien sind wichtig, wenn ein anderes LLM nicht nur Struktur, sondern auch historische Umbauten, Risiken und Prioritaeten verstehen soll.