From 57cb09bc500ebdc1db074473af5b4325fa221c11 Mon Sep 17 00:00:00 2001 From: metacube Date: Fri, 8 May 2026 09:00:19 +0200 Subject: [PATCH] Document program processes and source systems --- .../docs/PROGRAMM_DIAGRAMME.md | 45 +++ .../docs/program-process-plan.svg | 317 ++++++++++++++++++ .../docs/program-user-stories.svg | 220 ++++++++++++ .../docs/standorte_systeme.xlsx | Bin 0 -> 8144 bytes 4 files changed, 582 insertions(+) create mode 100644 TrafagSalesExporter/docs/PROGRAMM_DIAGRAMME.md create mode 100644 TrafagSalesExporter/docs/program-process-plan.svg create mode 100644 TrafagSalesExporter/docs/program-user-stories.svg create mode 100644 TrafagSalesExporter/docs/standorte_systeme.xlsx diff --git a/TrafagSalesExporter/docs/PROGRAMM_DIAGRAMME.md b/TrafagSalesExporter/docs/PROGRAMM_DIAGRAMME.md new file mode 100644 index 0000000..9458869 --- /dev/null +++ b/TrafagSalesExporter/docs/PROGRAMM_DIAGRAMME.md @@ -0,0 +1,45 @@ +# Programm-Diagramme + +## Empfohlene Diagrammarten + +Fuer das Programm bieten sich zwei Diagrammarten an: + +- **User Story Map** fuer Rollen, fachliche Aktivitaeten und Ausbaustufen. +- **Swimlane-Prozessdiagramm** fuer den Ablauf von Quellsystem bis Finance-Abgleich, weil Verantwortung und Datenfluss getrennt sichtbar werden. + +## Dateien + +- `docs/program-user-stories.svg` + - zeigt Finance, Power User/Admin und IT/SAP als Rollen + - ordnet Stories nach Quellenpflege, Mapping, Import, Konsolidierung, Finance-Abgleich und Betrieb + - markiert Kernfunktionen, naechsten Ausbau und Kontrollpunkte + +- `docs/program-process-plan.svg` + - zeigt den Prozess als Swimlanes + - enthaelt SAP ZSCHWEIZ, SAP OData, SAP HANA/BI1, Manual Excel/CSV + - zeigt den zentralen Weg ueber grafisches Mapping, `MappedSalesRecordComposer`, `CentralSalesRecords`, Finance-Abgleich und Export + - markiert bewusste Rest-Doppelspuren wie HANA-B1-Legacy und den offenen Ausbau fuer Finance-Regelpflege + +## Abgleich gegen Quellcode + +Die Diagramme wurden gegen folgende Codebereiche abgeglichen: + +- `Program.cs`: registrierte Adapter und Services +- `Services/DataSources/*`: HANA, SAP Gateway und Manual Excel/CSV Adapter +- `Services/SiteExportService.cs`: Standortexport, Transformation, Excel-Erzeugung, zentrale Speicherung, SharePoint-Upload +- `Services/ExportOrchestrationService.cs`: Export aller aktiven Standorte und anschliessender konsolidierter Export +- `Services/ConsolidatedExportService.cs`: zentrale Datei aus `CentralSalesRecords` +- `Services/MappedSalesRecordComposer.cs`: gemeinsame Mapping-Engine fuer SAP OData und generisches HANA-Mapping +- `Services/FinanceReconciliationService.cs`: Soll/Ist-Kandidaten, Budgetkurse, IC-Regeln und Ampelstatus +- `Services/DatabaseSeedService.cs`: Seed fuer Quellsysteme, ZSCHWEIZ, Finance-Referenzen, Budgetkurse und IC-Regeln +- `Data/AppDbContext.cs`: relevante Tabellen + +Wichtige Praezisierung aus dem Code: + +- `SalesPriceValue` wird im Finance-Abgleich positionsweise summiert. +- Belegkopfwerte wie `DocTotal - VatSum` werden vor der Summierung pro Beleg dedupliziert. +- Der ausgewaehlte Finance-Wert ist daher ein Ist-Kandidat, nicht pauschal immer eine Positionssumme. + +## Einsatz + +Die SVG-Dateien koennen direkt im Browser geoeffnet, in Markdown verlinkt oder in Praesentationen eingefuegt werden. diff --git a/TrafagSalesExporter/docs/program-process-plan.svg b/TrafagSalesExporter/docs/program-process-plan.svg new file mode 100644 index 0000000..e9d1687 --- /dev/null +++ b/TrafagSalesExporter/docs/program-process-plan.svg @@ -0,0 +1,317 @@ + + Trafag Sales Exporter Prozessplan + Swimlane-Prozessplan fuer Datenquellen, Konfiguration, Import, Konsolidierung, Finance-Abgleich und Betrieb. + + + + + + + + + + + + Trafag Sales Exporter - Prozessplan + Empfohlene Diagrammart: Swimlane-Prozessdiagramm. Es trennt Verantwortung und zeigt den Datenfluss vom Quellsystem bis zur Finance-Kontrolle. + + + + + Quellsysteme + SAP, HANA, + Excel/CSV + + + + Konfiguration + Standorte, + Mappings + + + + Import + Composer, + Validierung + + + + Zentrale + Persistenz + + + + Finance + Soll/Ist, IC, + Budgetkurse + + + + Output + Export, Logs, + Doku + + + + + 1 + SAP ZSCHWEIZ + ABAP schreibt ZSCHWEIZ + 1100 CH, 1200 AT + + + + + 2 + SAP OData Gateway + EntitySet ZSCHWEIZSet + liefert Daten und Metadata + + + + + 3 + SAP HANA / BI1 + Direkte Tabellen/Views + oder Legacy B1-Pfad + + + + + 4 + Manual Excel / CSV + Deutschland, Spanien + und manuelle Dateien + + + + + + 5 + Standort pflegen + TSC, Land, Quellsystem, + URL Override, Aktiv + + + + + 6 + Quellen laden + EntitySets/Felder oder + HANA-Spalten einlesen + + + + + 7 + Grafisch mappen + Quelle, Left Join, Feld + nach SalesRecord + + + + + 8 + Finance-Regeln + Referenzen, Budgetkurse, + IC-Regeln aktuell DB/Seed + + + + + + 9 + Export starten + Ein Standort oder alle + aktiven Standorte + + + + + 10 + Daten lesen + OData, HANA oder + Excel/CSV Adapter + + + + + 11 + Mapped Composer + Gemeinsame Mapping- + Engine fuer SAP/HANA + + + + + 12 + Normalisieren + SalesRecord-Felder, + Datum, Zahl, Waehrung + + + + + + 13 + CentralSalesRecords + Positionsdaten je Standort + werden zentral gespeichert + + + + + 14 + Logs schreiben + ExportLogs und + AppEventLogs + + + + + + 15 + Sollwerte laden + FinanceReferences je + Jahr und Land + + + + + 16 + Ist-Kandidaten bilden + SalesPrice positionsweise, + Belegwerte dedupliziert + + + + + 17 + IC/2nd-party markieren + Regeln nach Nummer + oder Kundentext + + + + + 18 + Ampel bilden + OK, Pruefen oder + keine Daten + + + + + + 19 + Excel-Dateien + Standortdateien und + zentrale Datei + + + + + 20 + Power BI / Weitergabe + Konsolidierte Datei + oder Folgeprozess + + + + + 21 + Monitoring + Dashboard, Logs, + Fehler-Snackbar + + + + + 22 + Config sichern + Mappings, Finance- + Regeln exportieren + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Aktuelle bewusste Doppelspur + HANA-B1-Legacy-Pfad bleibt aktiv, + wenn fuer einen Standort kein + grafisches Mapping gepflegt ist. + Ziel: spaeter auf HANA-Mapping migrieren. + + + + + Technischer Kern + MappedSalesRecordComposer + fuehrt Quellzeilen, Left Joins, + Expressionen und Zielfeldmapping + fuer SAP OData und HANA zusammen. + + + + + Naechster Prozessausbau + UI fuer FinanceReferences, + Budgetkurse und IC-Regeln bauen. + Manual Excel Header-Automatik + mit Mapping-Engine vereinheitlichen. + + + diff --git a/TrafagSalesExporter/docs/program-user-stories.svg b/TrafagSalesExporter/docs/program-user-stories.svg new file mode 100644 index 0000000..d69a85c --- /dev/null +++ b/TrafagSalesExporter/docs/program-user-stories.svg @@ -0,0 +1,220 @@ + + Trafag Sales Exporter User Story Map + User Story Map fuer Rollen, Aktivitaeten und konkrete Stories im Trafag Sales Exporter. + + + + + + Trafag Sales Exporter - User Story Map + Empfohlene Diagrammart: User Story Map. Sie zeigt Rollen, fachliche Aktivitaeten und lieferbare Stories nebeneinander. + + + + + + + + Quellen + pflegen + + + + Mapping + konfigurieren + + + + Daten laden + und pruefen + + + + Konsolidieren + und exportieren + + + + Finance + abgleichen + + + + Betrieb + nachvollziehen + + + + + + + + + + Finance + Controller + Soll/Ist, IC, FX + + + + Power User + Admin + Standorte, Mapping + + + + IT / SAP + Entwickler + OData, ABAP, DB + + + + + + Referenzwerte pflegen + Als Finance will ich + check.xlsx-Sollwerte je Land. + + + + Budgetkurse nutzen + CHF-Ausweis erfolgt ueber + Budgetkurse, nicht Tageskurse. + + + + Ist gegen Soll sehen + Ampel zeigt OK, Pruefen + oder fehlende Daten. + + + + Zentrale Datei erhalten + Export aus CentralSalesRecords + fuer Power BI/Weitergabe. + + + + IC klassifizieren + 2nd-party Regeln nach Kunde + oder Namensmarker pflegen. + + + + Abweichungen erklaeren + Differenz, Waehrung und + Ist-Kandidat sichtbar machen. + + + + + + + Standorte verwalten + SAP OData, SAP HANA, + BI1/SAGE, Excel/CSV. + + + + Grafisch mappen + Quellfelder werden auf + SalesRecord-Felder gemappt. + + + + Einzeln exportieren + Standort pruefen, Fehler + direkt in UI sehen. + + + + Alle exportieren + Aktive Standorte laden + und zentral speichern. + + + + Finance-Regeln pflegen + UI fuer Referenzen, Kurse + und IC-Regeln fehlt noch. + + + + Logs lesen + Export- und App-Events + zeigen Laufhistorie. + + + + + + + ZSCHWEIZ bereitstellen + ABAP fuellt 1100 CH + und 1200 AT in SAP. + + + + Metadata lesen + OData EntitySets und Felder + werden aus Gateway geladen. + + + + Legacy stabil halten + BI1/SAGE B1-Pfad bleibt, + bis Mappings migriert sind. + + + + Composer erweitern + SAP OData und HANA + teilen Mapping-Engine. + + + + Regeln versionieren + Config-Export enthaelt + Mappings und Finance-Regeln. + + + + Technische Schulden abbauen + Manual Excel Mapping + noch vereinheitlichen. + + + + + + Kernfunktion + + Naechster Ausbau + + Kontrollpunkt + Lesart: + Von links nach rechts entsteht der Wertfluss von Quelle bis Abgleich; Zeilen zeigen die beteiligten Rollen. + + + diff --git a/TrafagSalesExporter/docs/standorte_systeme.xlsx b/TrafagSalesExporter/docs/standorte_systeme.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ee31e9d49e9aa40e937bca2dfe144648d364f22c GIT binary patch literal 8144 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 literal 0 HcmV?d00001