1125 lines
39 KiB
Markdown
1125 lines
39 KiB
Markdown
# Next Steps
|
|
|
|
Stand: 2026-05-19
|
|
|
|
## 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.
|
|
|
|
## 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.
|
|
|
|
## 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.
|
|
|
|
## 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.
|
|
|
|
## 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.
|
|
|
|
## 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.
|
|
|
|
## 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.
|
|
|
|
## 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.
|
|
|
|
## 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.
|
|
|
|
## 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.
|
|
|
|
## 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.
|
|
|
|
## 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`
|
|
|
|
## 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
|
|
|
|
## 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
|
|
|
|
### 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.
|
|
|
|
### 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
|
|
|
|
## 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
|
|
|
|
## 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`
|
|
|
|
### 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
|
|
|
|
### 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
|
|
|
|
### 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`
|
|
|
|
## 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
|
|
|
|
### 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
|
|
|
|
## 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
|
|
|
|
### Neue Top-Prioritaeten ab jetzt
|
|
|
|
#### 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
|
|
|
|
#### 2. Retry-/Robustheitslayer
|
|
|
|
Prio hoch.
|
|
|
|
Vor allem fuer:
|
|
|
|
- SharePoint
|
|
- SAP Gateway
|
|
- HANA-nahe Netzpfade
|
|
|
|
Aktuell brechen diese Integrationen bei transienten Problemen zu direkt ab.
|
|
|
|
#### 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
|
|
|
|
#### 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
|
|
|
|
#### 5. MudBlazor-Analyzer-Warnungen bereinigen
|
|
|
|
Prio mittel.
|
|
|
|
Nicht kritisch fuer Produktion, aber sinnvoll fuer sauberen Build:
|
|
|
|
- `Logs.razor`
|
|
- `Transformations.razor`
|
|
- `Standorte.razor`
|
|
|
|
### 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
|
|
|
|
## 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
|
|
|
|
## 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
|
|
|
|
### Neue Top-Prioritaeten
|
|
|
|
#### 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
|
|
|
|
#### 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
|
|
|
|
#### 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
|
|
|
|
#### 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.
|
|
|
|
#### 5. Reporting verallgemeinern
|
|
|
|
Prio mittel.
|
|
|
|
Erst nach den Infrastrukturthemen:
|
|
|
|
- hartcodierte Jahreslogik im Cockpit entfernen
|
|
- fachlich entscheiden, ob und wo CHF-Rohsicht gebraucht wird
|
|
|
|
### 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
|
|
|
|
## 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
|
|
|
|
### 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
|
|
|
|
### 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
|
|
|
|
## 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
|
|
|
|
### 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
|
|
|
|
## Nachtrag 2026-04-16
|
|
|
|
Seit dem letzten Stand kamen mehrere groessere Erweiterungen dazu. Die offenen Punkte unten muessen deshalb im neuen Kontext gelesen werden.
|
|
|
|
## 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
|
|
|
|
## 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
|
|
|
|
## 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`
|
|
|
|
## 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
|
|
|
|
## 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`
|
|
|
|
## 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`
|
|
|
|
## 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
|
|
|
|
## 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`
|
|
|
|
## 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`
|
|
|
|
## 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.
|
|
|
|
## 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
|
|
|
|
## 7. Referenzdatei
|
|
|
|
Fuer den vollstaendigen Kontext zuerst lesen:
|
|
|
|
- `HANDOFF_2026-04-15.md`
|
|
|
|
## 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.
|
|
|
|
## 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
|