25 KiB
TrafagSalesExporter LLM System Guide
Stand: 2026-05-05
Aktueller Projektstand 2026-05-05
Fuer den aktuellen Finance-/Laenderabgleich zuerst diese Dateien lesen:
Lokaler FinanceProbe:
http://localhost:55417/finance
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, DisplayNameSAP ODataSAP_HANA: direkte HANA-Tabellen/Views, DisplayNameSAP HANA Tables/ViewsBI1: HANASAGE: HANAMANUAL_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. SapCompositionServiceundHanaQueryService.GetMappedSalesRecordsAsyncunterscheiden sich nur noch in der Quellenbeschaffung; Join undSalesRecord-Mapping sind zentral.- Bei HANA mit gepflegten Quellen/Mappings nutzt
HanaDataSourceAdapterden generischen Mapping-Pfad. - Ohne HANA-Mapping bleibt der alte B1-HANA-Standardpfad fuer
OINV/INV1/ORIN/RIN1aktiv.
Finance-Konfiguration:
FinanceReferencesenthaelt Soll-/check.xlsx-Referenzen.FinanceIntercompanyRulesenthaelt 2nd-party/IC-Regeln.- Budgetkurse werden als
CurrencyExchangeRatesmitNotes = Budget 2025gepflegt. - Config-Export/-Import umfasst Finance-Referenzen und IC-Regeln.
ZSCHWEIZ-Seed:
- Quelle Alias
Z - EntitySet
ZSCHWEIZSet - Mapping auf
SalesRecordist vorbefuellt und grafisch editierbar. - Beim App-Start wird die ZSCHWEIZ-Quelle samt Feldmapping per Upsert angelegt oder repariert.
- Wenn Gateway
$metadataliefert, koennen Felder in der UI perFelder aus Quellen ladengelesen werden.
ABAP-Fachlogik:
BUKRS 1100= Schweiz,TSC TRCH,LAND1 CHBUKRS 1200= Oesterreich,TSC TRAT,LAND1 ATCUSTOMER_LAND= Kundenland ausKNA1-LAND1- Netto-/Steuerwerte werden in Belegwaehrung und Hauswaehrung geschrieben.
Aktuelle FinanceProbe-Funktionen:
Meeting Ampel 2025fuer alle Laender auscheck.xlsxDetail alle LaenderSpain CSV direct checkGermany Excel sample check
Spanien:
- Datei:
sagespain/v2/Spain_Sales_2025.csv - Ist:
3'082'320.18EUR - 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.70EUR - Nur Beispielfile, keine finale Jahreszahl
- Mapping technisch verstanden, finaler DE-Jahresfile fehlt
Letzte Verifikation:
dotnet build .\Tools\FinanceProbe\FinanceProbe.csproj --verbosity minimal --no-restoredotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --verbosity minimal --no-restore- Ergebnis: Build OK, Tests
50/50, FinanceProbeHTTP 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 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
- 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 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=DevelopmentundSecurity:DevelopmentBypass=true - globale Fallback-Policy fuer authentifizierte/berechtigte User
- Policy
AdminOnlyfuer administrative Seiten
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
Security:
- alle Routen erfordern Authentifizierung
Settings,StandorteundTransformationssindAdminOnly- Admin-Navigation wird nur fuer Admins angezeigt
- eingeloggter Benutzer wird im App-Bar angezeigt
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
SalesRecord / CentralSalesRecord enthalten neben den positionsnahen Feldern auch B1-Belegwaehrungsfelder:
DocumentCurrencyausDocCurDocumentTotalForeignCurrencyausDocTotalFCDocumentTotalLocalCurrencyausDocTotalVatSumForeignCurrencyausVatSumFCVatSumLocalCurrencyausVatSumDocumentRateausDocRateCompanyCurrencyausOADM.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 -> 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
- Summenfeld waehlen
- Anzeige-Waehrung waehlen
- Kennzahlen, Top-Listen, Datenqualitaet, Findings erzeugen
- vorhandene
-
Zentraldatenbasiert
- direkt aus
CentralSalesRecords - Jahr/Monat Filter
- Summenfeld waehlen
- optionale weitere Summenfelder fuer Zeitreihen waehlen
- Anzeige-Waehrung waehlen
- Rohsicht ohne Intercompany-, Budget- oder Spartelogik
- direkt aus
Aktuelle Summenfelder:
Sales Price/ValueQuantityStandard costQuantity * Standard cost
Aktuelle Anzeige-Waehrungen:
EURUSDOriginal
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:
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-TageskurseNormalizeCurrencyCodeConvertCurrencyManagementCockpitServicekann betragliche Cockpit-Kennzahlen inEURoderUSDumrechnen
Wichtig:
- die Rohsicht im
Management Cockpitkann jetzt Anzeige-Waehrungen nutzen CHFist 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:
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
Authentifizierung / Autorisierung
Dateien:
- Security/SecurityOptions.cs
- Security/SecurityPolicies.cs
- Security/DevelopmentAuthenticationHandler.cs
- Components/Routes.razor
- Components/Layout/NavMenu.razor
- 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:AccessGroupsSecurity:AdminGroupsSecurity:DevelopmentBypassSecurity:DevelopmentUserIsAdminSecurity:DevelopmentUserName
Default-Gruppen:
TRAFAG\\TrafagSalesExporter-UsersTRAFAG\\TrafagSalesExporter-Admins
Development:
appsettings.Development.jsonaktiviert einen lokalen Development-Auth-Handler- dieser ist nur fuer lokale Entwicklung gedacht
- produktiv darf
ASPNETCORE_ENVIRONMENTnichtDevelopmentsein
IIS-Betrieb:
- Windows Authentication aktivieren
- Anonymous Authentication deaktivieren
- AD-Gruppennamen in produktiver Konfiguration setzen
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
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:
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.