@@ -211,87 +221,80 @@
justify-self: end;
width: 210px;
height: 118px;
- display: flex;
- align-items: flex-end;
- justify-content: center;
background: #fff;
border: 1px solid #111;
border-radius: 6px;
- padding: 12px 14px 10px;
+ overflow: hidden;
}
- .manometer-arc {
- position: relative;
- width: 170px;
- height: 86px;
- border: 8px solid #111;
- border-bottom: 0;
- border-radius: 170px 170px 0 0;
- background: #fff;
- overflow: visible;
+ .manometer-svg {
+ display: block;
+ width: 100%;
+ height: 100%;
}
- .manometer-arc::before {
- content: "";
- position: absolute;
- left: 14px;
- right: 14px;
- bottom: -1px;
- height: 70px;
- border: 2px solid #111;
- border-bottom: 0;
- border-radius: 140px 140px 0 0;
+ .manometer-outer,
+ .manometer-inner {
+ fill: none;
+ stroke: #111;
+ stroke-linecap: square;
}
- .tick {
- position: absolute;
- left: 50%;
- bottom: 0;
- width: 3px;
- height: 16px;
- background: #111;
- transform-origin: 50% 78px;
+ .manometer-outer {
+ stroke-width: 8;
}
- .tick-0 { transform: translateX(-50%) rotate(-70deg); }
- .tick-1 { transform: translateX(-50%) rotate(-35deg); }
- .tick-2 { transform: translateX(-50%) rotate(0deg); }
- .tick-3 { transform: translateX(-50%) rotate(35deg); }
- .tick-4 { transform: translateX(-50%) rotate(70deg); }
+ .manometer-inner {
+ stroke-width: 2;
+ }
- .needle {
- position: absolute;
- left: 50%;
- bottom: 0;
- width: 4px;
- height: 72px;
- background: #111;
- border-radius: 4px;
- transform-origin: 50% 100%;
+ .manometer-tick,
+ .needle-line {
+ stroke: #111;
+ stroke-width: 3;
+ stroke-linecap: square;
+ }
+
+ .manometer-needle {
+ transform-box: view-box;
+ transform-origin: 105px 98px;
animation: manometer-sweep 5.8s infinite cubic-bezier(.45, 0, .25, 1);
}
- .hub {
- position: absolute;
- left: 50%;
- bottom: -8px;
- width: 22px;
- height: 22px;
- border-radius: 50%;
- background: #111;
- transform: translateX(-50%);
+ .manometer-hub {
+ fill: #111;
+ }
+
+ .manometer-label,
+ .manometer-caption {
+ fill: #111;
+ font-family: Arial, sans-serif;
+ text-anchor: middle;
+ dominant-baseline: middle;
+ user-select: none;
+ }
+
+ .manometer-label {
+ font-size: 10px;
+ font-weight: 600;
+ }
+
+ .manometer-caption {
+ font-size: 9px;
+ font-weight: 700;
+ letter-spacing: 0;
}
@@keyframes manometer-sweep {
- 0% { transform: translateX(-50%) rotate(-52deg); }
- 11% { transform: translateX(-50%) rotate(18deg); }
- 19% { transform: translateX(-50%) rotate(-8deg); }
- 33% { transform: translateX(-50%) rotate(63deg); }
- 48% { transform: translateX(-50%) rotate(4deg); }
- 61% { transform: translateX(-50%) rotate(38deg); }
- 74% { transform: translateX(-50%) rotate(-41deg); }
- 88% { transform: translateX(-50%) rotate(55deg); }
- 100% { transform: translateX(-50%) rotate(-52deg); }
+ 0% { transform: rotate(-52deg); }
+ 11% { transform: rotate(18deg); }
+ 19% { transform: rotate(-8deg); }
+ 33% { transform: rotate(63deg); }
+ 48% { transform: rotate(4deg); }
+ 61% { transform: rotate(38deg); }
+ 74% { transform: rotate(-41deg); }
+ 88% { transform: rotate(55deg); }
+ 100% { transform: rotate(-52deg); }
}
@@media (max-width: 900px) {
diff --git a/TrafagSalesExporter/Components/Pages/ManagementCockpit.razor b/TrafagSalesExporter/Components/Pages/ManagementCockpit.razor
index 071eb97..800df5e 100644
--- a/TrafagSalesExporter/Components/Pages/ManagementCockpit.razor
+++ b/TrafagSalesExporter/Components/Pages/ManagementCockpit.razor
@@ -51,7 +51,7 @@
@if (_financeResult is not null)
{
-
+
@@ -84,9 +84,7 @@
-
-
-
+ @T("Finance-Freigabe je Land", "Finance approval by country")
@@ -109,9 +107,7 @@
-
-
-
+ @T("Letzter Datenstand je Standort", "Latest data status by site")
@@ -139,8 +135,6 @@
-
- @T("Sparten-Abdeckung nach Land", "Division coverage by country")
@@ -162,12 +156,10 @@
-
-
-
+
@@ -409,7 +401,7 @@
-
+
@@ -1108,6 +1100,12 @@
}
+
+
@code {
[Parameter]
[SupplyParameterFromQuery(Name = "section")]
diff --git a/TrafagSalesExporter/docs/FINANCE_AUDIT_CSV_QUELLE_2026-06-11.svg b/TrafagSalesExporter/docs/FINANCE_AUDIT_CSV_QUELLE_2026-06-11.svg
new file mode 100644
index 0000000..9beecd6
--- /dev/null
+++ b/TrafagSalesExporter/docs/FINANCE_AUDIT_CSV_QUELLE_2026-06-11.svg
@@ -0,0 +1,73 @@
+
diff --git a/TrafagSalesExporter/docs/FINANCE_BERECHNUNGSFORMELN_LAENDER_2026-05-19.md b/TrafagSalesExporter/docs/FINANCE_BERECHNUNGSFORMELN_LAENDER_2026-05-19.md
index c44e373..b874bfe 100644
--- a/TrafagSalesExporter/docs/FINANCE_BERECHNUNGSFORMELN_LAENDER_2026-05-19.md
+++ b/TrafagSalesExporter/docs/FINANCE_BERECHNUNGSFORMELN_LAENDER_2026-05-19.md
@@ -1,12 +1,13 @@
# Finance Berechnungsformeln pro Land
-Stand: 2026-06-01
+Stand: 2026-06-11
-Nachtrag 2026-06-01:
+Nachtrag 2026-06-11:
- ES-Referenz 2025 wurde nach Finance-Sitzung auf `3'082'320.18 EUR` korrigiert. Der alte Wert `3'102'333.61 EUR` war ein Referenz-/Excel-Fehler.
- In Management-Analysen ist das Wechselkurs-Anwendungsdatum konfigurierbar: `PostingDate`, `InvoiceDate` oder `ExtractionDate`.
- Sparten-Materialabgleich normalisiert fuehrende Nullen und warnt bei >=90% ungeklaerter Abdeckung.
+- Zentrale Finance-Auswertungen koennen optional aus den neuesten `Sales_ProcessedMergeInput_*.csv` je TSC statt aus `CentralSalesRecords` lesen. Die Formel bleibt gleich; nur die Datenquelle wird per Setting umgeschaltet.
Zweck: Dieses Dokument beschreibt die aktuell im Programm verwendeten Formeln fuer den Soll/Ist-Vergleich 2025. Es ist fuer eine zweite KI oder eine fachliche Gegenpruefung geschrieben.
@@ -14,7 +15,12 @@ Zweck: Dieses Dokument beschreibt die aktuell im Programm verwendeten Formeln fu
Die echte Webseite `/finance-cockpit/vergleich` und das Testprogramm `/finance` verwenden beide `FinanceReconciliationService`.
-Quelle fuer den Ist-Wert ist immer `CentralSalesRecords`. Die Jahresabgrenzung ist:
+Quelle fuer den Ist-Wert ist die zentrale Auswertungsquelle:
+
+- Standard: `CentralSalesRecords`.
+- Audit-Modus: neueste `Sales_ProcessedMergeInput_*.csv` je TSC.
+
+Die Jahresabgrenzung ist:
```text
Jahr = Year(PostingDate ?? InvoiceDate ?? ExtractionDate)
@@ -26,7 +32,7 @@ Pro Land berechnet das Programm mehrere Kandidaten:
```text
SalesPriceValue
- = Sum(CentralSalesRecords.SalesPriceValue)
+ = Sum(SalesPriceValue aus zentraler Auswertungsquelle)
DocTotalFC - VatSumFC
= Sum(DocumentTotalForeignCurrency - VatSumForeignCurrency)
diff --git a/TrafagSalesExporter/docs/FINANCE_COCKPIT_ANLEITUNG_FINANZ_2026-05-20.docx b/TrafagSalesExporter/docs/FINANCE_COCKPIT_ANLEITUNG_FINANZ_2026-05-20.docx
index a328a2c..bb83cf2 100644
Binary files a/TrafagSalesExporter/docs/FINANCE_COCKPIT_ANLEITUNG_FINANZ_2026-05-20.docx and b/TrafagSalesExporter/docs/FINANCE_COCKPIT_ANLEITUNG_FINANZ_2026-05-20.docx differ
diff --git a/TrafagSalesExporter/docs/FINANCE_DATENFLUSS_ANDREAS_2026-06-08.md b/TrafagSalesExporter/docs/FINANCE_DATENFLUSS_ANDREAS_2026-06-08.md
index a8f23dd..a3f2fb6 100644
--- a/TrafagSalesExporter/docs/FINANCE_DATENFLUSS_ANDREAS_2026-06-08.md
+++ b/TrafagSalesExporter/docs/FINANCE_DATENFLUSS_ANDREAS_2026-06-08.md
@@ -1,18 +1,28 @@
# Finance Datenfluss fuer Andreas
-Stand: 2026-06-08
+Stand: 2026-06-11
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`.
+Aktuelle Finance-Schulung: `docs/FINANCE_SCHULUNG_FINANZ_2026-06-11.md`.
+Prozessgrafiken:
+
+- `docs/FINANCE_PROZESS_EXPORT_DASHBOARD_2026-06-11.svg`
+- `docs/FINANCE_AUDIT_CSV_QUELLE_2026-06-11.svg`
+
+
+
+
## Kurzfazit
-- Finance Summary, Management Analyse und Spartenanalyse lesen nicht aus dem SharePoint-Excel, sondern direkt aus der App-Datenbank `CentralSalesRecords`.
-- Nachtrag 2026-06-11: Fuer Finance/Revision gibt es lokal einen Audit-CSV-Modus. Standortexporte koennen nach Mapping und Transformation je Standort eine CSV schreiben; per Setting koennen zentrale Excel, Finance Summary und Management-Analyse aus den neuesten Audit-CSV statt aus `CentralSalesRecords` lesen.
+- Finance Summary, Management Analyse und Spartenanalyse lesen nicht aus dem SharePoint-Excel. Sie lesen entweder aus `CentralSalesRecords` oder, wenn aktiviert, aus den neuesten verarbeiteten Audit-CSV je Standort.
+- Fuer Finance/Revision gibt es einen Audit-CSV-Modus. Standortexporte koennen nach Mapping und Transformation je Standort eine CSV schreiben; per Setting koennen zentrale Excel, Finance Summary, Soll/Ist und Management-Analyse aus diesen CSV statt aus `CentralSalesRecords` lesen.
+- Die Audit-CSV heisst `Sales_ProcessedMergeInput__.csv`. Der Name markiert bewusst, dass es das verarbeitete Merge-Eingangsfile ist, nicht die originale Standortdatei.
- Das SharePoint-Excel `Sales_All_*.xlsx` ist ein Export-/Ablageergebnis, nicht die Live-Quelle der Cockpit-Anzeige.
- Jeder Standortexport ersetzt in `CentralSalesRecords` nur die Daten dieses Standorts.
-- Die zentrale Excel wird danach aus dem aktuellen Stand von `CentralSalesRecords` erzeugt.
+- Die zentrale Excel wird danach aus der aktuell gewaehlten zentralen Auswertungsquelle erzeugt: Standard `CentralSalesRecords`, optional Audit-CSV.
- Wechselkurse veraendern den Standortexport und `CentralSalesRecords` normalerweise nicht. Sie wirken in Analyse-/Anzeige-Sichten, wenn eine Zielwaehrung wie CHF/EUR/USD ausgewaehlt ist, oder in explizit konfigurierten Transformationen.
- Sparteninformationen kommen fuehrend aus SAP/TR-AG `ProductDivisionRefSet`. Aktuell werden sie beim ZSCHWEIZ-/CH-/AT-Export direkt mitgeladen. Andere Laender werden in der Analyse ueber ihre Materialnummer gegen diese TR-AG-Referenz gematcht.
@@ -33,13 +43,33 @@ Ablauf pro Standort:
- `ManualExcelDataSourceAdapter` fuer Excel/CSV/SharePoint-Dateien.
3. Rohdaten werden als `SalesRecord`-Liste aufgebaut.
4. Aktive `FieldTransformationRules` fuer das Quellsystem werden angewendet.
-5. Eine lokale Standort-Excel `Sales__.xlsx` wird erzeugt.
-6. `CentralSalesRecords` wird fuer diesen Standort ersetzt:
+5. Falls `Audit-CSV je Standort schreiben` aktiv ist, wird eine verarbeitete CSV geschrieben:
+ - Datei: `Sales_ProcessedMergeInput__.csv`.
+ - Ordner: gleicher lokaler Ordner wie die Standort-Excel.
+ - Inhalt: Daten nach Mapping und Transformation.
+6. Eine lokale Standort-Excel `Sales__.xlsx` wird erzeugt.
+7. `CentralSalesRecords` wird fuer diesen Standort ersetzt:
- alte Saetze mit `SiteId = Standort` loeschen.
- neue Saetze einfuegen.
-7. Falls SharePoint komplett konfiguriert ist, wird die Standort-Excel nach SharePoint hochgeladen.
+8. Falls SharePoint komplett konfiguriert ist, werden Standort-Excel und Audit-CSV in den Landesordner hochgeladen.
-Wichtig: Die Reihenfolge ist zuerst Daten holen, dann Transformationen, dann lokale Excel, dann zentrale Tabelle, dann SharePoint-Upload. Der SharePoint-Upload entscheidet nicht, was in der Cockpit-Anzeige erscheint.
+Wichtig: Die Reihenfolge ist zuerst Daten holen, dann Transformationen, dann Audit-CSV, dann lokale Excel, dann zentrale Tabelle, dann SharePoint-Upload. Der SharePoint-Upload entscheidet nicht, was in der Cockpit-Anzeige erscheint.
+
+## Zentrale Auswertungsquelle
+
+Der Schalter liegt in der App unter:
+
+```text
+Einstellungen > Export Einstellungen > Audit-CSV / nachvollziehbarer Datenfluss
+```
+
+| Schalter | Wirkung |
+| --- | --- |
+| `Audit-CSV je Standort schreiben` | Standortexport schreibt `Sales_ProcessedMergeInput_*.csv` nach Mapping und Transformation. |
+| `Zentrale Auswertung aus Audit-CSV` | Finance Summary, Management Analyse, Soll/Ist und zentrale Excel lesen die neuesten Audit-CSV je TSC statt `CentralSalesRecords`. |
+| `Lokaler Standardpfad Standort-Dateien` | Ordner fuer Standort-Excel und Audit-CSV. |
+
+Wenn `Zentrale Auswertung aus Audit-CSV` aktiv ist, sucht die App im Standort-Exportordner je TSC die neueste passende CSV. Wenn keine `Sales_ProcessedMergeInput_*.csv` vorhanden ist, ist der Audit-Modus nicht auswertbar.
## Datenquellen pro Quelltyp
@@ -315,7 +345,9 @@ Ausloeser:
Ablauf:
-1. `ConsolidatedExportService` liest alle Saetze aus `CentralSalesRecords`.
+1. `ConsolidatedExportService` liest alle Saetze aus der zentralen Auswertungsquelle:
+ - Standard: `CentralSalesRecords`.
+ - Audit-Modus: neueste `Sales_ProcessedMergeInput_*.csv` je TSC.
2. `ExcelExportService.CreateConsolidatedExcelFile(...)` erzeugt `Sales_All_.xlsx`.
3. Die Datei wird lokal geschrieben.
4. Falls SharePoint konfiguriert ist, wird sie hochgeladen.
@@ -342,14 +374,16 @@ Wichtig:
- `Finance Summary` im Excel wird beim Schreiben aus den Records berechnet.
- Es liest nicht aus einem vorherigen SharePoint-Excel.
+- Je nach Setting sind diese Records entweder DB-Eintraege oder die neuesten verarbeiteten Audit-CSV.
- Wechselkurs-Zielwaehrung aus der UI wird dabei nicht angewendet.
## Finance Summary und Spartenanalyse in der App
-Die App-Anzeigen lesen direkt aus:
+Die App-Anzeigen lesen direkt aus der zentralen Auswertungsquelle:
```text
-CentralSalesRecords
+Standard: CentralSalesRecords
+Audit-Modus: neueste Sales_ProcessedMergeInput_*.csv je TSC
```
Nicht aus:
@@ -360,9 +394,9 @@ SharePoint Sales_All_*.xlsx
Das bedeutet:
-- Lokal zeigt die App lokale DB-Daten.
-- Publizierter Server zeigt Server-DB-Daten.
-- Wenn lokale und Server-DB gleich sind, sehen beide gleich aus.
+- Lokal zeigt die App lokale DB-Daten oder lokale Audit-CSV, je nach Setting.
+- Publizierter Server zeigt Server-DB-Daten oder Server-Audit-CSV, je nach Setting.
+- Wenn lokale und Server-Auswertungsquelle gleich sind, sehen beide gleich aus.
- Ein SharePoint-Upload veraendert die App-Anzeige nicht.
## Spartenanalyse: genaue Logik
@@ -433,21 +467,26 @@ SalesRecord-Liste
+-- FieldTransformationRules anwenden
| -> optional Feldkopien, FirstNonEmpty, ConvertCurrency
|
+ +-- optional Audit-CSV Sales_ProcessedMergeInput__.csv schreiben
+ | -> verarbeitete Daten fuer Finance/Revision
+ |
+-- Standort-Excel Sales__.xlsx lokal schreiben
|
+-- CentralSalesRecords fuer SiteId ersetzen
|
- +-- Standort-Excel optional nach SharePoint hochladen
+ +-- Standort-Excel und Audit-CSV optional nach SharePoint hochladen
Finance Summary / Spartenanalyse
|
- +-- liest CentralSalesRecords
+ +-- liest zentrale Auswertungsquelle
+ | -> Standard: CentralSalesRecords
+ | -> optional: neueste Sales_ProcessedMergeInput_*.csv je TSC
+-- FinanceRuleEngine rechnet Include/Exclude/Net Sales Actual
- +-- Spartenanalyse matched lokale Materialien gegen TR-AG-Referenz aus CentralSalesRecords
+ +-- Spartenanalyse matched lokale Materialien gegen TR-AG-Referenz aus den Records
Zentrale Excel
|
- +-- liest CentralSalesRecords
+ +-- liest zentrale Auswertungsquelle
+-- erzeugt Sales_All_.xlsx lokal
+-- erzeugt Finance Summary / Finance Details im Excel
+-- laedt Datei optional nach SharePoint
@@ -456,10 +495,10 @@ Zentrale Excel
## Wichtige Klarstellungen fuer Finance
1. SharePoint ist Ablage und Quelle fuer manuelle Dateien, aber nicht Live-Quelle der Finance Summary.
-2. `CentralSalesRecords` ist der operative zentrale Datenbestand der App.
+2. `CentralSalesRecords` ist der operative zentrale Datenbestand der App, solange nicht Audit-CSV als zentrale Auswertungsquelle aktiv ist.
3. Sparten kommen fachlich aus TR-AG/SAP `ProductDivisionRefSet`, nicht aus lokalen ERP-Sparten.
4. CH/AT bekommen Spartenfelder direkt beim ZSCHWEIZ-Export.
5. Andere Laender bekommen Sparten in der Analyse nur, wenn ihre Materialnummern zur TR-AG-Referenz matchen.
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.
+8. Die zentrale Excel wird nach den Standortexporten aus der gewaehlten zentralen Auswertungsquelle erstellt. Sie ist Ergebnis, nicht Eingang.
diff --git a/TrafagSalesExporter/docs/FINANCE_KURS_WORKFLOW_2026-06-09.md b/TrafagSalesExporter/docs/FINANCE_KURS_WORKFLOW_2026-06-09.md
index 559bdf6..51abc6c 100644
--- a/TrafagSalesExporter/docs/FINANCE_KURS_WORKFLOW_2026-06-09.md
+++ b/TrafagSalesExporter/docs/FINANCE_KURS_WORKFLOW_2026-06-09.md
@@ -1,17 +1,22 @@
# Finance Kurs-Workflow
-Stand: 2026-06-09
+Stand: 2026-06-11
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.
+Aktuelle Finance-Schulung: `docs/FINANCE_SCHULUNG_FINANZ_2026-06-11.md`.
Visualisierung: `docs/FINANCE_KURS_WORKFLOW_2026-06-09.svg`
+Aktuelle Kurs-/Waehrungsgrafik: `docs/FINANCE_WAEHRUNG_KURSFLUSS_2026-06-11.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.
+- Wenn Audit-CSV als zentrale Auswertungsquelle aktiv ist, enthalten die `Sales_ProcessedMergeInput_*.csv` dieselben verarbeiteten Werte nach Mapping und Transformation.
- `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.
@@ -29,6 +34,7 @@ Visualisierung: `docs/FINANCE_KURS_WORKFLOW_2026-06-09.svg`
| 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 `, z. B. `Budget 2025`, fuer separaten CHF-Kontrollkandidaten. |
+| Audit-CSV | Verarbeitete Standort-CSV `Sales_ProcessedMergeInput__.csv`; optional zentrale Quelle fuer Dashboard und zentrale Excel. |
## Gesamtfluss
@@ -45,8 +51,15 @@ Land / Quellsystem
|
+-- Standort-Excel schreiben
|
+ +-- optional Audit-CSV schreiben
+ | Sales_ProcessedMergeInput__.csv
+ |
+-- CentralSalesRecords fuer Standort ersetzen
|
+ +-- zentrale Auswertungsquelle
+ | Standard: CentralSalesRecords
+ | optional: neueste Audit-CSV je TSC
+ |
+-- zentrale Excel / Finance Summary
| Hauswaehrung, keine stille App-Kursumrechnung
|
@@ -111,6 +124,7 @@ Beim normalen Standortexport gilt:
```text
Daten holen
-> Transformationen anwenden
+ -> optional Audit-CSV Sales_ProcessedMergeInput_*.csv schreiben
-> Standort-Excel schreiben
-> CentralSalesRecords fuer diesen Standort ersetzen
-> optional SharePoint Upload
@@ -125,6 +139,8 @@ Ohne aktive `ConvertCurrency`-Transformation passiert keine App-Kursumrechnung.
Damit bleibt nachvollziehbar, ob ein Wert bereits vom Landessystem als Hauswaehrungswert geliefert wurde oder ob er spaeter nur in der Anzeige umgerechnet wurde.
+Die Audit-CSV wird an derselben Stelle im Ablauf geschrieben: nach Mapping/Transformation und vor der zentralen Auswertung. Sie ist deshalb fuer Finance/Revision das lesbare Abbild des verarbeiteten Merge-Eingangs, nicht das originale Standortfile.
+
## 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.
@@ -132,7 +148,9 @@ Die fuehrende Finance Summary im Dashboard und das zentrale Excel-Blatt `Finance
Logik:
```text
-CentralSalesRecords
+zentrale Auswertungsquelle
+ Standard: CentralSalesRecords
+ optional: Sales_ProcessedMergeInput_*.csv
-> FinanceRuleEngine
-> Finance | Net Sales Actual
-> Gruppierung nach Jahr, Land, Finance-Waehrung
@@ -166,7 +184,7 @@ Die Kursanwendung fuer einen zentralen Dashboard-Wert passiert in der Management
Eingaben:
-- Datenbasis: `CentralSalesRecords`.
+- Datenbasis: zentrale Auswertungsquelle, also `CentralSalesRecords` oder bei aktivem Audit-Modus die neuesten `Sales_ProcessedMergeInput_*.csv` je TSC.
- Summenfeld: z. B. `SalesPriceValue`, `StandardCost`, `StandardCostTotal`, `Quantity`.
- Anzeige-Waehrung: `NATIVE`, `CHF`, `EUR` oder `USD`.
- Zeitraum/Filter: Jahr, Monat, Land, TSC.
@@ -296,6 +314,8 @@ ORDER BY FromCurrency, ToCurrency, ValidFrom DESC;
| ECB-Import | `Services/ExchangeRateImportService.cs` |
| Settings/Kurspflege | `Services/SettingsPageService.cs`, `Components/Pages/Settings.razor` |
| Standortexport-Reihenfolge | `Services/SiteExportService.cs` |
+| Audit-CSV schreiben/lesen | `Services/ExportAuditCsvService.cs` |
+| zentrale Quelle DB oder CSV | `Services/CentralSalesDataProvider.cs` |
| zentrale Speicherung | `Services/CentralSalesRecordService.cs` |
| zentrale Analyse mit Zielwaehrung | `Services/ManagementCockpitService.cs` |
| Finance Summary ohne stille Umrechnung | `Services/ManagementCockpitService.cs`, `Services/ExcelExportService.cs` |
diff --git a/TrafagSalesExporter/docs/FINANCE_PROZESS_EXPORT_DASHBOARD_2026-06-11.svg b/TrafagSalesExporter/docs/FINANCE_PROZESS_EXPORT_DASHBOARD_2026-06-11.svg
new file mode 100644
index 0000000..0b21ffb
--- /dev/null
+++ b/TrafagSalesExporter/docs/FINANCE_PROZESS_EXPORT_DASHBOARD_2026-06-11.svg
@@ -0,0 +1,106 @@
+
diff --git a/TrafagSalesExporter/docs/FINANCE_SCHULUNG_FINANZ_2026-06-11.md b/TrafagSalesExporter/docs/FINANCE_SCHULUNG_FINANZ_2026-06-11.md
new file mode 100644
index 0000000..79c3568
--- /dev/null
+++ b/TrafagSalesExporter/docs/FINANCE_SCHULUNG_FINANZ_2026-06-11.md
@@ -0,0 +1,410 @@
+# Finance Schulung fuer Finance-Anwender
+
+Stand: 2026-06-11
+
+Zweck: Diese Schulungsunterlage beschreibt den aktuellen Finance-Prozess vom Standortexport bis zu Dashboard, zentraler Excel und Soll/Ist-Vergleich. Sie ist fuer Finance, Finance Keyuser und Wirtschaftspruefung gedacht.
+
+## Prozessgrafiken
+
+Die folgenden Grafiken zeigen die wichtigsten Zusammenhaenge vor den Detailkapiteln:
+
+
+
+
+
+
+
+## Kurzfazit
+
+- Fuehrende Sicht fuer Soll/Ist ist `Finance Summary` bzw. der Soll/Ist-Vergleich.
+- Das zentrale Excel ist ein Ergebnis des aktuellen Datenbestands, nicht die Live-Quelle des Dashboards.
+- Standortexporte schreiben optional eine nachvollziehbare Audit-CSV nach Mapping und Transformation.
+- Die Audit-CSV heisst `Sales_ProcessedMergeInput__.csv` und ist das verarbeitete Merge-Eingangsfile, nicht das originale Standortfile.
+- Per Einstellung kann die zentrale Auswertung von `CentralSalesRecords` auf die neuesten Audit-CSV je Standort umgeschaltet werden.
+- Waehrungsumrechnung passiert nicht still im Standard-Ist. Sie passiert nur in klaren Analyse-/Transformationsfaellen.
+
+## Rollen
+
+| Rolle | Aufgabe |
+| --- | --- |
+| Finance Anwender | Finance Summary, zentrale Excel und Soll/Ist pruefen |
+| Finance Keyuser | Standortexporte starten, Audit-CSV kontrollieren, Freigabe vorbereiten |
+| Wirtschaftspruefung | Datenfluss ueber verarbeitete CSV, zentrale Excel und Detailzeilen nachvollziehen |
+| Admin / IT | Standorte, Quellen, Mappings, Kurse, SharePoint und Regeln pflegen |
+
+## Prozessfluss: Export bis Dashboard
+
+```text
+Quellsystem oder Standortdatei
+ |
+ +-- Export Dashboard: Standort exportieren
+ |
+ +-- Adapter liest Daten
+ | HANA/B1, SAP Gateway/OData oder Manual Excel/CSV/SharePoint
+ |
+ +-- Mapping ins SalesRecord-Modell
+ |
+ +-- Transformationen anwenden
+ | z. B. Feldkopien, FirstNonEmpty, optional ConvertCurrency
+ |
+ +-- Audit-CSV schreiben, falls aktiv
+ | Sales_ProcessedMergeInput__.csv
+ |
+ +-- Standort-Excel schreiben
+ | Sales__.xlsx
+ |
+ +-- CentralSalesRecords fuer diesen Standort ersetzen
+ |
+ +-- Standort-Excel und Audit-CSV nach SharePoint hochladen, falls konfiguriert
+
+Zentrale Auswertungsquelle
+ |
+ +-- Standard: CentralSalesRecords
+ |
+ +-- Optional: neueste Sales_ProcessedMergeInput_*.csv je TSC
+ |
+ +-- Finance Summary / Management Analyse
+ +-- Soll/Ist-Vergleich
+ +-- Zentrale Excel Sales_All_.xlsx
+```
+
+Wichtig fuer Finance: Der Standortexport schreibt zuerst die verarbeiteten Daten. Danach entscheidet die Einstellung `Zentrale Auswertung aus Audit-CSV`, ob Dashboard und zentrale Excel aus der internen DB oder aus den neuesten verarbeiteten CSV-Dateien lesen.
+
+## Schalter in der App
+
+Die Schalter liegen unter:
+
+```text
+Einstellungen > Export Einstellungen > Audit-CSV / nachvollziehbarer Datenfluss
+```
+
+| Feld | Wirkung |
+| --- | --- |
+| `Lokaler Standardpfad Standort-Dateien` | Ordner fuer Standort-Excel und Audit-CSV. Wenn leer, wird `output` im App-Verzeichnis verwendet. |
+| `Audit-CSV je Standort schreiben` | Schreibt beim Laenderexport je Standort eine verarbeitete CSV. |
+| `Zentrale Auswertung aus Audit-CSV` | Dashboard, zentrale Excel und Finance-Auswertungen lesen die neuesten Audit-CSV statt der internen DB. |
+| `Wechselkurse anwenden auf` | Datumsfeld fuer Kursgueltigkeit in Management-Analysen: `PostingDate`, `InvoiceDate` oder `ExtractionDate`. |
+
+Es gibt keinen separaten sichtbaren Audit-CSV-Pfad. Die Audit-CSV liegt bewusst im gleichen Ordner wie die lokalen Standortdateien und wird beim Standortexport in den gleichen SharePoint-Landesordner hochgeladen.
+
+## Dateinamen und Bedeutung
+
+| Datei | Bedeutung |
+| --- | --- |
+| `Sales__.xlsx` | Standort-Excel fuer Menschen und Ablage. |
+| `Sales_ProcessedMergeInput__.csv` | Verarbeitetes Standortfile nach Mapping und Transformation; Eingang fuer Merge/zentrale Auswertung, auditierbar. |
+| `Sales_All_.xlsx` | Zentrale Excel mit Finance Summary, Finance Details und Sales-Blatt. |
+
+Die Audit-CSV ist nicht das originale Standortfile aus Sage, Alphaplan, HANA oder SAP. Sie ist das bereits verarbeitete File, das fachlich erklaert, welche Zeilen in den zentralen Merge gehen.
+
+## Zentrale Auswertungsquelle
+
+### Standard: interne DB
+
+Im Standard liest die App aus `CentralSalesRecords`.
+
+```text
+Standortexport
+ -> CentralSalesRecords fuer Standort ersetzen
+ -> Dashboard und zentrale Excel lesen CentralSalesRecords
+```
+
+Das ist die schnellste operative Variante.
+
+### Audit-Modus: CSV als zentrale Quelle
+
+Wenn `Zentrale Auswertung aus Audit-CSV` aktiv ist:
+
+```text
+Ordner mit Sales_ProcessedMergeInput_*.csv
+ -> je TSC die neueste Datei suchen
+ -> CSV lesen
+ -> Dashboard, zentrale Excel und Soll/Ist daraus bilden
+```
+
+Das ist die nachvollziehbare Variante fuer Finance/Revision. Finance kann die CSV-Dateien oeffnen, summieren und gegen die zentrale Excel pruefen.
+
+Kontrollregel: Wenn der Audit-Modus aktiv ist, muessen fuer alle relevanten Standorte aktuelle `Sales_ProcessedMergeInput_*.csv` im Standort-Exportordner vorhanden sein.
+
+## Waehrungsumrechnung
+
+Die Kurstabelle liegt in der App unter:
+
+```text
+Einstellungen > Wechselkurse
+```
+
+Technisch ist das die Tabelle `CurrencyExchangeRates` mit:
+
+| Feld | Bedeutung |
+| --- | --- |
+| `FromCurrency` | Quellwaehrung |
+| `ToCurrency` | Zielwaehrung |
+| `Rate` | Faktor: Betrag * Rate |
+| `ValidFrom` / `ValidTo` | Gueltigkeitszeitraum |
+| `Notes` | z. B. `Budget 2025`, `Budget 2026`, `ECB daily reference rate` |
+| `IsActive` | nur aktive Kurse werden verwendet |
+
+Die App sucht Kurse so:
+
+1. gleiche Waehrung ergibt Faktor `1`.
+2. direkter Kurs `Quelle -> Ziel`.
+3. falls fehlt: inverser Kurs `Ziel -> Quelle`, gerechnet als `1 / Rate`.
+4. falls fehlt: Kreuzkurs ueber `EUR`.
+5. falls weiterhin fehlt: keine Umrechnung; die Anzeige zaehlt fehlende Kurse.
+
+## Wo Kurse wirken
+
+| Bereich | Kurswirkung |
+| --- | --- |
+| Standard `Finance Summary` | keine stille Umrechnung; Hauswaehrung je Land bleibt fuehrend |
+| Zentrale Excel `Finance Summary` / `Finance Details` | keine stille globale Zielwaehrung |
+| Management Analyse mit Zielwaehrung `CHF`, `EUR`, `USD` | App rechnet zur Anzeige ueber `CurrencyExchangeRates` um |
+| Transformation `ConvertCurrency` | schreibt beim Standortexport dauerhaft ein Zielfeld um |
+| Soll/Ist-Kandidat `Nettofakturawert Hauswaehrung -> CHF Budget ` | nutzt Kurse mit `Notes = Budget ` als separate Kontrollsicht |
+| ERP-Feld `DocumentRate` | gespeicherte Quellinformation, nicht automatisch die App-Umrechnung |
+
+Die Standardfreigabe erfolgt zuerst in lokaler Hauswaehrung. Eine CHF- oder EUR-Sicht ist eine separate Reporting-/Analysefrage.
+
+## Datumsfeld fuer Kurse
+
+In `Einstellungen > Export Einstellungen` bestimmt `Wechselkurse anwenden auf`, welches Datum fuer die Kursgueltigkeit verwendet wird:
+
+| Einstellung | Kursdatum |
+| --- | --- |
+| `PostingDate` | `PostingDate`, sonst `InvoiceDate`, sonst `ExtractionDate` |
+| `InvoiceDate` | `InvoiceDate`, sonst `PostingDate`, sonst `ExtractionDate` |
+| `ExtractionDate` | `ExtractionDate` |
+
+Diese Einstellung betrifft Management-Analysen mit Zielwaehrung. Sie aendert nicht die Rohdaten und nicht die normalen Standort-Exporte.
+
+## Zentrale Excel
+
+Die zentrale Excel wird ueber das Export Dashboard erzeugt:
+
+```text
+Export Dashboard > Zentrale Datei neu erzeugen
+```
+
+Sie enthaelt typischerweise:
+
+| Blatt | Zweck |
+| --- | --- |
+| `Finance Summary` | Summen nach Jahr, Land und Waehrung |
+| `Finance Details` | Detailzeilen, die in die Finance Summary eingehen |
+| `Sales` | vollstaendige verarbeitete Exportdaten |
+| `Finance Filter Hilfe` | Hinweise fuer Excel-Filter |
+
+Wenn die zentrale Auswertungsquelle auf Audit-CSV steht, wird die zentrale Excel aus den neuesten Audit-CSV gebildet. Wenn die Auswertungsquelle auf DB steht, wird sie aus `CentralSalesRecords` gebildet.
+
+## Soll/Ist-Vergleich
+
+Der Soll/Ist-Vergleich nutzt dieselbe Finance-Logik wie Finance Summary und zentrale Excel.
+
+| Feld | Bedeutung |
+| --- | --- |
+| `Ist` | aktueller Finance-Istwert |
+| `Referenz` | Soll-/check.xlsx-Wert bzw. FinanceReference |
+| `Differenz` | Ist minus Referenz |
+| `Varianten` | alternative technische Berechnungskandidaten |
+| `IC` | Intercompany-/2nd-party-Diagnose, nicht stiller Abzug |
+
+Wenn im Expertenmodus Varianten angezeigt werden, muss der Sollwert weiterhin sichtbar bleiben, weil Finance die Differenz nur mit Referenzwert beurteilen kann.
+
+## Laenderlogik kurz
+
+| Land | Quelle / Logik |
+| --- | --- |
+| CH / AT | SAP Gateway/OData `ZSCHWEIZ`, `NetwrHc`, Spartenreferenz aus `ProductDivisionRefSet` |
+| DE | Alphaplan Excel, `NettoPreisGesamtX`, Finance-Regeln fuer Ausschluesse und GS negativ |
+| ES | Sage CSV, Basis plus Range-/Delta-Dateien, `ImporteNeto`, REC/Abono/Credit negativ |
+| FR | SAP B1/HANA, Rechnungen und Gutschriften als Positions-Netto |
+| IN | SAGE/HANA `TRIN`, Hauswaehrung INR |
+| IT | SAP B1/HANA, IT-Abgrenzung mit `Trafag Italia` und Blank-Supplier-Deduplizierung |
+| UK | Sage/Manual Excel, Jahresdatei plus Delta-Dateien, `[Sales Price/Value] * [Quantity]`, Credit Notes negativ |
+| US | SAP B1/HANA, Positions-Netto in USD |
+
+## Schulungsbeispiele: 4 Zeilen je Land
+
+Die folgenden Zahlen sind bewusst kleine Schulungssamples, keine produktiven Ist-Werte. Sie zeigen den Fluss:
+
+```text
+Quellzeile
+ -> Mapping / Transformation beim Standortexport
+ -> Sales_ProcessedMergeInput__.csv oder CentralSalesRecords
+ -> FinanceRuleEngine
+ -> Finance Summary / Finance Details im zentralen Excel
+ -> Dashboard / Soll-Ist
+```
+
+### Wo die Transformation wirkt
+
+Transformationen wirken beim Standortexport, nachdem die Quelle gelesen und bevor Audit-CSV, Standort-Excel und zentrale Datenbasis geschrieben werden.
+
+```text
+Quelle lesen
+ -> Mapping in SalesRecord
+ -> FieldTransformationRules anwenden
+ -> Audit-CSV schreiben
+ -> Standort-Excel schreiben
+ -> CentralSalesRecords ersetzen
+```
+
+Wenn `Zentrale Auswertung aus Audit-CSV` aktiv ist, liest das Dashboard spaeter die bereits transformierten `Sales_ProcessedMergeInput_*.csv`. Wenn der Schalter aus ist, liest es die transformierten DB-Eintraege aus `CentralSalesRecords`. Die Summenlogik ist danach dieselbe.
+
+### CH / Schweiz, TSC CH
+
+| Sample | Quellwert | Mapping / Transformation | Wert fuer Merge | Finance-Beitrag |
+| --- | ---: | --- | ---: | ---: |
+| CH-1 Rechnung | `NetwrHc = 1'000 CHF` | `Z.NetwrHc -> SalesPriceValue`, `Z.Hwaer -> SalesCurrency` | `1'000 CHF` | `1'000 CHF` |
+| CH-2 Rechnung | `NetwrHc = 250 CHF` | Spartenfelder aus `ProductDivisionRefSet` angehaengt | `250 CHF` | `250 CHF` |
+| CH-3 Gutschrift | `NetwrHc = -80 CHF` | Vorzeichen kommt aus Quelle/Beleglogik | `-80 CHF` | `-80 CHF` |
+| CH-4 Service | `NetwrHc = 30 CHF` | Service bleibt normale Finance-Zeile | `30 CHF` | `30 CHF` |
+
+Summe CH im zentralen Excel: `1'200 CHF`.
+
+### AT / Oesterreich, TSC AT
+
+| Sample | Quellwert | Mapping / Transformation | Wert fuer Merge | Finance-Beitrag |
+| --- | ---: | --- | ---: | ---: |
+| AT-1 Rechnung | `NetwrHc = 800 EUR` | `Z.NetwrHc -> SalesPriceValue`, `Z.Hwaer -> SalesCurrency` | `800 EUR` | `800 EUR` |
+| AT-2 Rechnung | `NetwrHc = 120 EUR` | Material wird gegen TR-AG-Referenz gemappt | `120 EUR` | `120 EUR` |
+| AT-3 Gutschrift | `NetwrHc = -50 EUR` | negative Belegzeile bleibt negativ | `-50 EUR` | `-50 EUR` |
+| AT-4 Rechnung | `NetwrHc = 40 EUR` | keine Kursumrechnung im Standard-Ist | `40 EUR` | `40 EUR` |
+
+Summe AT im zentralen Excel: `910 EUR`.
+
+### DE / Deutschland, TSC TRDE
+
+| Sample | Quellwert | Mapping / Transformation | Wert fuer Merge | Finance-Beitrag |
+| --- | ---: | --- | ---: | ---: |
+| DE-1 Rechnung | `NettoPreisGesamtX = 1'500 EUR` | Alphaplan-Spalte -> `SalesPriceValue` | `1'500 EUR` | `1'500 EUR` |
+| DE-2 GS-Gutschrift | `NettoPreisGesamtX = 200 EUR`, `InvoiceNumber = GS...` | Finance-Regel rechnet GS negativ | `200 EUR` | `-200 EUR` |
+| DE-3 Trafag AG | `500 EUR`, Kunde `Trafag AG` | Finance-Regel schliesst aus | `500 EUR` | `0 EUR` |
+| DE-4 Magnetic Sense | `120 EUR`, Kunde enthaelt `Magnetic Sense` | Finance-Regel schliesst aus | `120 EUR` | `0 EUR` |
+
+Summe DE im zentralen Excel: `1'300 EUR`.
+
+### ES / Spanien, TSC TRSE/TRES
+
+| Sample | Quellwert | Mapping / Transformation | Wert fuer Merge | Finance-Beitrag |
+| --- | ---: | --- | ---: | ---: |
+| ES-1 Basisrechnung | `ImporteNeto = 700 EUR` | Sage `ImporteNeto -> SalesPriceValue` | `700 EUR` | `700 EUR` |
+| ES-2 Range-Rechnung | `ImporteNeto = 180 EUR` | Range-Datei wird mit Basis zusammengesetzt | `180 EUR` | `180 EUR` |
+| ES-3 REC/Abono | `ImporteNeto = 60 EUR`, Typ REC | Credit-/REC-Logik setzt negativ | `-60 EUR` | `-60 EUR` |
+| ES-4 Duplikat | gleiche `SourceLineId` wie ES-2 | Dedupe entfernt zweite Zeile | `0 EUR` | `0 EUR` |
+
+Summe ES im zentralen Excel: `820 EUR`.
+
+### FR / Frankreich, TSC TRFR
+
+| Sample | Quellwert | Mapping / Transformation | Wert fuer Merge | Finance-Beitrag |
+| --- | ---: | --- | ---: | ---: |
+| FR-1 Rechnung | `INV1.LineTotal = 900 EUR` | B1-Positionswert -> `SalesPriceValue` | `900 EUR` | `900 EUR` |
+| FR-2 Rechnung | `INV1.LineTotal = 100 EUR` | `OADM.MainCurncy -> SalesCurrency` | `100 EUR` | `100 EUR` |
+| FR-3 Credit Note | `RIN1.LineTotal = 40 EUR` | HANA-Abfrage setzt Credit Note negativ | `-40 EUR` | `-40 EUR` |
+| FR-4 Storno | `CANCELED = Y` | HANA-Filter laesst Storno weg | `0 EUR` | `0 EUR` |
+
+Summe FR im zentralen Excel: `960 EUR`.
+
+### IN / Indien, TSC TRIN
+
+| Sample | Quellwert | Mapping / Transformation | Wert fuer Merge | Finance-Beitrag |
+| --- | ---: | --- | ---: | ---: |
+| IN-1 Rechnung | `SalesValue = 90'000 INR` | SAGE/HANA-Wert -> `SalesPriceValue` | `90'000 INR` | `90'000 INR` |
+| IN-2 Rechnung | `SalesValue = 10'000 INR` | Hauswaehrung INR bleibt fuehrend | `10'000 INR` | `10'000 INR` |
+| IN-3 Gutschrift | `SalesValue = 5'000 INR` | Credit-Logik setzt negativ | `-5'000 INR` | `-5'000 INR` |
+| IN-4 fehlende Sparte | `SalesValue = 2'000 INR` | Umsatz bleibt drin, Spartenstatus separat pruefen | `2'000 INR` | `2'000 INR` |
+
+Summe IN im zentralen Excel: `97'000 INR`.
+
+### IT / Italien, TSC TRIT
+
+| Sample | Quellwert | Mapping / Transformation | Wert fuer Merge | Finance-Beitrag |
+| --- | ---: | --- | ---: | ---: |
+| IT-1 Rechnung | `INV1.LineTotal = 1'100 EUR` | B1-Positionswert -> `SalesPriceValue` | `1'100 EUR` | `1'100 EUR` |
+| IT-2 Trafag Italia | `300 EUR`, Kunde enthaelt `Trafag Italia` | IT-Finance-Regel schliesst aus | `300 EUR` | `0 EUR` |
+| IT-3 Blank-Supplier-Duplikat | `150 EUR` | IT-Dedupe zaehlt Position nur einmal | `150 EUR` | `150 EUR` |
+| IT-4 Credit Note | `RIN1.LineTotal = 70 EUR` | Credit Note negativ | `-70 EUR` | `-70 EUR` |
+
+Summe IT im zentralen Excel: `1'180 EUR`.
+
+### UK / England, TSC TRUK
+
+| Sample | Quellwert | Mapping / Transformation | Wert fuer Merge | Finance-Beitrag |
+| --- | ---: | --- | ---: | ---: |
+| UK-1 Rechnung | `Sales Price/Value = 100 GBP`, `Quantity = 5` | `SageNetSales = 100 * 5` | `500 GBP` | `500 GBP` |
+| UK-2 Rechnung | `Sales Price/Value = 80 GBP`, `Quantity = 2` | Quantity-Multiplikation | `160 GBP` | `160 GBP` |
+| UK-3 Credit Note | `50 GBP`, `Quantity = 1`, Credit Type | Credit Notes negativ | `-50 GBP` | `-50 GBP` |
+| UK-4 Delta | neue Datei `ddMMyy_TRUK.xlsx` | Basis + Delta zusammen gelesen | `40 GBP` | `40 GBP` |
+
+Summe UK im zentralen Excel: `650 GBP`.
+
+### US / USA, TSC TRUS
+
+| Sample | Quellwert | Mapping / Transformation | Wert fuer Merge | Finance-Beitrag |
+| --- | ---: | --- | ---: | ---: |
+| US-1 Rechnung | `INV1.LineTotal = 2'000 USD` | B1-Positionswert -> `SalesPriceValue` | `2'000 USD` | `2'000 USD` |
+| US-2 Rechnung | `INV1.LineTotal = 350 USD` | Hauswaehrung USD bleibt fuehrend | `350 USD` | `350 USD` |
+| US-3 Credit Note | `RIN1.LineTotal = 100 USD` | Credit Note negativ | `-100 USD` | `-100 USD` |
+| US-4 Storno | `CANCELED = Y` | HANA-Filter laesst Storno weg | `0 USD` | `0 USD` |
+
+Summe US im zentralen Excel: `2'250 USD`.
+
+### Was im Dashboard sichtbar wird
+
+| Schritt | Sichtbares Ergebnis |
+| --- | --- |
+| Standortexport | pro Land entsteht ein verarbeiteter Stand in Audit-CSV und/oder `CentralSalesRecords` |
+| `Zentrale Datei neu erzeugen` | `Finance Summary` summiert die Finance-Beitraege je Jahr, Land und Waehrung |
+| `Finance Details` | zeigt die einzelnen eingeschlossenen Detailzeilen hinter der Summe |
+| Dashboard `Finance Summary` | zeigt dieselben Summen wie das zentrale Excel |
+| Soll/Ist | vergleicht die Summe gegen `FinanceReference` / `check.xlsx` |
+| Management Analyse mit Zielwaehrung | rechnet nur fuer die Anzeige ueber `CurrencyExchangeRates` um |
+
+## Pruefung fuer Finance/Revision
+
+1. In `Einstellungen` pruefen, ob `Audit-CSV je Standort schreiben` aktiv ist.
+2. Fuer jedes relevante Land den Standortexport starten.
+3. Im Standortordner pruefen:
+ - `Sales__.xlsx`
+ - `Sales_ProcessedMergeInput__.csv`
+4. Optional `Zentrale Auswertung aus Audit-CSV` aktivieren.
+5. `Zentrale Datei neu erzeugen`.
+6. In der zentralen Excel `Finance Summary` und `Finance Details` pruefen.
+7. Soll/Ist-Vergleich gegen Referenzwerte pruefen.
+8. Bei Abweichungen zuerst Audit-CSV und Finance Details nach TSC, Land, Jahr, Waehrung und Belegnummer filtern.
+
+## Typische Fehlerbilder
+
+| Symptom | Wahrscheinliche Ursache | Pruefung |
+| --- | --- | --- |
+| Audit-Modus aktiv, aber Dashboard leer/Fehler | keine `Sales_ProcessedMergeInput_*.csv` im Exportordner | Standortexport erneut starten, Pfad pruefen |
+| CSV fehlt im SharePoint-Landesordner | Standortexport lief vor Audit-CSV-Upload-Stand oder SharePoint-Upload fehlgeschlagen | aktuellen Export erneut starten, Log pruefen |
+| zentrale Excel wirkt alt | nach Standortexport nicht neu erzeugt oder falsche zentrale Quelle aktiv | Export Dashboard und Settings pruefen |
+| `Mixed` bei Waehrung | mehrere native Waehrungen im Filter | Land/Waehrung filtern oder Zielwaehrung in Analyse waehlen |
+| fehlende Kurse | kein aktiver gueltiger Kurs in `CurrencyExchangeRates` | Kurs, Gueltigkeit und `Wechselkurse anwenden auf` pruefen |
+
+## Freigabe-Checkliste
+
+| Nr. | Checkpunkt |
+| --- | --- |
+| 1 | Alle relevanten Standorte exportiert |
+| 2 | Audit-CSV je Standort vorhanden, falls Revision/Finance den CSV-Fluss prueft |
+| 3 | Zentrale Auswertungsquelle bewusst gewaehlt: DB oder Audit-CSV |
+| 4 | Zentrale Excel nach den Standortexporten neu erzeugt |
+| 5 | `Finance Summary` und `Finance Details` stimmen je Jahr/Land/Waehrung zusammen |
+| 6 | Soll/Ist zeigt keine unerwarteten Abweichungen |
+| 7 | Wechselkursfragen getrennt vom lokalen Hauswaehrungsvergleich beurteilt |
+| 8 | offene Laenderpunkte dokumentiert |
+
+## Abgleich gegen alte Schulungsaussagen
+
+Diese Punkte waren in aelteren Schulungsunterlagen veraltet und sind mit Stand 2026-06-11 korrigiert:
+
+- Spanien ist nicht mehr pauschal nur Vollfile; Basis plus Range-/Delta-Dateien sind unterstuetzt.
+- Nach einem Standortexport kann zusaetzlich eine Audit-CSV entstehen und nach SharePoint hochgeladen werden.
+- Dashboard und zentrale Excel koennen optional aus Audit-CSV lesen; frueher war nur `CentralSalesRecords` beschrieben.
+- Die Audit-CSV hat den neuen Namen `Sales_ProcessedMergeInput__.csv`.
+- Die Wechselkurstabelle wird nicht still fuer Standard-Finance-Soll/Ist angewendet.
+- Die aktuellen Management-Reiter sind links erreichbar; doppelte obere Reiterbaender wurden reduziert.
diff --git a/TrafagSalesExporter/docs/FINANCE_WAEHRUNG_KURSFLUSS_2026-06-11.svg b/TrafagSalesExporter/docs/FINANCE_WAEHRUNG_KURSFLUSS_2026-06-11.svg
new file mode 100644
index 0000000..3373000
--- /dev/null
+++ b/TrafagSalesExporter/docs/FINANCE_WAEHRUNG_KURSFLUSS_2026-06-11.svg
@@ -0,0 +1,85 @@
+
diff --git a/TrafagSalesExporter/docs/MANUAL_IMPORT_DELTA_STAND_2026-05-21.md b/TrafagSalesExporter/docs/MANUAL_IMPORT_DELTA_STAND_2026-05-21.md
index 030439f..da25b31 100644
--- a/TrafagSalesExporter/docs/MANUAL_IMPORT_DELTA_STAND_2026-05-21.md
+++ b/TrafagSalesExporter/docs/MANUAL_IMPORT_DELTA_STAND_2026-05-21.md
@@ -1,6 +1,6 @@
# Manual-Import und Delta-Stand
-Stand: 2026-06-05
+Stand: 2026-06-11
Diese Datei beschreibt, wie manuelle Excel-/CSV-Importe aktuell behandelt werden und wie neue Eintraege bzw. Delta-Dateien verarbeitet werden.
@@ -28,6 +28,7 @@ UK ist aktuell am besten fuer laufende Delta-Lieferungen vorbereitet.
| Auswahl | Jahresdatei zuerst, danach alle spaeteren Delta-Dateien im gleichen Jahr |
| Import | App liest alle ausgewaehlten Dateien in einem Lauf zusammen |
| Persistenz | `CentralSalesRecords` fuer `TRUK` werden ersetzt, nicht blind additiv angehaengt |
+| Audit-CSV | optional `Sales_ProcessedMergeInput_TRUK_.csv` nach Mapping/Transformation |
| Nach Delta-Lieferung | Delta-Datei in den Ordner legen, `TRUK` exportieren, danach zentrale Excel neu erzeugen |
Wichtig:
@@ -51,6 +52,7 @@ Aktueller Implementierungsstand:
- primaer ueber `SourceLineId`.
- Fallback ueber `TSC + InvoiceNumber + PositionOnInvoice + Material`.
- Beim Standortexport ersetzt die App weiterhin den bisherigen Spanien-Stand in `CentralSalesRecords`, aber mit dem zuvor zusammengesetzten und deduplizierten Gesamtstand.
+- Falls Audit-CSV aktiv ist, schreibt der Export zusaetzlich `Sales_ProcessedMergeInput__.csv` in den Standort-Exportordner und laedt sie in denselben SharePoint-Landesordner wie die Standort-Excel.
- Wenn nur eine einzelne Delta-Datei direkt als Dateipfad hinterlegt wird, kann weiterhin nur dieses Delta gelesen werden. Fuer Delta-Sync muss deshalb der Ordner hinterlegt sein.
Finance-Logik:
@@ -92,11 +94,18 @@ Offen:
1. Neue Datei oder Delta-Datei im richtigen Ordner bereitstellen.
2. In `Manuelle Importe` Pfad pruefen bzw. Standort aktiv lassen.
3. Standortexport fuer das betroffene Land ausfuehren.
-4. Danach `Zentrale Datei neu erzeugen` starten.
-5. Im zentralen Excel `Finance Summary` und `Finance Details` pruefen.
+4. Falls Audit-CSV fuer Finance/Revision gebraucht wird, im Exportordner `Sales_ProcessedMergeInput__.csv` pruefen.
+5. Falls die zentrale Auswertung aus CSV erfolgen soll, in `Einstellungen > Export Einstellungen` den Schalter `Zentrale Auswertung aus Audit-CSV` setzen.
+6. Danach `Zentrale Datei neu erzeugen` starten.
+7. Im zentralen Excel `Finance Summary` und `Finance Details` pruefen.
## Merksatz
-Manual-Importe ersetzen pro Standort den aktuellen Stand in `CentralSalesRecords`. Delta-Dateien muessen daher beim Import zusammen mit der passenden Basisdatei gelesen werden. Das ist aktuell nur fuer UK vorgesehen. Spanien und Deutschland muessen immer Vollfiles liefern.
+Manual-Importe ersetzen pro Standort den aktuellen Stand in `CentralSalesRecords`. Delta-Dateien muessen daher beim Import zusammen mit der passenden Basisdatei gelesen werden.
-Wichtig: Fuer Spanien und Deutschland ist das fachlich/prozessual so vorgesehen und durch den Ersetzungsmechanismus praktisch erforderlich. Eine technische Validierung, die Delta-Dateien fuer ES/DE aktiv blockiert, ist aktuell noch nicht eingebaut.
+Aktueller Stand:
+
+- UK: Basis plus Delta-Dateien.
+- Spanien: Basis plus `Spain_Sales_range_*.csv`, wenn ein Ordner hinterlegt ist.
+- Deutschland: weiterhin Vollfile/Jahresfile, keine Delta-Logik.
+- Audit-CSV ist ein zusaetzliches verarbeitetes Prueffile; es ersetzt nicht die originalen Standortdateien.
diff --git a/TrafagSalesExporter/docs/MD_DOKUMENTENSTATUS_2026-05-20.md b/TrafagSalesExporter/docs/MD_DOKUMENTENSTATUS_2026-05-20.md
index b24fbab..0ff4092 100644
--- a/TrafagSalesExporter/docs/MD_DOKUMENTENSTATUS_2026-05-20.md
+++ b/TrafagSalesExporter/docs/MD_DOKUMENTENSTATUS_2026-05-20.md
@@ -1,6 +1,6 @@
# Markdown-Dokumentenstatus
-Stand: 2026-06-10
+Stand: 2026-06-11
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.
@@ -18,6 +18,7 @@ Diese Datei ordnet die vorhandenen Markdown-Dateien ein. Ziel ist, alte Arbeitsn
| `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/FINANCE_SCHULUNG_FINANZ_2026-06-11.md` | Aktuelle Finance-Schulung fuer Anwender, Keyuser und Revision | Fuehrend fuer Schulung; ersetzt den alten Word-Inhalt fachlich |
| `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 |
@@ -27,7 +28,7 @@ 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_KURS_WORKFLOW_2026-06-09.md` | Isolierter Workflow fuer Kurs-/Waehrungsanwendung vom Land bis Dashboard | Aktuell fuer Kursfragen; SVG daneben |
+| `docs/FINANCE_KURS_WORKFLOW_2026-06-09.md` | Isolierter Workflow fuer Kurs-/Waehrungsanwendung vom Land bis Dashboard | Aktuell fuer Kursfragen; SVGs 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 |
@@ -59,6 +60,14 @@ Diese Dateien wurden am 2026-06-09 aus der aktiven Markdown-Struktur entfernt, w
| `docs/hr_kpi_cockpit_preview.png` | neutrale HR-Cockpit-Vorschaugrafik fuer DOCX |
| `docs/finance_cockpit_preview.png` | neutrale Finance-Cockpit-Vorschaugrafik fuer DOCX |
+## Neue Finance-Schulungsgrafiken seit 2026-06-11
+
+| Datei | Zweck |
+| --- | --- |
+| `docs/FINANCE_PROZESS_EXPORT_DASHBOARD_2026-06-11.svg` | End-to-end-Prozess vom Standortexport bis Dashboard/zentrale Excel |
+| `docs/FINANCE_AUDIT_CSV_QUELLE_2026-06-11.svg` | Umschaltung zentrale Quelle: DB oder verarbeitete Audit-CSV |
+| `docs/FINANCE_WAEHRUNG_KURSFLUSS_2026-06-11.svg` | Wo die App-Kurstabelle wirkt und wo nicht |
+
## Bereinigung
Bereinigung 2026-06-09:
@@ -67,6 +76,7 @@ Bereinigung 2026-06-09:
- 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: Produktsparten-Fallback `ProductDivisionMapSet`, India/SAGE-HANA-Deploy und Server-DB-Seeds wurden in `docs/DEPLOYMENT_IIS_HANDOFF_2026-05-19.md`, `spartenlogic/UEBERGABE_PRODUKTSPARTEN_ZUORDNUNG.md`, `docs/rag/DEPLOYMENT.md`, `docs/rag/PROJECT.md` und `lastchange.md` nachdokumentiert.
+- Delta 2026-06-11: Finance-Schulung, Audit-CSV-Prozessfluss, zentrale Auswertungsquelle und Kursfluss wurden in `docs/FINANCE_SCHULUNG_FINANZ_2026-06-11.md` und den neuen SVG-Grafiken dokumentiert.
Weiterhin gilt:
diff --git a/TrafagSalesExporter/docs/PROGRAMM_DIAGRAMME.md b/TrafagSalesExporter/docs/PROGRAMM_DIAGRAMME.md
index 75ffb5f..58c3a0c 100644
--- a/TrafagSalesExporter/docs/PROGRAMM_DIAGRAMME.md
+++ b/TrafagSalesExporter/docs/PROGRAMM_DIAGRAMME.md
@@ -1,6 +1,19 @@
# Programm-Diagramme
-Stand: 2026-05-20
+Stand: 2026-06-11
+
+## Nachtrag Finance-Schulung 2026-06-11
+
+Die aktuelle Finance-Schulung nutzt drei neue Prozessgrafiken:
+
+- `docs/FINANCE_PROZESS_EXPORT_DASHBOARD_2026-06-11.svg`
+ - zeigt den End-to-end-Fluss von Quellsystem ueber Mapping, Transformation, Audit-CSV, Standort-Excel, DB/CSV-Auswertungsquelle bis Dashboard und zentraler Excel.
+- `docs/FINANCE_AUDIT_CSV_QUELLE_2026-06-11.svg`
+ - zeigt den Schalter zwischen Standard-Auswertung aus `CentralSalesRecords` und Audit-Auswertung aus den neuesten `Sales_ProcessedMergeInput_*.csv` je TSC.
+- `docs/FINANCE_WAEHRUNG_KURSFLUSS_2026-06-11.svg`
+ - zeigt, dass Standard-Soll/Ist in Hauswaehrung bleibt und die App-Kurstabelle nur in expliziten Analyse-/Transformationspfaden wirkt.
+
+Die Markdown-Schulung dazu ist `docs/FINANCE_SCHULUNG_FINANZ_2026-06-11.md`.
## Nachtrag Anwenderdokus 2026-05-20
@@ -42,6 +55,15 @@ Fuer das Programm bieten sich zwei Diagrammarten an:
- beschreibt Quelle, Mapping, Hauswaehrung, Nettofakturawert, Buchungsdatum, IC-Ausweis und Sollvergleich
- macht sichtbar, dass der Algorithmus regelbasiert ist und nicht auf einzelne Testzahlen frisiert wurde
+- `docs/FINANCE_PROZESS_EXPORT_DASHBOARD_2026-06-11.svg`
+ - aktuelle Schulungsgrafik fuer Export Dashboard bis Finance-Ausgabe
+
+- `docs/FINANCE_AUDIT_CSV_QUELLE_2026-06-11.svg`
+ - aktuelle Schulungsgrafik fuer DB-/Audit-CSV-Auswertungsquelle
+
+- `docs/FINANCE_WAEHRUNG_KURSFLUSS_2026-06-11.svg`
+ - aktuelle Schulungsgrafik fuer Wechselkurs- und Waehrungspfad
+
## Abgleich gegen Quellcode
Die Diagramme wurden gegen folgende Codebereiche abgeglichen:
@@ -50,7 +72,9 @@ Die Diagramme wurden gegen folgende Codebereiche abgeglichen:
- `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/ConsolidatedExportService.cs`: zentrale Datei aus der zentralen Auswertungsquelle
+- `Services/CentralSalesDataProvider.cs`: Umschaltung zwischen `CentralSalesRecords` und Audit-CSV
+- `Services/ExportAuditCsvService.cs`: Schreiben/Lesen von `Sales_ProcessedMergeInput_*.csv`
- `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
diff --git a/TrafagSalesExporter/docs/RAG_ROUTER.md b/TrafagSalesExporter/docs/RAG_ROUTER.md
index 83c12eb..63d10df 100644
--- a/TrafagSalesExporter/docs/RAG_ROUTER.md
+++ b/TrafagSalesExporter/docs/RAG_ROUTER.md
@@ -1,6 +1,6 @@
# RAG Router
-Stand: 2026-06-10
+Stand: 2026-06-11
Zweck: Diese Datei zuerst laden. Danach nur die Dateien aus dem passenden Themenblock laden.
@@ -18,7 +18,7 @@ Zweck: Diese Datei zuerst laden. Danach nur die Dateien aus dem passenden Themen
| Aktueller Stand | Projektstatus, letzte Aenderungen, offene Punkte | `docs/rag/PROJECT.md` |
| Finance Cockpit | Soll/Ist, Finance Summary, Regeln, Laenderlogik | `docs/rag/FINANCE.md` |
| Finance Spezialfaelle | IT, UK, ES, Abweichungen | `docs/rag/FINANCE.md` |
-| Manual Import | UK-Deltas, ES/DE Vollfiles, Importprozess | `docs/rag/MANUAL_IMPORT.md` |
+| Manual Import | UK-Deltas, Spanien Basis+Range, DE Vollfile, Importprozess | `docs/rag/MANUAL_IMPORT.md` |
| HR KPI | HR Dashboard, Formeln, Datenqualitaet, Anwenderstand | `docs/rag/HR_KPI.md` |
| Deployment/IIS | Publish, Server, BiDashboard, TLS, lokaler Uebergang | `docs/rag/DEPLOYMENT.md` |
| Admin/Startseite | Admin Login, Sessions, Landing Page | `docs/rag/ADMIN.md` |
@@ -33,7 +33,9 @@ Zweck: Diese Datei zuerst laden. Danach nur die Dateien aus dem passenden Themen
| `docs/raw_md_archive/original_history_raws.zip` | exakte Originaldateien nur zur Wiederherstellung, nicht fuer RAG laden |
| `docs/MD_DOKUMENTENSTATUS_2026-05-20.md` | Einordnung alter Dokumente |
| `docs/FINANCE_ENTSCHEIDE.md` | Finance-Entscheide im Detail |
+| `docs/FINANCE_SCHULUNG_FINANZ_2026-06-11.md` | aktuelle Finance-Schulung, Prozessgrafiken, Audit-CSV und Waehrungsfluss |
| `docs/FINANCE_BERECHNUNGSFORMELN_LAENDER_2026-05-19.md` | Formeln pro Land |
+| `docs/FINANCE_DATENFLUSS_ANDREAS_2026-06-08.md` | technischer Finance-Datenfluss inklusive Audit-CSV |
| `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 |
@@ -47,6 +49,7 @@ Zweck: Diese Datei zuerst laden. Danach nur die Dateien aus dem passenden Themen
| Suchwort | Thema |
| --- | --- |
| `Finance Summary`, `Soll/Ist`, `check.xlsx`, `FinanceRuleEngine` | Finance Cockpit |
+| `Schulung`, `Training`, `Audit-CSV`, `Sales_ProcessedMergeInput`, `Auswertungsquelle`, `Wirtschaftspruefung` | `docs/FINANCE_SCHULUNG_FINANZ_2026-06-11.md` |
| `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 |
diff --git a/TrafagSalesExporter/docs/rag/FINANCE.md b/TrafagSalesExporter/docs/rag/FINANCE.md
index 28b0233..9112e21 100644
--- a/TrafagSalesExporter/docs/rag/FINANCE.md
+++ b/TrafagSalesExporter/docs/rag/FINANCE.md
@@ -1,11 +1,13 @@
# RAG Finance
-Stand: 2026-06-10
+Stand: 2026-06-11
## Kurzstand
- Fuehrende Sicht: `Finance Summary`.
-- Neu lokal: `Finance Summary`, zentrale Excel und Management-Analyse koennen wahlweise aus Audit-CSV statt direkt aus `CentralSalesRecords` lesen. Die Audit-CSV werden nach Mapping und Transformation geschrieben und dienen der Nachvollziehbarkeit fuer Finance/Revision.
+- Aktuelle Schulung: `docs/FINANCE_SCHULUNG_FINANZ_2026-06-11.md`.
+- `Finance Summary`, zentrale Excel, Soll/Ist und Management-Analyse koennen wahlweise aus Audit-CSV statt direkt aus `CentralSalesRecords` lesen. Die Audit-CSV werden nach Mapping und Transformation geschrieben und dienen der Nachvollziehbarkeit fuer Finance/Revision.
+- Audit-CSV-Dateiname: `Sales_ProcessedMergeInput__.csv`; liegt im gleichen Ordner wie das Standort-Excel und wird beim Standortexport in denselben SharePoint-Landesordner hochgeladen.
- `Finance Summary` nutzt dieselbe `FinanceRuleEngine` wie das zentrale Excel.
- `Management Analyse` bleibt Diagnose-/Plausibilitaetssicht, nicht fuehrende Finance-Zahl.
- Nach UX-Vereinfachung gibt es links eine schnellere Finance-Uebersicht; tiefe Diagnosefunktionen sind unter `Experten` gebuendelt.
@@ -35,6 +37,7 @@ Stand: 2026-06-10
- 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.
+- Schalter fuer Finance/Revision: `Einstellungen > Export Einstellungen > Audit-CSV / nachvollziehbarer Datenfluss`.
## Offene Fachpunkte
@@ -53,7 +56,15 @@ Stand: 2026-06-10
- `Datenqualitaet`: fehlende Materialnummern, ProductGroup, Waehrung, Kunde, Datum, Nullwerte und ausgeschlossene Zeilen.
- `Spartenanalyse > Finanzanalyse`: Umsatzabdeckung und Umsatz nach Produktsparte/Familie/PAPH1 auf Basis der TR-AG-Referenz.
- `Spartenanalyse > Zentrale Zuordnung`: Materialnummern aller Laender gegen TR-AG-Stamm pruefen.
-- `Rohdaten Diagnose`: direkte Plausibilitaets-/Rohdatensicht auf `CentralSalesRecords`.
+- `Rohdaten Diagnose`: direkte Plausibilitaets-/Rohdatensicht auf die zentrale Auswertungsquelle.
+
+## Audit-CSV / Auswertungsquelle
+
+- `Audit-CSV je Standort schreiben`: schreibt beim Laenderexport eine verarbeitete CSV nach Mapping und Transformation.
+- `Zentrale Auswertung aus Audit-CSV`: zentrale Auswertungen lesen je TSC die neueste `Sales_ProcessedMergeInput_*.csv`.
+- Der Pfad ist der `Lokaler Standardpfad Standort-Dateien`; ein separater sichtbarer Audit-Pfad wird nicht verwendet.
+- Standard ohne CSV-Schalter: zentrale Auswertungen lesen `CentralSalesRecords`.
+- Wenn der CSV-Schalter aktiv ist und keine passenden CSV vorhanden sind, ist die zentrale Auswertung nicht ausfuehrbar.
## Experten / 3D Datenanalyse
@@ -98,6 +109,7 @@ Stand: 2026-06-10
## Rohquellen Nur Bei Bedarf
- Entscheide: `docs/FINANCE_ENTSCHEIDE.md`, `entscheide.md`
+- Finance-Schulung: `docs/FINANCE_SCHULUNG_FINANZ_2026-06-11.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`
diff --git a/TrafagSalesExporter/docs/rag/MANUAL_IMPORT.md b/TrafagSalesExporter/docs/rag/MANUAL_IMPORT.md
index 6a39803..3bca51f 100644
--- a/TrafagSalesExporter/docs/rag/MANUAL_IMPORT.md
+++ b/TrafagSalesExporter/docs/rag/MANUAL_IMPORT.md
@@ -1,6 +1,6 @@
# RAG Manual Import
-Stand: 2026-06-05
+Stand: 2026-06-11
## Kurzstand
@@ -10,6 +10,8 @@ Stand: 2026-06-05
- ES/Spanien liest im Ordner alle `Spain_Sales*.csv`, also Basisdatei plus taegliche `Spain_Sales_range_YYYYMMDD_to_YYYYMMDD.csv`.
- Spanien-Deltas werden vor dem Speichern dedupliziert: zuerst `SourceLineId`, sonst Invoice/Position/Material.
- DE muss weiterhin Vollfiles liefern.
+- Wenn Audit-CSV aktiv ist, schreibt der Standortexport nach Mapping/Transformation zusaetzlich `Sales_ProcessedMergeInput__.csv` in den Standort-Exportordner.
+- Zentrale Auswertungen koennen per Setting aus den neuesten Audit-CSV je TSC statt direkt aus `CentralSalesRecords` lesen.
## Laender
@@ -24,8 +26,10 @@ Stand: 2026-06-05
1. Datei oder Delta im richtigen Ordner bereitstellen.
2. In `Manuelle Importe` Pfad/Standort pruefen.
3. Standortexport ausfuehren.
-4. Zentrale Datei neu erzeugen.
-5. `Finance Summary` und `Finance Details` pruefen.
+4. Optional Audit-CSV im Standort-Exportordner pruefen.
+5. Zentrale Auswertungsquelle bewusst setzen: DB oder Audit-CSV.
+6. Zentrale Datei neu erzeugen.
+7. `Finance Summary` und `Finance Details` pruefen.
## Spanien Delta-Sync
diff --git a/TrafagSalesExporter/docs/rag/PROJECT.md b/TrafagSalesExporter/docs/rag/PROJECT.md
index 2d2c1cf..cb8136e 100644
--- a/TrafagSalesExporter/docs/rag/PROJECT.md
+++ b/TrafagSalesExporter/docs/rag/PROJECT.md
@@ -1,11 +1,12 @@
# RAG Project
-Stand: 2026-06-10
+Stand: 2026-06-11
## Kurzstand
- Fuehrende App: `TrafagSalesExporter`, publiziert als `BiDashboard`.
-- Neu lokal: Audit-CSV-Modus fuer Finance/Revision. Standortexporte schreiben optional nach Mapping/Transformation je Standort eine lesbare CSV; zentrale Excel, Finance Summary und Management-Analyse koennen per Setting aus den neuesten Standort-CSV statt aus der internen DB lesen.
+- Neu lokal: Audit-CSV-Modus fuer Finance/Revision. Standortexporte schreiben optional nach Mapping/Transformation je Standort `Sales_ProcessedMergeInput__.csv`; zentrale Excel, Finance Summary, Soll/Ist und Management-Analyse koennen per Setting aus den neuesten Standort-CSV statt aus der internen DB lesen.
+- Aktuelle Finance-Schulung: `docs/FINANCE_SCHULUNG_FINANZ_2026-06-11.md` mit Prozessgrafiken fuer Exportfluss, Audit-CSV-Auswertungsquelle und Waehrungsumrechnung.
- Letzter dokumentierter Stand: CH/AT-Produktsparten-Fallback ueber `ProductDivisionMapSet` deployed; India/TRIN SAGE-HANA-Fix und Spanien-SharePoint-Pfad bleiben abgesichert.
- Validierung laut Doku: `87/87` Tests gruen fuer den Produktsparten-Fallback; fruehere UI-/Deploy-Schritte wurden einzeln umgesetzt und deployed.
- Letzter dokumentierter Deploy: 2026-06-10 auf `\\trch-webapp-bidashboard.trafagch.local\BiDashboard$\`.
diff --git a/TrafagSalesExporter/lastchange.md b/TrafagSalesExporter/lastchange.md
index 2f5f1df..0495de1 100644
--- a/TrafagSalesExporter/lastchange.md
+++ b/TrafagSalesExporter/lastchange.md
@@ -1,6 +1,6 @@
# Last Change
-Stand: 2026-06-10
+Stand: 2026-06-11
Diese Datei ist fuer tokenarme RAG-Nutzung komprimiert.
@@ -8,6 +8,8 @@ Diese Datei ist fuer tokenarme RAG-Nutzung komprimiert.
- Fuehrender Kurzkontext: `docs/rag/PROJECT.md`.
- Themenrouter: `docs/RAG_ROUTER.md`.
+- Neu lokal dokumentiert: aktuelle Finance-Schulung `docs/FINANCE_SCHULUNG_FINANZ_2026-06-11.md` mit Prozessgrafiken fuer Export Dashboard, Audit-CSV-Auswertungsquelle und Waehrungs-/Kursfluss.
+- Neue Schulungsgrafiken: `docs/FINANCE_PROZESS_EXPORT_DASHBOARD_2026-06-11.svg`, `docs/FINANCE_AUDIT_CSV_QUELLE_2026-06-11.svg`, `docs/FINANCE_WAEHRUNG_KURSFLUSS_2026-06-11.svg`.
- Neu lokal umgesetzt: Standortexporte koennen nach Mapping und Transformation eine lesbare Audit-CSV je Standort schreiben; zentrale Excel, Finance Summary und Management-Analyse koennen per Setting wahlweise aus den neuesten Audit-CSV statt aus `CentralSalesRecords` lesen.
- Letzter dokumentierter Code-Stand: CH/AT-Produktsparten-Fallback ueber `ProductDivisionMapSet` deployed; India/TRIN HANA-Route und Spanien-SharePoint-Pfad bleiben im Seed abgesichert.
- Letzte dokumentierte Validierung: `dotnet test TrafagSalesExporter.sln --verbosity minimal` mit `87/87` Tests gruen.