Document workflow deltas and clean up docs

This commit is contained in:
2026-06-10 09:15:46 +02:00
parent 586adc33fe
commit d1d50e9c0c
25 changed files with 670 additions and 379 deletions
@@ -1,6 +1,67 @@
# Deployment / IIS Handoff 2026-05-19
Letzter Nachtrag: 2026-05-29
Letzter Nachtrag: 2026-06-10
## Nachtrag 2026-06-10 Deploy India / SAGE HANA Mapping
Durchgefuehrt:
- Release-Publish aus `TrafagSalesExporter` nach:
```text
\\trch-webapp-bidashboard.trafagch.local\BiDashboard$\
```
- Befehl:
```powershell
dotnet publish .\TrafagSalesExporter.csproj -c Release --no-restore /p:PublishProfile=FolderProfile --verbosity minimal
```
- App wurde fuer Publish und DB-Seed kurz per `app_offline.htm` gestoppt und danach wieder online geschaltet.
Deploy-Inhalt:
- Seed-Reparatur fuer India/TRIN:
- Standort `TRIN` / `Indien`
- `SourceSystem = SAGE`
- Schema `TRAFAG_LIVE`
- zentraler SAGE-HANA-Server `20.197.20.60:30015`
- Vorhandene Standort-Credentials bleiben erhalten; der produktive TRIN-Override nutzt `TRAFAGCONTROLS`.
- Regressionstest fuer die alte Drift-Konfiguration: TRIN auf BI1, India-Server ohne SourceSystem, leerer SAGE-Server.
Share-/DB-Pruefung:
- `BiDashboard.dll` Zeitstempel nach Deploy: `10.06.2026 08:20:25`.
- `app_offline.htm` wurde entfernt.
- Server-DB-Backup vor Seed:
```text
\\trch-webapp-bidashboard.trafagch.local\BiDashboard$\trafag_exporter.db.before-india-sage-20260610-0825.bak
```
- Server-DB nach Seed:
- `TRIN -> SAGE -> 20.197.20.60:30015`
- Schema `TRAFAG_LIVE`
- User-Override `TRAFAGCONTROLS`
- Passwort-Override vorhanden
Validierung:
```powershell
dotnet test TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --verbosity minimal
```
Ergebnis:
```text
84/84 Tests gruen
```
Einschraenkung:
- Kein echter India-HANA-Verbindungstest von der Entwicklungsmaschine aus.
- Lokaler `Invoke-WebRequest` gegen `https://trch-webapp-bidashboard.trafagch.local/BiDashboard/` scheitert weiterhin am bekannten lokalen TLS-/Empfangsproblem; Publish und Share-/DB-Pruefung waren erfolgreich.
## Nachtrag 2026-05-29 Deploy Sparten-Finanzanalyse
@@ -232,7 +232,7 @@ Exportskripte:
```text
scripts/Export-SageSpainSalesCsv.ps1
SageSpainFinalExportPackage/Export-SageSpainSalesCsv.ps1
SageSpainExportPackage/SageSpainFinalExportPackage/Export-SageSpainSalesCsv.ps1
```
Sage-SQL-Formel im Export:
@@ -555,6 +555,6 @@ Services/DatabaseSeedService.cs
FinanceReference-Sollwerte, UK Mapping, ZSCHWEIZ Mapping, Default-Waehrungen
scripts/Export-SageSpainSalesCsv.ps1
SageSpainFinalExportPackage/Export-SageSpainSalesCsv.ps1
SageSpainExportPackage/SageSpainFinalExportPackage/Export-SageSpainSalesCsv.ps1
Spanien Sage SQL Export und Gutschrift-Logik
```
@@ -1,13 +0,0 @@
# Finance Dashboard Todo
Stand: 2026-05-27
Historische Todo-Liste, fuer RAG komprimiert.
Aktueller Finance-Kontext steht in `docs/rag/FINANCE.md`.
Volltext bei Bedarf:
```text
docs/raw_md_archive/HISTORY_CANONICAL.md.raw
```
@@ -4,6 +4,8 @@ Stand: 2026-06-08
Zweck: Diese Notiz beschreibt den tatsaechlichen technischen Datenfluss im Finance Cockpit: wo Daten geholt werden, wann Felder veraendert werden, wann Wechselkurse wirken, wie die zentrale Excel entsteht und welche Quelle die Sparteninformationen liefert.
Fokus nur Wechselkurs/Kursanwendung: `docs/FINANCE_KURS_WORKFLOW_2026-06-09.md`.
## Kurzfazit
- Finance Summary, Management Analyse und Spartenanalyse lesen nicht aus dem SharePoint-Excel, sondern direkt aus der App-Datenbank `CentralSalesRecords`.
@@ -213,6 +215,8 @@ INSERT neue Records fuer diesen Standort
Es gibt drei getrennte Faelle.
Detail nur zum Kursfluss vom Land bis zur zentralen Dashboard-Analyse: `docs/FINANCE_KURS_WORKFLOW_2026-06-09.md`.
### 1. Standard-Finance-Soll/Ist und Finance Summary
Kein allgemeiner Wechselkurs wird angewendet.
@@ -458,4 +462,3 @@ Zentrale Excel
6. Wechselkurse sind keine stille Vorverarbeitung fuer den Standard-Soll/Ist-Abgleich.
7. `Mixed` bedeutet: mehrere Waehrungen im Filter. Prozentwerte auf `Mixed` sind nur eingeschraenkt interpretierbar; fuer belastbare Spartenanteile nach Wert muss Land oder Waehrung gefiltert werden.
8. Die zentrale Excel wird nach den Standortexporten aus `CentralSalesRecords` erstellt. Sie ist Ergebnis, nicht Eingang.
@@ -1,13 +0,0 @@
# Finance ES Mail Abweichung
Stand: 2026-05-27
Historischer Mailentwurf, fuer RAG komprimiert.
Aktueller Spanien-/Finance-Kontext steht in `docs/rag/FINANCE.md`.
Volltext bei Bedarf:
```text
docs/raw_md_archive/HISTORY_CANONICAL.md.raw
```
@@ -1,21 +0,0 @@
# Finance Handoff
Stand: 2026-05-27
Diese Datei ist fuer tokenarme RAG-Nutzung komprimiert.
## Aktueller Kurzstand
- Fuehrende Finance-Kurzdatei: `docs/rag/FINANCE.md`.
- Manual-Import-Kontext: `docs/rag/MANUAL_IMPORT.md`.
- Aktuelle Finance-Regeln im Detail: `docs/FINANCE_ENTSCHEIDE.md` und `docs/FINANCE_BERECHNUNGSFORMELN_LAENDER_2026-05-19.md`.
## Volltext Bei Bedarf
Die Detailhistorie liegt hier:
```text
docs/raw_md_archive/HISTORY_CANONICAL.md.raw
```
Nur laden, wenn der Zwischenstand vom 2026-05-18 oder alte Finance-Abweichungen genau nachvollzogen werden muessen.
@@ -1,13 +0,0 @@
# Finance IT Mail Abweichung
Stand: 2026-05-27
Historischer Mailentwurf, fuer RAG komprimiert.
Aktueller Italien-/Finance-Kontext steht in `docs/rag/FINANCE.md`.
Volltext bei Bedarf:
```text
docs/raw_md_archive/HISTORY_CANONICAL.md.raw
```
@@ -0,0 +1,313 @@
# Finance Kurs-Workflow
Stand: 2026-06-09
Zweck: Diese Doku beschreibt isoliert den Weg eines Umrechnungskurses vom einzelnen Land bis zur Analyse eines zentralen Dashboard-Wertes. Sie ersetzt nicht die allgemeine Finance-Datenflussdoku, sondern schneidet nur das Thema Kurs/Waehrung heraus.
Visualisierung: `docs/FINANCE_KURS_WORKFLOW_2026-06-09.svg`
![Finance Kurs-Workflow](FINANCE_KURS_WORKFLOW_2026-06-09.svg)
## Kurzfazit
- Der Standortimport rechnet Werte normalerweise nicht ueber die App-Kurstabelle um.
- `CentralSalesRecords` speichert die Werte und Waehrungen so, wie sie nach Import und optionalen Transformationen vorliegen.
- `DocumentRate` ist ein Quellfeld aus SAP/B1/OData, kein automatisch angewendeter App-Kurs.
- Die fuehrende `Finance Summary` und das zentrale Excel nutzen Hauswaehrung je Land. Die App-Kurstabelle wird dort nicht still angewendet.
- Eine echte App-Umrechnung passiert nur in Analyse-/Anzeige-Sichten mit Zielwaehrung, in einer expliziten `ConvertCurrency`-Transformation oder im separaten Budget-CHF-Kandidaten.
- Wenn in einer Zielwaehrung kein Kurs gefunden wird, fliesst diese Zeile mit `0` in die Anzeige-Summe ein und wird als fehlender Kurs gezaehlt.
## Begriffe
| Begriff | Bedeutung |
| --- | --- |
| Hauswaehrung | Fuehrende Finance-Waehrung des Landes, z. B. `EUR`, `CHF`, `GBP`, `USD`, `INR`. |
| `SalesCurrency` | Waehrung von `SalesPriceValue`; fuer Dashboard-Umrechnung die wichtigste Quellwaehrung. |
| `CompanyCurrency` | lokale Firmen-/Hauswaehrung aus dem Quellsystem, soweit vorhanden. |
| `DocumentCurrency` | Belegwaehrung, z. B. Fremdwaehrung eines einzelnen Kundenbelegs. |
| `DocumentRate` | Belegkurs aus dem ERP-Quellsystem. Wird gespeichert, aber nicht automatisch fuer Dashboard-Umrechnung verwendet. |
| App-Kurstabelle | Tabelle `CurrencyExchangeRates` mit `FromCurrency`, `ToCurrency`, `Rate`, `ValidFrom`, `ValidTo`, `Notes`, `IsActive`. |
| Anzeige-Waehrung | Zielwaehrung in Analyse-Sichten, aktuell `NATIVE`, `CHF`, `EUR`, `USD`. |
| Budgetkurs | Kurs mit `Notes = Budget <Jahr>`, z. B. `Budget 2025`, fuer separaten CHF-Kontrollkandidaten. |
## Gesamtfluss
```text
Land / Quellsystem
|
+-- Werte und Waehrungen lesen
| SalesPriceValue, SalesCurrency, CompanyCurrency,
| DocumentCurrency, DocumentTotal FC/LC, DocumentRate
|
+-- optionale FieldTransformationRules
| normal: keine Kursumrechnung
| Ausnahme: ConvertCurrency schreibt dauerhaft ein Zielfeld
|
+-- Standort-Excel schreiben
|
+-- CentralSalesRecords fuer Standort ersetzen
|
+-- zentrale Excel / Finance Summary
| Hauswaehrung, keine stille App-Kursumrechnung
|
+-- Management Analyse / Rohdaten-Diagnose mit Zielwaehrung
Kurstabelle suchen -> Betrag * Kurs -> zentrale Anzeige-Summe
```
## Schritt 1: Land liefert Betrag und Waehrung
Jedes Land liefert zuerst einen Nettowert und die dazugehoerige Waehrungsinformation. Der Kurs selbst wird dabei nur als Quellinformation uebernommen, nicht automatisch angewendet.
| Land / TSC | Quelle | Fuehrender Importwert | Waehrungsfelder | Kursfeld aus Quelle |
| --- | --- | --- | --- | --- |
| CH / AT `ZSCHWEIZ` | SAP OData | `Z.NetwrHc` -> `SalesPriceValue` | `Z.Hwaer` -> `SalesCurrency` / `CompanyCurrency`, `Z.Waerk` -> `DocumentCurrency` | `Z.Kurrf` -> `DocumentRate` |
| FR `TRFR` | SAP B1/HANA | `INV1.LineTotal`, Credit Notes negativ | `OADM.MainCurncy`, `OINV.DocCur` | `OINV.DocRate` / `ORIN.DocRate` |
| IT `TRIT` | SAP B1/HANA | `INV1.LineTotal`, Credit Notes negativ, mit IT-Filter | `OADM.MainCurncy`, `DocCur` | `DocRate` |
| US `TRUS` | SAP B1/HANA | `INV1.LineTotal`, Credit Notes negativ | `OADM.MainCurncy`, `DocCur` | `DocRate` |
| IN `TRIN` | HANA/Sage-Quelle | Hauswaehrungswert in INR | Finance-Hauswaehrung `INR` | ggf. Quellkurs, nicht fuehrend fuer Soll/Ist |
| UK `TRUK` | Sage/Manual Excel | `[Sales Price/Value] * [Quantity]` | `GBP` | kein App-Kurs beim Import |
| ES `TRES` | Sage CSV | `ImporteNeto`, REC/Credit negativ | `EUR` | kein App-Kurs beim Import |
| DE `TRDE` | Alphaplan Excel | `NettoPreisGesamtX` | `Waehrung` / aktuell fachlich `EUR` | kein App-Kurs beim Import |
Wichtig: Ein vorhandener ERP-Belegkurs erklaert die Beziehung zwischen Belegwaehrung und lokaler Hauswaehrung im Quellsystem. Die App nutzt fuer die zentrale Anzeigeumrechnung trotzdem die eigene Kurstabelle, sobald eine Zielwaehrung gewaehlt wird.
## Schritt 2: Kurstabelle pflegen
Die App-Kurse liegen in `CurrencyExchangeRates`.
Pflegeorte:
- `Settings > Wechselkurse`: Kurse manuell erfassen, aktivieren/deaktivieren und speichern.
- `Refresh Kurse`: importiert ECB-Tageskurse als `EUR -> <Waehrung>` mit Notiz `ECB daily reference rate`.
- Seed beim App-Start: Budgetkurse fuer `Budget 2025` und `Budget 2026`, jeweils zur Umrechnung in `CHF`.
- Konfigurationsexport/-import: Kurse sind Teil des Config-Transferpakets.
Technische Regeln beim Speichern:
- Waehrungscodes werden getrimmt und in Grossbuchstaben gespeichert.
- Leere Waehrungen und Kurse `<= 0` werden verworfen.
- `ValidFrom` und `ValidTo` werden auf Datum ohne Uhrzeit normalisiert.
## Schritt 3: Kurs aufloesen
Die zentrale Kursaufloesung laeuft ueber `CurrencyExchangeRateService.ResolveRate(from, to, date)`.
Reihenfolge:
1. Waehrungscodes normalisieren, z. B. `$` -> `USD`, `SFR` -> `CHF`, `RS` -> `INR`.
2. Gleiche Waehrung ergibt Kurs `1`.
3. Wirksames Datum bestimmen. Ohne Datum wird das heutige UTC-Datum verwendet.
4. Direkten aktiven Kurs suchen: `FromCurrency = Quelle`, `ToCurrency = Ziel`, Datum innerhalb `ValidFrom`/`ValidTo`.
5. Wenn kein direkter Kurs existiert: inversen Kurs suchen und `1 / Rate` rechnen.
6. Wenn weiterhin kein Kurs existiert: Kreuzkurs ueber `EUR` suchen.
7. Wenn nichts passt: Ergebnis `null`.
Bei mehreren gueltigen Kursen gewinnt der mit dem neuesten `ValidFrom`.
## Schritt 4: Standortexport und zentrale Tabelle
Beim normalen Standortexport gilt:
```text
Daten holen
-> Transformationen anwenden
-> Standort-Excel schreiben
-> CentralSalesRecords fuer diesen Standort ersetzen
-> optional SharePoint Upload
```
Ohne aktive `ConvertCurrency`-Transformation passiert keine App-Kursumrechnung. `CentralSalesRecords` erhaelt:
- den Importwert `SalesPriceValue`,
- die zugehoerige `SalesCurrency`,
- Belegfelder wie `DocumentCurrency`, `DocumentTotalForeignCurrency`, `DocumentTotalLocalCurrency`, `DocumentRate`,
- die Datumsfelder `PostingDate`, `InvoiceDate`, `ExtractionDate`.
Damit bleibt nachvollziehbar, ob ein Wert bereits vom Landessystem als Hauswaehrungswert geliefert wurde oder ob er spaeter nur in der Anzeige umgerechnet wurde.
## Schritt 5: Fuehrende Finance Summary
Die fuehrende Finance Summary im Dashboard und das zentrale Excel-Blatt `Finance Summary` rechnen nicht automatisch in eine globale Zielwaehrung um.
Logik:
```text
CentralSalesRecords
-> FinanceRuleEngine
-> Finance | Net Sales Actual
-> Gruppierung nach Jahr, Land, Finance-Waehrung
```
Die Finance-Waehrung ist je Land fest bzw. aus dem Hauswaehrungskontext bestimmt:
| Land | Finance-Waehrung |
| --- | --- |
| CH | CHF |
| AT | EUR |
| DE | EUR |
| ES | EUR |
| FR | EUR |
| IN | INR |
| IT | EUR |
| UK | GBP |
| US | USD |
Der Waehrungsfilter in `Finance Summary` ist deshalb ein Filter auf diese vorhandene Finance-Waehrung. Er ist keine Umrechnung.
Konsequenz:
- `Finance Summary` mit Filter `GBP` zeigt UK-Werte in GBP.
- `Finance Summary` mit mehreren Laendern kann `Mixed` anzeigen.
- Es wird dabei kein EUR/GBP/CHF-Kurs aus `CurrencyExchangeRates` angewendet.
## Schritt 6: Zentrale Analyse mit Anzeige-Waehrung
Die Kursanwendung fuer einen zentralen Dashboard-Wert passiert in der Management-Analyse der zentralen Rohdaten, wenn eine Anzeige-Waehrung gewaehlt ist.
Eingaben:
- Datenbasis: `CentralSalesRecords`.
- Summenfeld: z. B. `SalesPriceValue`, `StandardCost`, `StandardCostTotal`, `Quantity`.
- Anzeige-Waehrung: `NATIVE`, `CHF`, `EUR` oder `USD`.
- Zeitraum/Filter: Jahr, Monat, Land, TSC.
Waehrungsquelle je Summenfeld:
| Summenfeld | Waehrung fuer Kurs |
| --- | --- |
| `SalesPriceValue` | `SalesCurrency` |
| `StandardCost` | `StandardCostCurrency` |
| `StandardCostTotal` | `StandardCostCurrency` |
| `Quantity` | keine Waehrung; Anzeige-Waehrung wird ignoriert |
Datumswahl fuer zentrale Analyse:
| Setting `ExchangeRateDateField` | Kursdatum |
| --- | --- |
| `PostingDate` | `PostingDate`, sonst `InvoiceDate`, sonst `ExtractionDate` |
| `InvoiceDate` | `InvoiceDate`, sonst `PostingDate`, sonst `ExtractionDate` |
| `ExtractionDate` | `ExtractionDate` |
Formel bei Zielwaehrung:
```text
Anzeige-Wert je Zeile = Quellwert * ResolveRate(Quellwaehrung, Zielwaehrung, Kursdatum)
Zentraler Dashboard-Wert = Summe aller Anzeige-Werte im Filter
```
Sonderfaelle:
- Zielwaehrung `NATIVE`: keine Umrechnung; Werte bleiben in ihrer Quellwaehrung.
- Quellwaehrung gleich Zielwaehrung: Faktor `1`.
- Kurs fehlt: Anzeige-Wert dieser Zeile wird `0`, `MissingExchangeRateCount` steigt.
- Mehrere native Waehrungen im Ergebnis: Anzeige `Mixed`.
Diese Umrechnung ist eine Laufzeit-Anzeige. Sie aendert `CentralSalesRecords`, Standort-Excel und zentrales Excel nicht.
## Schritt 7: Explizite Transformation `ConvertCurrency`
Nur wenn eine aktive `FieldTransformationRule` mit `TransformationType = ConvertCurrency` existiert, wird beim Standortexport dauerhaft ein Feld umgerechnet.
Beispielargument:
```text
amountField=SalesPriceValue;
currencyField=SalesCurrency;
targetCurrency=EUR;
dateField=InvoiceDate;
targetCurrencyField=SalesCurrency;
round=2
```
Wirkung:
- Quelle und Ziel werden ueber die App-Kurstabelle aufgeloest.
- `TargetField` erhaelt den umgerechneten Betrag.
- Optional wird ein Ziel-Waehrungsfeld gesetzt.
- Diese Veraenderung liegt danach in Standort-Excel und `CentralSalesRecords`.
Fallback-Datum in `ConvertCurrency`:
```text
konfiguriertes dateField
sonst InvoiceDate
sonst OrderDate
sonst ExtractionDate
```
Damit ist `ConvertCurrency` ein anderer Pfad als die Anzeige-Waehrung in der zentralen Analyse.
## Schritt 8: Budget-CHF-Kandidat
Im Soll/Ist-Vergleich gibt es einen separaten Kandidaten:
```text
Nettofakturawert Hauswaehrung -> CHF Budget <Jahr>
```
Dieser Kandidat nutzt nur Kurse mit:
```text
Notes = Budget 2025
Notes = Budget 2026
```
Er ist eine Kontroll-/Reporting-Sicht. Er ersetzt nicht den Standardabgleich in Hauswaehrung.
## Analysepfad fuer eine konkrete Kursfrage
Wenn ein zentraler Wert im Dashboard wegen Kursen geprueft werden soll:
1. Land/TSC und Quellwert pruefen: `SalesPriceValue`, `SalesCurrency`, `CompanyCurrency`, `DocumentCurrency`, `DocumentRate`.
2. Klaeren, welche Dashboard-Sicht gemeint ist:
- `Finance Summary`: keine App-Kursumrechnung, nur Waehrungsfilter.
- zentrale Rohdaten-/Management-Analyse mit Anzeige-Waehrung: App-Kursumrechnung.
- `ConvertCurrency`: dauerhafte Transformation beim Export.
3. In den Settings das Kursdatum pruefen: `PostingDate`, `InvoiceDate` oder `ExtractionDate`.
4. In `CurrencyExchangeRates` den gueltigen Kurs zum Datum suchen.
5. Direkte, inverse und EUR-Kreuzkurslogik beachten.
6. Im Dashboard `Nicht umgerechnet` / `MissingExchangeRateCount` kontrollieren.
7. Falls `Mixed` angezeigt wird, wurde nicht in eine einheitliche Zielwaehrung gerechnet.
Hilfsabfragen fuer SQLite:
```sql
SELECT Land, Tsc, SalesCurrency, CompanyCurrency, DocumentCurrency,
COUNT(*) AS Rows,
SUM(SalesPriceValue) AS SalesValue
FROM CentralSalesRecords
GROUP BY Land, Tsc, SalesCurrency, CompanyCurrency, DocumentCurrency
ORDER BY Land, Tsc;
```
```sql
SELECT FromCurrency, ToCurrency, Rate, ValidFrom, ValidTo, Notes, IsActive
FROM CurrencyExchangeRates
WHERE IsActive = 1
ORDER BY FromCurrency, ToCurrency, ValidFrom DESC;
```
## Code-Stellen
| Thema | Code |
| --- | --- |
| Kursmodell | `Models/CurrencyExchangeRate.cs` |
| Kursaufloesung | `Services/CurrencyExchangeRateService.cs` |
| ECB-Import | `Services/ExchangeRateImportService.cs` |
| Settings/Kurspflege | `Services/SettingsPageService.cs`, `Components/Pages/Settings.razor` |
| Standortexport-Reihenfolge | `Services/SiteExportService.cs` |
| zentrale Speicherung | `Services/CentralSalesRecordService.cs` |
| zentrale Analyse mit Zielwaehrung | `Services/ManagementCockpitService.cs` |
| Finance Summary ohne stille Umrechnung | `Services/ManagementCockpitService.cs`, `Services/ExcelExportService.cs` |
| Budget-CHF-Kandidat | `Services/FinanceReconciliationService.cs` |
| ConvertCurrency | `Services/TransformationStrategies.cs` |
## Nicht verwechseln
| Nicht verwechseln | Klarstellung |
| --- | --- |
| `DocumentRate` vs. App-Kurstabelle | `DocumentRate` kommt aus dem Landessystem; App-Umrechnung nutzt `CurrencyExchangeRates`. |
| Finance-Waehrungsfilter vs. Anzeige-Waehrung | Finance-Waehrungsfilter filtert vorhandene Hauswaehrungen; Anzeige-Waehrung rechnet Werte um. |
| Zentrale Excel vs. Dashboard-Livewert | Die App-Anzeige liest `CentralSalesRecords`; SharePoint-Excel ist Ergebnis/Ablage. |
| Budget-CHF vs. Tageskurs | Budgetkurse sind eigene Kontrollkurse, nicht automatisch der Standard-Ist. |
| Native/Mixed vs. konvertiert | `NATIVE` summiert je Quellwaehrung; `Mixed` heisst mehrere Waehrungen im Ergebnis. |
@@ -0,0 +1,194 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1500" height="1050" viewBox="0 0 1500 1050" role="img" aria-labelledby="title desc">
<title id="title">Finance Kurs-Workflow</title>
<desc id="desc">Visualisierung des Kursflusses vom Land ueber CentralSalesRecords bis zur zentralen Dashboard-Analyse.</desc>
<defs>
<marker id="arrow-blue" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto" markerUnits="strokeWidth">
<path d="M 0 0 L 12 6 L 0 12 z" fill="#2457a6" />
</marker>
<marker id="arrow-green" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto" markerUnits="strokeWidth">
<path d="M 0 0 L 12 6 L 0 12 z" fill="#2f7d4f" />
</marker>
<marker id="arrow-orange" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto" markerUnits="strokeWidth">
<path d="M 0 0 L 12 6 L 0 12 z" fill="#b35c00" />
</marker>
<style>
.page { fill: #f7f8fb; }
.title { font: 700 32px Arial, sans-serif; fill: #172033; }
.subtitle { font: 400 16px Arial, sans-serif; fill: #4a5568; }
.box-title { font: 700 17px Arial, sans-serif; fill: #172033; }
.box-text { font: 400 14px Arial, sans-serif; fill: #253044; }
.small { font: 400 12px Arial, sans-serif; fill: #4a5568; }
.label { font: 700 13px Arial, sans-serif; fill: #172033; }
.box { fill: #ffffff; stroke: #c7d2e3; stroke-width: 2; rx: 8; }
.source { fill: #eef5ff; stroke: #8fb2e6; }
.store { fill: #f1f7f3; stroke: #8abf9d; }
.finance { fill: #eef8f0; stroke: #6fa87d; }
.analysis { fill: #fff5e6; stroke: #e0a349; }
.warning { fill: #fff1f0; stroke: #d96863; }
.table { fill: #f6f0ff; stroke: #ad94d6; }
.muted { fill: #f3f5f8; stroke: #b8c2cf; }
.line-blue { fill: none; stroke: #2457a6; stroke-width: 3; marker-end: url(#arrow-blue); }
.line-green { fill: none; stroke: #2f7d4f; stroke-width: 3; marker-end: url(#arrow-green); }
.line-orange { fill: none; stroke: #b35c00; stroke-width: 3; marker-end: url(#arrow-orange); }
.line-dashed { stroke-dasharray: 8 7; }
</style>
</defs>
<rect class="page" x="0" y="0" width="1500" height="1050" />
<text class="title" x="60" y="58">Finance Kurs-Workflow</text>
<text class="subtitle" x="60" y="86">Vom einzelnen Land ueber CentralSalesRecords bis zur Analyse eines zentralen Dashboard-Wertes</text>
<g transform="translate(60 112)">
<rect class="source" x="0" y="0" width="260" height="165" rx="8" />
<text class="box-title" x="18" y="30">1. Land / Quellsystem</text>
<text class="box-text" x="18" y="62">
<tspan x="18" dy="0">SAP OData: CH / AT</tspan>
<tspan x="18" dy="24">SAP B1/HANA: FR / IT / US</tspan>
<tspan x="18" dy="24">HANA/Sage: IN</tspan>
<tspan x="18" dy="24">Sage/Excel/Alphaplan: UK / ES / DE</tspan>
</text>
<text class="small" x="18" y="145">Quelle liefert Wert, Waehrung und ggf. ERP-Belegkurs.</text>
</g>
<g transform="translate(370 112)">
<rect class="source" x="0" y="0" width="285" height="165" rx="8" />
<text class="box-title" x="18" y="30">2. Importwert</text>
<text class="box-text" x="18" y="62">
<tspan x="18" dy="0">SalesPriceValue</tspan>
<tspan x="18" dy="24">SalesCurrency / CompanyCurrency</tspan>
<tspan x="18" dy="24">DocumentCurrency</tspan>
<tspan x="18" dy="24">DocumentTotal FC / LC</tspan>
<tspan x="18" dy="24">DocumentRate als Quellinfo</tspan>
</text>
</g>
<g transform="translate(705 112)">
<rect class="muted" x="0" y="0" width="285" height="165" rx="8" />
<text class="box-title" x="18" y="30">3. Transformationen</text>
<text class="box-text" x="18" y="62">
<tspan x="18" dy="0">Normalfall: keine Kursumrechnung</tspan>
<tspan x="18" dy="26">Feldregeln koennen Werte kopieren,</tspan>
<tspan x="18" dy="22">normalisieren oder konstant setzen.</tspan>
<tspan x="18" dy="30">Ausnahme: ConvertCurrency</tspan>
<tspan x="18" dy="22">schreibt dauerhaft ein Zielfeld.</tspan>
</text>
</g>
<g transform="translate(1040 112)">
<rect class="store" x="0" y="0" width="285" height="165" rx="8" />
<text class="box-title" x="18" y="30">4. CentralSalesRecords</text>
<text class="box-text" x="18" y="62">
<tspan x="18" dy="0">Zentraler operativer Datenbestand</tspan>
<tspan x="18" dy="26">pro Standort komplett ersetzt</tspan>
<tspan x="18" dy="26">enthaelt Werte nach Import und</tspan>
<tspan x="18" dy="22">optionalen Transformationen</tspan>
</text>
<text class="small" x="18" y="143">SharePoint-Excel ist Ablage, nicht Live-Quelle.</text>
</g>
<path class="line-blue" d="M 320 195 L 360 195" />
<path class="line-blue" d="M 655 195 L 695 195" />
<path class="line-blue" d="M 990 195 L 1030 195" />
<g transform="translate(105 345)">
<rect class="finance" x="0" y="0" width="385" height="175" rx="8" />
<text class="box-title" x="18" y="30">5A. Finance Summary / zentrales Excel</text>
<text class="box-text" x="18" y="63">
<tspan x="18" dy="0">FinanceRuleEngine bildet Net Sales Actual.</tspan>
<tspan x="18" dy="26">Fuehrend ist die Hauswaehrung je Land:</tspan>
<tspan x="18" dy="24">CH CHF, AT/DE/ES/FR/IT EUR,</tspan>
<tspan x="18" dy="24">IN INR, UK GBP, US USD.</tspan>
</text>
<text class="small" x="18" y="153">Waehrungsfilter = Filter, keine Umrechnung.</text>
</g>
<g transform="translate(560 345)">
<rect class="warning" x="0" y="0" width="335" height="175" rx="8" />
<text class="box-title" x="18" y="30">Nicht still umrechnen</text>
<text class="box-text" x="18" y="63">
<tspan x="18" dy="0">DocumentRate bleibt Quellfeld.</tspan>
<tspan x="18" dy="26">CurrencyExchangeRates werden hier</tspan>
<tspan x="18" dy="24">nicht automatisch angewendet.</tspan>
<tspan x="18" dy="30">Mixed bedeutet: mehrere Waehrungen</tspan>
<tspan x="18" dy="22">im aktuellen Filter.</tspan>
</text>
</g>
<path class="line-green" d="M 1180 285 C 1180 325, 360 300, 315 340" />
<path class="line-green" d="M 490 432 L 550 432" />
<g transform="translate(105 625)">
<rect class="analysis" x="0" y="0" width="390" height="205" rx="8" />
<text class="box-title" x="18" y="30">5B. Zentrale Analyse mit Zielwaehrung</text>
<text class="box-text" x="18" y="63">
<tspan x="18" dy="0">Anzeige-Waehrung: NATIVE, CHF, EUR, USD</tspan>
<tspan x="18" dy="28">Summenfeld:</tspan>
<tspan x="38" dy="24">SalesPriceValue -> SalesCurrency</tspan>
<tspan x="38" dy="24">StandardCost -> StandardCostCurrency</tspan>
<tspan x="38" dy="24">Quantity -> keine Waehrung</tspan>
</text>
<text class="small" x="18" y="183">Diese Umrechnung ist nur Anzeige/Laufzeit.</text>
</g>
<g transform="translate(560 625)">
<rect class="table" x="0" y="0" width="340" height="205" rx="8" />
<text class="box-title" x="18" y="30">CurrencyExchangeRates</text>
<text class="box-text" x="18" y="63">
<tspan x="18" dy="0">FromCurrency / ToCurrency / Rate</tspan>
<tspan x="18" dy="26">ValidFrom / ValidTo / IsActive</tspan>
<tspan x="18" dy="32">ResolveRate-Reihenfolge:</tspan>
<tspan x="38" dy="24">1. direkt</tspan>
<tspan x="38" dy="24">2. invers</tspan>
<tspan x="38" dy="24">3. EUR-Kreuzkurs</tspan>
</text>
</g>
<g transform="translate(965 625)">
<rect class="analysis" x="0" y="0" width="390" height="205" rx="8" />
<text class="box-title" x="18" y="30">6. Zentraler Dashboard-Wert</text>
<text class="box-text" x="18" y="63">
<tspan x="18" dy="0">Anzeige-Wert je Zeile = Wert * Kurs</tspan>
<tspan x="18" dy="30">Summe = alle Anzeige-Werte im Filter</tspan>
<tspan x="18" dy="30">Kurs fehlt:</tspan>
<tspan x="38" dy="24">Zeile zaehlt mit 0</tspan>
<tspan x="38" dy="24">MissingExchangeRateCount steigt</tspan>
</text>
<text class="small" x="18" y="183">CentralSalesRecords bleiben unveraendert.</text>
</g>
<path class="line-orange" d="M 1180 285 C 1180 560, 280 555, 280 615" />
<path class="line-orange" d="M 500 727 L 550 727" />
<path class="line-orange" d="M 900 727 L 955 727" />
<g transform="translate(705 890)">
<rect class="muted" x="0" y="0" width="300" height="110" rx="8" />
<text class="box-title" x="18" y="30">ConvertCurrency</text>
<text class="box-text" x="18" y="62">
<tspan x="18" dy="0">aktive Transformation beim Export</tspan>
<tspan x="18" dy="24">schreibt dauerhaft ein Zielfeld</tspan>
</text>
</g>
<g transform="translate(1045 890)">
<rect class="muted" x="0" y="0" width="300" height="110" rx="8" />
<text class="box-title" x="18" y="30">Budget-CHF-Kandidat</text>
<text class="box-text" x="18" y="62">
<tspan x="18" dy="0">Notes = Budget 2025 / 2026</tspan>
<tspan x="18" dy="24">Kontrollsicht, nicht Standard-Ist</tspan>
</text>
</g>
<path class="line-orange line-dashed" d="M 835 885 C 835 850, 770 850, 740 835" />
<path class="line-orange line-dashed" d="M 1195 885 C 1195 850, 815 850, 790 835" />
<g transform="translate(60 930)">
<text class="label" x="0" y="0">Legende</text>
<rect x="0" y="18" width="24" height="10" fill="#2457a6" />
<text class="small" x="34" y="29">Datenfluss Import / Speicherung</text>
<rect x="245" y="18" width="24" height="10" fill="#2f7d4f" />
<text class="small" x="279" y="29">Finance-Hauswaehrung ohne stille App-Kursumrechnung</text>
<rect x="620" y="18" width="24" height="10" fill="#b35c00" />
<text class="small" x="654" y="29">Anzeige-/Analyseumrechnung ueber App-Kurstabelle</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.5 KiB

@@ -1,13 +0,0 @@
# Finance UK Mail Abweichung
Stand: 2026-05-27
Historischer Mailentwurf, fuer RAG komprimiert.
Aktueller UK-/Finance-Kontext steht in `docs/rag/FINANCE.md` und `docs/rag/MANUAL_IMPORT.md`.
Volltext bei Bedarf:
```text
docs/raw_md_archive/HISTORY_CANONICAL.md.raw
```
@@ -1,14 +0,0 @@
# Finance: Welches Dokument Gilt?
Stand: 2026-05-27
Historische Dokumentgueltigkeitsnotiz, fuer RAG komprimiert.
Aktueller Dokumentrouter: `docs/RAG_ROUTER.md`.
Aktueller Dokumentstatus: `docs/MD_DOKUMENTENSTATUS_2026-05-20.md`.
Volltext bei Bedarf:
```text
docs/raw_md_archive/HISTORY_CANONICAL.md.raw
```
@@ -1,6 +1,6 @@
# Markdown-Dokumentenstatus
Stand: 2026-05-20
Stand: 2026-06-10
RAG-Hinweis: Fuer tokenarme Kontextauswahl zuerst `docs/RAG_ROUTER.md` laden. Standardmaessig nur die Kurzdateien unter `docs/rag/` laden; diese Datei und andere Original-MDs nur bei Detail-/Auditbedarf.
@@ -17,6 +17,7 @@ Diese Datei ordnet die vorhandenen Markdown-Dateien ein. Ziel ist, alte Arbeitsn
| `docs/LOCAL_DEV_SERVER_UEBERGANG_2026-05-21.md` | Lokaler Uebergangsserver auf Entwicklungs-PC | Aktuell bis IIS-Fix |
| `docs/FINANCE_ENTSCHEIDE.md` | Finance-Regeln und Kontrollpunkte | Aktuell fuehrend fuer Finance-Logik |
| `entscheide.md` | Kurzfassung der Finance-Fachentscheide | Aktuell als Kurzfassung |
| `docs/FINANCE_DATENFLUSS_ANDREAS_2026-06-08.md` | Technischer Finance-Datenfluss | Aktuell fuer End-to-end-Datenfluss |
| `docs/PRODUCT_SPARTEN_MAPPING_2026-05-27.md` | Produktsparten-Mapping fuer Group Sales Report | Aktuell fuehrend fuer neues Produktmapping-Thema |
| `docs/HR_KPI_NACHDOKU_2026-05-13.md` | HR-KPI technische/fachliche Nachdoku | Aktualisiert um 2026-05-20 Erweiterungen |
| `docs/PROGRAMM_DIAGRAMME.md` | Uebersicht Diagramme und technische Einordnung | Aktualisiert um neue Anwenderdokus |
@@ -26,25 +27,28 @@ Diese Datei ordnet die vorhandenen Markdown-Dateien ein. Ziel ist, alte Arbeitsn
| Datei | Rolle | Status |
| --- | --- | --- |
| `docs/FINANCE_BERECHNUNGSFORMELN_LAENDER_2026-05-19.md` | Detailregeln je Land | Behalten |
| `docs/FINANCE_HANDOFF_2026-05-18.md` | Finance-Handoff vor den 20.05.-Aenderungen | Behalten, mit neueren Nachtraegen lesen |
| `docs/FINANCE_KURS_WORKFLOW_2026-06-09.md` | Isolierter Workflow fuer Kurs-/Waehrungsanwendung vom Land bis Dashboard | Aktuell fuer Kursfragen; SVG daneben |
| `docs/FINANCE_IT_VORGEHEN_2026-05-18.md` | Italien-Pruefpfad | Behalten |
| `docs/FINANCE_UK_QUELLE_KORREKTUR_2026-05-18.md` | UK-Quellkorrektur | Behalten |
| `docs/SAGE_SPAIN_RCLONE_UPLOAD_GUIDE_2026-06-03.md` | Aktueller Spanien-rclone-All-in-one-Workflow | Ersetzt alte deutsche Anleitung vom 2026-06-03 |
| `docs/HR_KPI_PRUEFUNG_SWISS_BEST_PRACTICES.md` | HR-KPI Formel-/Best-Practice-Pruefung | Behalten |
| `SAGE_SPAIN_EXPORT_2026-05-05.md` | Sage Spanien Export | Behalten |
| `LLM_SYSTEM_GUIDE.md` | Arbeits-/Systemkontext fuer LLM | Behalten |
| `persona.md` | Nutzer-/Projektkontext | Behalten |
## Historisch / nicht mehr fuehrend
## Archiviert / aus aktiver Doku entfernt
Diese Dateien bleiben aus Nachvollziehbarkeitsgruenden erhalten, sind aber nicht mehr als aktueller Stand zu lesen:
Diese Dateien wurden am 2026-06-09 aus der aktiven Markdown-Struktur entfernt, weil sie nur noch historische Stubs oder durch neuere Dokus ersetzt waren. Fachinhalt bleibt erhalten:
| Datei | Grund |
| Entfernte Datei | Grund |
| --- | --- |
| `docs/FINANCE_DASHBOARD_TODO_2026-05-15.md` | Urspruengliche Todo-Liste; Status wurde am 2026-05-20 aktualisiert |
| `docs/FINANCE_WELCHES_DOKUMENT_GILT_2026-05-15.md` | CFO-Dokumentenstand vom 15.05.; Anwenderdoku vom 20.05. ist hinzugekommen |
| `docs/FINANCE_ES_MAIL_ABWEICHUNG_2026-05-15.md` | Mail-/Abweichungsnotiz |
| `docs/FINANCE_IT_MAIL_ABWEICHUNG_2026-05-15.md` | Mail-/Abweichungsnotiz |
| `docs/FINANCE_UK_MAIL_ABWEICHUNG_2026-05-15.md` | Mail-/Abweichungsnotiz |
| `FINANCE_HANDOFF_2026-05-18.md` | Volltext liegt in `docs/raw_md_archive/HISTORY_CANONICAL.md.raw`; aktueller Kurzkontext steht in `docs/rag/FINANCE.md`. |
| `FINANCE_DASHBOARD_TODO_2026-05-15.md` | Volltext liegt in `docs/raw_md_archive/HISTORY_CANONICAL.md.raw`; aktueller Finance-Kontext steht in `docs/rag/FINANCE.md`. |
| `FINANCE_WELCHES_DOKUMENT_GILT_2026-05-15.md` | Volltext liegt in `docs/raw_md_archive/HISTORY_CANONICAL.md.raw`; aktueller Router ist `docs/RAG_ROUTER.md`. |
| `FINANCE_ES_MAIL_ABWEICHUNG_2026-05-15.md` | Volltext liegt in `docs/raw_md_archive/HISTORY_CANONICAL.md.raw`; aktueller ES-Kontext steht in `docs/rag/FINANCE.md` und `SAGE_SPAIN_EXPORT_2026-05-05.md`. |
| `FINANCE_IT_MAIL_ABWEICHUNG_2026-05-15.md` | Volltext liegt in `docs/raw_md_archive/HISTORY_CANONICAL.md.raw`; aktueller IT-Kontext steht in `docs/FINANCE_IT_VORGEHEN_2026-05-18.md`. |
| `FINANCE_UK_MAIL_ABWEICHUNG_2026-05-15.md` | Volltext liegt in `docs/raw_md_archive/HISTORY_CANONICAL.md.raw`; aktueller UK-Kontext steht in `docs/FINANCE_UK_QUELLE_KORREKTUR_2026-05-18.md`. |
| `SAGE_SPAIN_RCLONE_UPLOAD_ANLEITUNG_2026-06-03.md` | Veralteter zweiscriptiger Spanien-rclone-Workflow; aktueller Stand ist `docs/SAGE_SPAIN_RCLONE_UPLOAD_GUIDE_2026-06-03.md`. |
## Neue Word-/Bilddokumente seit 2026-05-20
@@ -57,10 +61,15 @@ Diese Dateien bleiben aus Nachvollziehbarkeitsgruenden erhalten, sind aber nicht
## Bereinigung
Es wurden keine alten Markdown-Dateien geloescht. Grund: Viele enthalten historische Pruefwerte, Zwischenentscheide und konkrete Pfade, die fuer Rueckfragen oder Audits noch relevant sein koennen.
Bereinigung 2026-06-09:
Stattdessen gilt:
- Historische Finance-Stubs und der alte Finance-Handoff wurden aus der aktiven Doku entfernt, weil der Volltext im Raw-Archiv liegt.
- Die alte deutsche Spanien-rclone-Anleitung wurde entfernt, weil der aktuelle All-in-one-Workflow im Guide vom 2026-06-05 dokumentiert ist.
- Die Alphaplan-Konzept- und Anleitungsdateien vom 2026-06-08 wurden bewusst nicht veraendert.
- Delta 2026-06-10: India/SAGE-HANA-Deploy und Server-DB-Seed wurden in `docs/DEPLOYMENT_IIS_HANDOFF_2026-05-19.md` und `lastchange.md` nachdokumentiert.
Weiterhin gilt:
- Aktuelle operative Orientierung ueber diese Statusdatei, `NEXT_STEPS_2026-04-15.md`, `HANDOFF_2026-04-15.md` und `lastchange.md`.
- Historische Mail-/Terminnotizen nur als Beleg lesen, nicht als aktuellen Produktstand.
- Historische Mail-/Terminnotizen nur im Raw-Archiv als Beleg lesen, nicht als aktuellen Produktstand.
- Alte offene Punkte wurden dort aktualisiert, wo sie durch Finance Summary, HR KPI Cockpit oder die Word-Anleitungen ueberholt sind.
+4 -1
View File
@@ -1,6 +1,6 @@
# RAG Router
Stand: 2026-06-05
Stand: 2026-06-10
Zweck: Diese Datei zuerst laden. Danach nur die Dateien aus dem passenden Themenblock laden.
@@ -34,6 +34,7 @@ Zweck: Diese Datei zuerst laden. Danach nur die Dateien aus dem passenden Themen
| `docs/MD_DOKUMENTENSTATUS_2026-05-20.md` | Einordnung alter Dokumente |
| `docs/FINANCE_ENTSCHEIDE.md` | Finance-Entscheide im Detail |
| `docs/FINANCE_BERECHNUNGSFORMELN_LAENDER_2026-05-19.md` | Formeln pro Land |
| `docs/FINANCE_KURS_WORKFLOW_2026-06-09.md` | isolierter Kurs-/Umrechnungsworkflow vom Land bis Dashboard |
| `docs/MANUAL_IMPORT_DELTA_STAND_2026-05-21.md` | Manual-Import-Details |
| `docs/HR_KPI_NACHDOKU_2026-05-13.md` | HR-KPI-Details |
| `docs/DEPLOYMENT_IIS_HANDOFF_2026-05-19.md` | IIS-/Publish-Details |
@@ -46,9 +47,11 @@ Zweck: Diese Datei zuerst laden. Danach nur die Dateien aus dem passenden Themen
| Suchwort | Thema |
| --- | --- |
| `Finance Summary`, `Soll/Ist`, `check.xlsx`, `FinanceRuleEngine` | Finance Cockpit |
| `Wechselkurs`, `Umrechnungskurs`, `CurrencyExchangeRates`, `DocumentRate`, `ConvertCurrency`, `Anzeige-Waehrung` | `docs/FINANCE_KURS_WORKFLOW_2026-06-09.md` |
| `TRUK`, `UK_B1`, `Delta`, `Manual Excel` | Manual Import / Finance Spezialfaelle |
| `TRDE`, `Alphaplan`, `NettoPreisGesamtX` | Finance Cockpit / Manual Import |
| `TRSE`, `Spain`, `Sage`, `ImporteNeto` | Finance Spezialfaelle |
| `TRIN`, `Indien`, `India`, `SAGE`, `20.197.20.60`, `TRAFAGCONTROLS` | Deployment/IIS oder Finance Spezialfaelle |
| `Spain rclone`, `Spanien SharePoint`, `Run-SpainRangeExportAndUpload-AllInOne`, `trafag-bi` | `docs/SAGE_SPAIN_RCLONE_UPLOAD_GUIDE_2026-06-03.md` |
| `3D Datenanalyse`, `Experten`, `Schnelluebersicht`, `Simulation`, `Wechselkurs-Schieberegler` | Finance Cockpit |
| `HR KPI`, `Rexx`, `Austritte`, `Absenzen` | HR KPI |
@@ -1,258 +0,0 @@
# Sage Spanien Rclone Upload Anleitung
Stand: 2026-06-03
Ziel: Der Sage-Server in Spanien erzeugt die Sales-CSV lokal und lädt die Datei danach automatisch in den SharePoint-Ordner fuer den Dashboard-Import.
## Zielordner
SharePoint URL:
```text
https://trafagag.sharepoint.com/sites/WorldwideBIPlatform/Shared%20Documents/Import/Finance/Spanien
```
Technischer Ordner:
```text
Shared Documents/Import/Finance/Spanien
```
Empfohlener rclone-Zielpfad:
```text
trafag-bi:Import/Finance/Spanien
```
Dabei zeigt `trafag-bi` auf die Dokumentbibliothek `Shared Documents` der SharePoint-Site:
```text
https://trafagag.sharepoint.com/sites/WorldwideBIPlatform
```
## Benötigte Dateien Auf Dem Spanien-Server
Empfohlener Ordner:
```text
C:\Trafag\SageSpain
```
Dateien:
```text
Export-SageSpainSalesCsv.ps1
Run-SpainExportAndUpload.ps1
```
Die Dateien liegen im Paket:
```text
SageSpainFinalExportPackage.zip
```
## rclone Installieren
Falls `winget` vorhanden ist:
```powershell
winget install Rclone.Rclone
```
Alternativ rclone ZIP manuell installieren, z.B. nach:
```text
C:\Tools\rclone\rclone.exe
```
Danach testen:
```powershell
rclone version
```
Falls `rclone` nicht im PATH ist, später den vollständigen Pfad verwenden:
```powershell
C:\Tools\rclone\rclone.exe version
```
## rclone Remote Einrichten
Auf dem Spanien-Server:
```powershell
rclone config
```
Empfohlene Eingaben:
```text
n
name> trafag-bi
Storage> onedrive
```
Danach Microsoft Login durchführen.
Wichtig:
- Site: `WorldwideBIPlatform`
- Dokumentbibliothek: `Shared Documents`
- Der rclone-Remote `trafag-bi` soll auf die Dokumentbibliothek `Shared Documents` zeigen.
## rclone Testen
```powershell
rclone lsd trafag-bi:
rclone lsd trafag-bi:"Import"
rclone lsd trafag-bi:"Import/Finance"
rclone lsd trafag-bi:"Import/Finance/Spanien"
```
Wenn der letzte Befehl den Ordner ohne Fehler zeigt, ist der Zielpfad korrekt.
## Manueller Export Ohne Upload
Full Export 2025:
```powershell
Set-ExecutionPolicy -Scope Process Bypass
cd C:\Trafag\SageSpain
.\Export-SageSpainSalesCsv.ps1 -ExportMode Full -Year 2025 -OutputDirectory C:\Trafag\SageSpain\out
```
Delta/Range Export:
```powershell
Set-ExecutionPolicy -Scope Process Bypass
cd C:\Trafag\SageSpain
.\Export-SageSpainSalesCsv.ps1 -ExportMode Range -DateFilter LineRegistrationDate -FromDate "2026-06-02" -ToDate "2026-06-03" -OutputDirectory C:\Trafag\SageSpain\out
```
Hinweis:
- `ToDate` ist exklusiv.
- Der Zeitraum `"2026-06-02"` bis `"2026-06-03"` exportiert den 2. Juni.
- Für tägliche Deltas ist `LineRegistrationDate` sinnvoll, weil neue oder geänderte Zeilen nach Registrierungsdatum kommen.
## Export Und Upload Zusammen Starten
Standard: täglicher Delta-Lauf, gestern bis heute:
```powershell
Set-ExecutionPolicy -Scope Process Bypass
cd C:\Trafag\SageSpain
.\Run-SpainExportAndUpload.ps1
```
Expliziter Zeitraum:
```powershell
.\Run-SpainExportAndUpload.ps1 -ExportMode Range -DateFilter LineRegistrationDate -FromDate "2026-06-02" -ToDate "2026-06-03"
```
Full Export mit Upload:
```powershell
.\Run-SpainExportAndUpload.ps1 -ExportMode Full -Year 2025
```
Wenn rclone nicht im PATH ist:
```powershell
.\Run-SpainExportAndUpload.ps1 -RcloneExe "C:\Tools\rclone\rclone.exe"
```
Wenn der rclone-Remote anders heisst:
```powershell
.\Run-SpainExportAndUpload.ps1 -RcloneRemote "MEIN_REMOTE_NAME"
```
## Was Wird Hochgeladen?
Das Wrapper-Script lädt aus dem neuesten Exportordner:
```text
*.csv
*_summary.txt
```
Ziel:
```text
trafag-bi:Import/Finance/Spanien
```
Das Script ändert keine Daten in Sage und keine Daten in SQL Server.
## Windows Task Scheduler
Empfohlener täglicher Lauf, z.B. 02:00 Uhr:
```powershell
$action = New-ScheduledTaskAction `
-Execute "powershell.exe" `
-Argument "-NoProfile -ExecutionPolicy Bypass -File C:\Trafag\SageSpain\Run-SpainExportAndUpload.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 02:00
Register-ScheduledTask `
-TaskName "Trafag Spain Sage Export Upload" `
-Action $action `
-Trigger $trigger `
-Description "Exports Sage Spain sales CSV and uploads it to SharePoint via rclone"
```
Wenn rclone nicht im PATH ist:
```powershell
$action = New-ScheduledTaskAction `
-Execute "powershell.exe" `
-Argument "-NoProfile -ExecutionPolicy Bypass -File C:\Trafag\SageSpain\Run-SpainExportAndUpload.ps1 -RcloneExe C:\Tools\rclone\rclone.exe"
```
## Kontrolle Nach Dem Lauf
Lokal:
```powershell
Get-ChildItem C:\Trafag\SageSpain\out -Directory | Sort-Object LastWriteTime -Descending | Select-Object -First 1
Get-ChildItem C:\Trafag\SageSpain\logs
```
SharePoint:
```powershell
rclone ls trafag-bi:"Import/Finance/Spanien"
```
Im Browser prüfen:
```text
https://trafagag.sharepoint.com/sites/WorldwideBIPlatform/Shared%20Documents/Import/Finance/Spanien
```
## Fehlerbilder
`rclone: command not found`
- rclone ist nicht im PATH.
- Lösung: `-RcloneExe "C:\Tools\rclone\rclone.exe"` verwenden.
`directory not found`
- Remote zeigt nicht auf `Shared Documents` oder Zielordner ist anders.
- Mit `rclone lsd trafag-bi:` und `rclone lsd trafag-bi:"Import/Finance"` prüfen.
`Access denied`
- Microsoft Login oder SharePoint-Berechtigung fehlt.
- Der Windows-User des geplanten Tasks muss Zugriff auf rclone-Konfiguration und SharePoint haben.
Leere Delta-Datei:
- Zeitraum prüfen.
- `ToDate` ist exklusiv.
- Bei täglichem Lauf für gestern bis heute ist das korrekt.
+8 -3
View File
@@ -1,18 +1,23 @@
# RAG Deployment
Stand: 2026-05-27
Stand: 2026-06-10
## Kurzstand
- `TrafagSalesExporter` wird als ASP.NET/IIS-Webanwendung im bisherigen `BiDashboard`-Schema publiziert.
- Letzter dokumentierter Deploy: 2026-06-10 India/SAGE-HANA-Fix.
- Publish-Ziel: `\\trch-webapp-bidashboard.trafagch.local\BiDashboard$\`.
- Letzter Deploy-Zeitstempel: `BiDashboard.dll` am `10.06.2026 08:20:25`.
- Produktive India-DB-Konfiguration nach Seed: `TRIN -> SAGE -> 20.197.20.60:30015`, Schema `TRAFAG_LIVE`, User-Override `TRAFAGCONTROLS`.
- DB-Backup vor India-Seed: `\\trch-webapp-bidashboard.trafagch.local\BiDashboard$\trafag_exporter.db.before-india-sage-20260610-0825.bak`.
- Lokaler Uebergangsserver: `http://172.16.9.185:5000` im Trafag-Netz, IP kann wechseln.
- Lokale URLs bleiben `https://localhost:55415` und `http://localhost:55416`.
- Fuer andere PCs nutzt der Uebergang bewusst HTTP auf Port `5000`.
## Serverproblem
- IIS/HTTPS blockiert vor der App.
- Dokumentierter Befund: TLS fordert Client-Zertifikat.
- Lokaler HTTPS-Smoke-Test per `Invoke-WebRequest` scheitert weiterhin mit Empfangs-/TLS-Fehler; Publish und Share-/DB-Pruefungen sind davon getrennt.
- Aelterer dokumentierter Befund: TLS fordert Client-Zertifikat.
- IT soll IIS SSL Settings pruefen: Client certificates `Ignore` oder hoechstens `Accept`, nicht `Require`.
## Upgreat Firewall
+6 -2
View File
@@ -1,6 +1,6 @@
# RAG Finance
Stand: 2026-06-05
Stand: 2026-06-10
## Kurzstand
@@ -22,6 +22,8 @@ Stand: 2026-06-05
- Wechselkurs-Anwendungsdatum ist in Settings konfigurierbar und wird in der Rohdaten-Diagnose angezeigt.
- Spartenanalyse war mit >90% nicht zugeordnet fachlich unplausibel; Materialabgleich normalisiert fuehrende Nullen und warnt bei >=90% ungeklaerter Abdeckung.
- Budgetkurse wurden als Finance-Kurse behandelt; CHF-Sicht bleibt getrennte Reporting-/Kontrollsicht, nicht stiller Ersatz fuer Hauswaehrungsabgleich.
- Fokusdoku zum isolierten Kursfluss: `docs/FINANCE_KURS_WORKFLOW_2026-06-09.md`.
- India/TRIN: produktive Route nach Fix/Deploy 2026-06-10 ist `SAGE -> 20.197.20.60:30015`, Schema `TRAFAG_LIVE`; Standort-Override nutzt `TRAFAGCONTROLS`.
- Browser-Hinweis: 3D-Ansicht wurde in Chrome als korrekt bestaetigt; Firefox zeigte auf dem Client Interaktions-/Zoomprobleme.
## Wichtige Regeln
@@ -31,6 +33,7 @@ Stand: 2026-06-05
- Jahresabgrenzung ueber `PostingDate`, Fallback `InvoiceDate`, danach `ExtractionDate`.
- Gutschriften/Storno laufen als negative Beleg-/Positionszeilen.
- Budget-CHF ist Kontroll-/Reporting-Kandidat, nicht Standardabgleich.
- `DocumentRate` aus dem ERP ist ein gespeichertes Quellfeld; die App-Kurstabelle wird nur bei Anzeige-Waehrung, expliziter `ConvertCurrency`-Transformation oder Budget-CHF-Kandidat verwendet.
## Offene Fachpunkte
@@ -89,12 +92,13 @@ Stand: 2026-06-05
| ES | Sage CSV, `ImporteNeto`, REC/Credit negativ; Referenz 2025 korrigiert auf `3'082'320.18 EUR` |
| IT | Hauswaehrung, `Trafag Italia` ausgeschlossen, Duplikatlogik fuer leeres Supplier country |
| UK | Sage/Manual Excel, GBP, `[Sales Price/Value] * [Quantity]`, Credit Notes negativ |
| IN | INR als Hauswaehrung |
| IN | SAGE/HANA `TRIN`, Schema `TRAFAG_LIVE`, INR als Hauswaehrung |
## Rohquellen Nur Bei Bedarf
- Entscheide: `docs/FINANCE_ENTSCHEIDE.md`, `entscheide.md`
- Formeln je Land: `docs/FINANCE_BERECHNUNGSFORMELN_LAENDER_2026-05-19.md`
- Isolierter Kurs-Workflow: `docs/FINANCE_KURS_WORKFLOW_2026-06-09.md`
- IT Detail: `docs/FINANCE_IT_VORGEHEN_2026-05-18.md`
- UK Korrektur: `docs/FINANCE_UK_QUELLE_KORREKTUR_2026-05-18.md`
- ES Detail: `SAGE_SPAIN_EXPORT_2026-05-05.md`
+6 -4
View File
@@ -1,13 +1,15 @@
# RAG Project
Stand: 2026-06-05
Stand: 2026-06-10
## Kurzstand
- Fuehrende App: `TrafagSalesExporter`, publiziert als `BiDashboard`.
- Letzter dokumentierter Stand: Finance-Schnelluebersicht, Expertenbereich, 3D-Datenanalyse und Spanien-Sage-All-in-one-rclone-Upload.
- Validierung laut Doku: Finance-Sitzungsstand `82/82` Tests gruen; spaetere UI-/Deploy-Schritte wurden einzeln umgesetzt und deployed.
- Letzter dokumentierter Finance-Deploy: 2026-06-05 auf `\\trch-webapp-bidashboard.trafagch.local\BiDashboard$\`.
- Letzter dokumentierter Stand: India/TRIN SAGE-HANA-Fix deployed, Finance-Kursworkflow dokumentiert, aktive Markdown-Doku bereinigt.
- Validierung laut Doku: `84/84` Tests gruen fuer den India-Fix; fruehere UI-/Deploy-Schritte wurden einzeln umgesetzt und deployed.
- Letzter dokumentierter Deploy: 2026-06-10 auf `\\trch-webapp-bidashboard.trafagch.local\BiDashboard$\`.
- India/TRIN: produktive Server-DB steht auf `TRIN -> SAGE -> 20.197.20.60:30015`, Schema `TRAFAG_LIVE`, User-Override `TRAFAGCONTROLS`.
- Doku-Delta: `docs/FINANCE_KURS_WORKFLOW_2026-06-09.md` plus SVG; alte Finance-Stubs aus aktiver Markdown-Struktur entfernt, Volltexte bleiben im Raw-Archiv.
- Neu im Finance/Management-Cockpit: einfache Schnelluebersicht links sichtbar; tiefere Funktionen bleiben unter `Experten`.
- Neu in der Navigation: Menuebaum wird aus `NavigationMenuItems` gerendert; Admins koennen bestehende Punkte unter `Admin > Menuestruktur` umhaengen, sortieren und aus-/einblenden.
- Neu als Hauptbereich: `Einkauf` mit Einkaufswagen-Icon und erweitertem `Einkauf Dashboard`.