Update finance training and dashboard UI

This commit is contained in:
2026-06-11 11:32:35 +02:00
parent 2444a01fc7
commit f751295449
18 changed files with 938 additions and 133 deletions
@@ -37,16 +37,26 @@
} }
</MudText> </MudText>
</MudStack> </MudStack>
<div class="dashboard-manometer" aria-label="Export activity manometer"> <div class="dashboard-manometer">
<div class="manometer-arc"> <svg class="manometer-svg" viewBox="0 0 210 118" role="img" aria-label="Export activity manometer">
<span class="tick tick-0"></span> <path class="manometer-outer" d="M25 98 A80 80 0 0 1 185 98" />
<span class="tick tick-1"></span> <path class="manometer-inner" d="M47 98 A58 58 0 0 1 163 98" />
<span class="tick tick-2"></span> <line class="manometer-tick" x1="38" y1="98" x2="56" y2="98" />
<span class="tick tick-3"></span> <line class="manometer-tick" x1="61" y1="54" x2="74" y2="67" />
<span class="tick tick-4"></span> <line class="manometer-tick" x1="105" y1="34" x2="105" y2="52" />
<span class="needle"></span> <line class="manometer-tick" x1="149" y1="54" x2="136" y2="67" />
<span class="hub"></span> <line class="manometer-tick" x1="172" y1="98" x2="154" y2="98" />
</div> <text class="manometer-label" x="43" y="89">0</text>
<text class="manometer-label" x="67" y="53">25</text>
<text class="manometer-label" x="105" y="28">50</text>
<text class="manometer-label" x="143" y="53">75</text>
<text class="manometer-label" x="167" y="89">100</text>
<text class="manometer-caption" x="105" y="113">EXPORT</text>
<g class="manometer-needle">
<line class="needle-line" x1="105" y1="98" x2="105" y2="38" />
</g>
<circle class="manometer-hub" cx="105" cy="98" r="11" />
</svg>
</div> </div>
</div> </div>
</MudPaper> </MudPaper>
@@ -211,87 +221,80 @@
justify-self: end; justify-self: end;
width: 210px; width: 210px;
height: 118px; height: 118px;
display: flex;
align-items: flex-end;
justify-content: center;
background: #fff; background: #fff;
border: 1px solid #111; border: 1px solid #111;
border-radius: 6px; border-radius: 6px;
padding: 12px 14px 10px; overflow: hidden;
} }
.manometer-arc { .manometer-svg {
position: relative; display: block;
width: 170px; width: 100%;
height: 86px; height: 100%;
border: 8px solid #111;
border-bottom: 0;
border-radius: 170px 170px 0 0;
background: #fff;
overflow: visible;
} }
.manometer-arc::before { .manometer-outer,
content: ""; .manometer-inner {
position: absolute; fill: none;
left: 14px; stroke: #111;
right: 14px; stroke-linecap: square;
bottom: -1px;
height: 70px;
border: 2px solid #111;
border-bottom: 0;
border-radius: 140px 140px 0 0;
} }
.tick { .manometer-outer {
position: absolute; stroke-width: 8;
left: 50%;
bottom: 0;
width: 3px;
height: 16px;
background: #111;
transform-origin: 50% 78px;
} }
.tick-0 { transform: translateX(-50%) rotate(-70deg); } .manometer-inner {
.tick-1 { transform: translateX(-50%) rotate(-35deg); } stroke-width: 2;
.tick-2 { transform: translateX(-50%) rotate(0deg); } }
.tick-3 { transform: translateX(-50%) rotate(35deg); }
.tick-4 { transform: translateX(-50%) rotate(70deg); }
.needle { .manometer-tick,
position: absolute; .needle-line {
left: 50%; stroke: #111;
bottom: 0; stroke-width: 3;
width: 4px; stroke-linecap: square;
height: 72px; }
background: #111;
border-radius: 4px; .manometer-needle {
transform-origin: 50% 100%; transform-box: view-box;
transform-origin: 105px 98px;
animation: manometer-sweep 5.8s infinite cubic-bezier(.45, 0, .25, 1); animation: manometer-sweep 5.8s infinite cubic-bezier(.45, 0, .25, 1);
} }
.hub { .manometer-hub {
position: absolute; fill: #111;
left: 50%; }
bottom: -8px;
width: 22px; .manometer-label,
height: 22px; .manometer-caption {
border-radius: 50%; fill: #111;
background: #111; font-family: Arial, sans-serif;
transform: translateX(-50%); 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 { @@keyframes manometer-sweep {
0% { transform: translateX(-50%) rotate(-52deg); } 0% { transform: rotate(-52deg); }
11% { transform: translateX(-50%) rotate(18deg); } 11% { transform: rotate(18deg); }
19% { transform: translateX(-50%) rotate(-8deg); } 19% { transform: rotate(-8deg); }
33% { transform: translateX(-50%) rotate(63deg); } 33% { transform: rotate(63deg); }
48% { transform: translateX(-50%) rotate(4deg); } 48% { transform: rotate(4deg); }
61% { transform: translateX(-50%) rotate(38deg); } 61% { transform: rotate(38deg); }
74% { transform: translateX(-50%) rotate(-41deg); } 74% { transform: rotate(-41deg); }
88% { transform: translateX(-50%) rotate(55deg); } 88% { transform: rotate(55deg); }
100% { transform: translateX(-50%) rotate(-52deg); } 100% { transform: rotate(-52deg); }
} }
@@media (max-width: 900px) { @@media (max-width: 900px) {
@@ -51,7 +51,7 @@
@if (_financeResult is not null) @if (_financeResult is not null)
{ {
<MudTabs Elevation="1" Rounded="false" PanelClass="pt-4" @bind-ActivePanelIndex="_activeOverviewTabIndex"> <MudTabs Class="management-side-nav-tabs" Elevation="0" Rounded="false" PanelClass="pt-0" @bind-ActivePanelIndex="_activeOverviewTabIndex">
<MudTabPanel Text="@T("Schnelluebersicht", "Quick overview")" Icon="@Icons.Material.Filled.Speed"> <MudTabPanel Text="@T("Schnelluebersicht", "Quick overview")" Icon="@Icons.Material.Filled.Speed">
<MudGrid Class="mb-4"> <MudGrid Class="mb-4">
<MudItem xs="12" sm="6" md="3"> <MudItem xs="12" sm="6" md="3">
@@ -84,9 +84,7 @@
</MudItem> </MudItem>
</MudGrid> </MudGrid>
<MudTabs Elevation="0" Rounded="false" PanelClass="pt-4"> <MudPaper Class="pa-4 mb-4" Elevation="1">
<MudTabPanel Text="@T("Freigabe", "Approval")" Icon="@Icons.Material.Filled.FactCheck">
<MudPaper Class="pa-4" Elevation="1">
<MudText Typo="Typo.h6" Class="mb-2">@T("Finance-Freigabe je Land", "Finance approval by country")</MudText> <MudText Typo="Typo.h6" Class="mb-2">@T("Finance-Freigabe je Land", "Finance approval by country")</MudText>
<MudTable Items="_financeResult.CountryRows" Dense Hover Striped> <MudTable Items="_financeResult.CountryRows" Dense Hover Striped>
<HeaderContent> <HeaderContent>
@@ -109,9 +107,7 @@
</RowTemplate> </RowTemplate>
</MudTable> </MudTable>
</MudPaper> </MudPaper>
</MudTabPanel> <MudPaper Class="pa-4 mb-4" Elevation="1">
<MudTabPanel Text="@T("Datenstand", "Data status")" Icon="@Icons.Material.Filled.Storage">
<MudPaper Class="pa-4" Elevation="1">
<MudText Typo="Typo.h6" Class="mb-2">@T("Letzter Datenstand je Standort", "Latest data status by site")</MudText> <MudText Typo="Typo.h6" Class="mb-2">@T("Letzter Datenstand je Standort", "Latest data status by site")</MudText>
<MudTable Items="_financeResult.DataStatusRows" Dense Hover Striped> <MudTable Items="_financeResult.DataStatusRows" Dense Hover Striped>
<HeaderContent> <HeaderContent>
@@ -139,8 +135,6 @@
</RowTemplate> </RowTemplate>
</MudTable> </MudTable>
</MudPaper> </MudPaper>
</MudTabPanel>
<MudTabPanel Text="@T("Sparten", "Divisions")" Icon="@Icons.Material.Filled.AccountTree">
<MudPaper Class="pa-4" Elevation="1"> <MudPaper Class="pa-4" Elevation="1">
<MudText Typo="Typo.h6" Class="mb-2">@T("Sparten-Abdeckung nach Land", "Division coverage by country")</MudText> <MudText Typo="Typo.h6" Class="mb-2">@T("Sparten-Abdeckung nach Land", "Division coverage by country")</MudText>
<MudTable Items="_financeResult.ProductFinanceCountryRows" Dense Hover Striped> <MudTable Items="_financeResult.ProductFinanceCountryRows" Dense Hover Striped>
@@ -162,12 +156,10 @@
</RowTemplate> </RowTemplate>
</MudTable> </MudTable>
</MudPaper> </MudPaper>
</MudTabPanel>
</MudTabs>
</MudTabPanel> </MudTabPanel>
<MudTabPanel Text="@T("Experten", "Experts")" Icon="@Icons.Material.Filled.Tune"> <MudTabPanel Text="@T("Experten", "Experts")" Icon="@Icons.Material.Filled.Tune">
<MudTabs Elevation="0" Rounded="false" PanelClass="pt-4" @bind-ActivePanelIndex="_activeFinanceTabIndex"> <MudTabs Class="management-side-nav-tabs" Elevation="0" Rounded="false" PanelClass="pt-0" @bind-ActivePanelIndex="_activeFinanceTabIndex">
<MudTabPanel Text="@T("Finance Summary", "Finance summary")" Icon="@Icons.Material.Filled.Dashboard"> <MudTabPanel Text="@T("Finance Summary", "Finance summary")" Icon="@Icons.Material.Filled.Dashboard">
<MudGrid Class="mb-4"> <MudGrid Class="mb-4">
<MudItem xs="12" sm="6" md="3"> <MudItem xs="12" sm="6" md="3">
@@ -409,7 +401,7 @@
</MudPaper> </MudPaper>
</MudTabPanel> </MudTabPanel>
<MudTabPanel Text="@T("Spartenanalyse", "Division analysis")" Icon="@Icons.Material.Filled.AccountTree"> <MudTabPanel Text="@T("Spartenanalyse", "Division analysis")" Icon="@Icons.Material.Filled.AccountTree">
<MudTabs Elevation="0" Rounded="false" PanelClass="pt-4" @bind-ActivePanelIndex="_activeDivisionTabIndex"> <MudTabs Class="management-side-nav-tabs" Elevation="0" Rounded="false" PanelClass="pt-0" @bind-ActivePanelIndex="_activeDivisionTabIndex">
<MudTabPanel Text="@T("Finanzanalyse", "Finance analysis")" Icon="@Icons.Material.Filled.PieChart"> <MudTabPanel Text="@T("Finanzanalyse", "Finance analysis")" Icon="@Icons.Material.Filled.PieChart">
<MudGrid Class="mb-4"> <MudGrid Class="mb-4">
<MudItem xs="12" sm="6" md="3"> <MudItem xs="12" sm="6" md="3">
@@ -1108,6 +1100,12 @@
</MudTabs> </MudTabs>
} }
<style>
.management-side-nav-tabs .mud-tabs-toolbar {
display: none;
}
</style>
@code { @code {
[Parameter] [Parameter]
[SupplyParameterFromQuery(Name = "section")] [SupplyParameterFromQuery(Name = "section")]
@@ -0,0 +1,73 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1180" height="680" viewBox="0 0 1180 680" role="img" aria-labelledby="title desc">
<title id="title">Umschaltung zentrale Finance-Auswertungsquelle</title>
<desc id="desc">Zeigt, wie Finance-Auswertungen entweder aus CentralSalesRecords oder aus verarbeiteten Audit-CSV je Standort lesen.</desc>
<defs>
<marker id="arrow" viewBox="0 0 10 10" refX="8.5" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse">
<path d="M 0 0 L 10 5 L 0 10 z" fill="#334155" />
</marker>
<style>
.title { font: 700 29px Arial, sans-serif; fill: #0f172a; }
.subtitle { font: 400 16px Arial, sans-serif; fill: #475569; }
.box-title { font: 700 16px Arial, sans-serif; fill: #0f172a; }
.box-text { font: 400 13px Arial, sans-serif; fill: #334155; }
.small { font: 400 12px Arial, sans-serif; fill: #64748b; }
.line { stroke: #334155; stroke-width: 2.2; fill: none; marker-end: url(#arrow); }
.muted-line { stroke: #94a3b8; stroke-width: 1.5; fill: none; marker-end: url(#arrow); }
.settings { fill: #e0f2fe; stroke: #0284c7; }
.db { fill: #eef2ff; stroke: #4f46e5; }
.csv { fill: #ecfdf5; stroke: #059669; }
.output { fill: #fff7ed; stroke: #ea580c; }
.guard { fill: #fef2f2; stroke: #dc2626; }
</style>
</defs>
<rect x="0" y="0" width="1180" height="680" fill="#ffffff" />
<text x="48" y="54" class="title">Zentrale Auswertungsquelle: DB oder verarbeitete Audit-CSV</text>
<text x="48" y="82" class="subtitle">Der Schalter liegt unter Einstellungen &gt; Export Einstellungen &gt; Audit-CSV / nachvollziehbarer Datenfluss.</text>
<rect x="60" y="132" width="270" height="150" rx="8" class="settings" />
<text x="84" y="166" class="box-title">Settings</text>
<text x="84" y="195" class="box-text">Audit-CSV je Standort schreiben</text>
<text x="84" y="220" class="box-text">Zentrale Auswertung aus Audit-CSV</text>
<text x="84" y="249" class="small">Pfad: Lokaler Standardpfad Standort-Dateien</text>
<line x1="330" y1="207" x2="406" y2="207" class="line" />
<rect x="414" y="86" width="270" height="140" rx="8" class="db" />
<text x="438" y="120" class="box-title">Standard-Modus</text>
<text x="438" y="149" class="box-text">UseAuditCsvAsCentralSource = false</text>
<text x="438" y="177" class="box-text">Auswertung liest CentralSalesRecords.</text>
<text x="438" y="202" class="small">Schnell und operativ</text>
<rect x="414" y="292" width="270" height="160" rx="8" class="csv" />
<text x="438" y="326" class="box-title">Audit-Modus</text>
<text x="438" y="355" class="box-text">UseAuditCsvAsCentralSource = true</text>
<text x="438" y="383" class="box-text">Je TSC wird die neueste</text>
<text x="438" y="404" class="box-text">Sales_ProcessedMergeInput_*.csv gelesen.</text>
<text x="438" y="431" class="small">Lesbar fuer Finance und Revision</text>
<line x1="684" y1="156" x2="760" y2="238" class="line" />
<line x1="684" y1="372" x2="760" y2="302" class="line" />
<rect x="768" y="214" width="300" height="136" rx="8" class="output" />
<text x="792" y="248" class="box-title">Gleiche Finance-Logik</text>
<text x="792" y="277" class="box-text">FinanceRuleEngine</text>
<text x="792" y="300" class="box-text">Spartenanalyse</text>
<text x="792" y="323" class="box-text">Waehrungsanalyse bei Zielwaehrung</text>
<line x1="918" y1="350" x2="918" y2="416" class="line" />
<rect x="730" y="424" width="376" height="124" rx="8" class="output" />
<text x="754" y="458" class="box-title">Ausgaben</text>
<text x="754" y="487" class="box-text">Dashboard / Management Analyse</text>
<text x="754" y="510" class="box-text">Soll/Ist-Vergleich</text>
<text x="754" y="533" class="box-text">Zentrale Excel Sales_All_&lt;Datum&gt;.xlsx</text>
<rect x="60" y="486" width="560" height="110" rx="8" class="guard" />
<text x="84" y="520" class="box-title">Pruefregel im Audit-Modus</text>
<text x="84" y="549" class="box-text">Fuer alle relevanten TSC muessen aktuelle Sales_ProcessedMergeInput_*.csv vorhanden sein.</text>
<text x="84" y="574" class="small">Fehlt die CSV, kann die zentrale Auswertung keine belastbare CSV-Sicht bilden.</text>
<line x1="195" y1="282" x2="195" y2="478" class="muted-line" />
<line x1="620" y1="541" x2="722" y2="501" class="muted-line" />
</svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

@@ -1,12 +1,13 @@
# Finance Berechnungsformeln pro Land # 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. - 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`. - In Management-Analysen ist das Wechselkurs-Anwendungsdatum konfigurierbar: `PostingDate`, `InvoiceDate` oder `ExtractionDate`.
- Sparten-Materialabgleich normalisiert fuehrende Nullen und warnt bei >=90% ungeklaerter Abdeckung. - 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. 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`. 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 ```text
Jahr = Year(PostingDate ?? InvoiceDate ?? ExtractionDate) Jahr = Year(PostingDate ?? InvoiceDate ?? ExtractionDate)
@@ -26,7 +32,7 @@ Pro Land berechnet das Programm mehrere Kandidaten:
```text ```text
SalesPriceValue SalesPriceValue
= Sum(CentralSalesRecords.SalesPriceValue) = Sum(SalesPriceValue aus zentraler Auswertungsquelle)
DocTotalFC - VatSumFC DocTotalFC - VatSumFC
= Sum(DocumentTotalForeignCurrency - VatSumForeignCurrency) = Sum(DocumentTotalForeignCurrency - VatSumForeignCurrency)
@@ -1,18 +1,28 @@
# Finance Datenfluss fuer Andreas # 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. 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`. 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`
![Finance Prozessfluss](FINANCE_PROZESS_EXPORT_DASHBOARD_2026-06-11.svg)
![Audit-CSV als zentrale Auswertungsquelle](FINANCE_AUDIT_CSV_QUELLE_2026-06-11.svg)
## Kurzfazit ## Kurzfazit
- Finance Summary, Management Analyse und Spartenanalyse lesen nicht aus dem SharePoint-Excel, sondern direkt aus der App-Datenbank `CentralSalesRecords`. - 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.
- 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. - 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_<TSC>_<yyyy-MM-dd>.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. - 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. - 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. - 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. - 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. - `ManualExcelDataSourceAdapter` fuer Excel/CSV/SharePoint-Dateien.
3. Rohdaten werden als `SalesRecord`-Liste aufgebaut. 3. Rohdaten werden als `SalesRecord`-Liste aufgebaut.
4. Aktive `FieldTransformationRules` fuer das Quellsystem werden angewendet. 4. Aktive `FieldTransformationRules` fuer das Quellsystem werden angewendet.
5. Eine lokale Standort-Excel `Sales_<TSC>_<Datum>.xlsx` wird erzeugt. 5. Falls `Audit-CSV je Standort schreiben` aktiv ist, wird eine verarbeitete CSV geschrieben:
6. `CentralSalesRecords` wird fuer diesen Standort ersetzt: - Datei: `Sales_ProcessedMergeInput_<TSC>_<Datum>.csv`.
- Ordner: gleicher lokaler Ordner wie die Standort-Excel.
- Inhalt: Daten nach Mapping und Transformation.
6. Eine lokale Standort-Excel `Sales_<TSC>_<Datum>.xlsx` wird erzeugt.
7. `CentralSalesRecords` wird fuer diesen Standort ersetzt:
- alte Saetze mit `SiteId = Standort` loeschen. - alte Saetze mit `SiteId = Standort` loeschen.
- neue Saetze einfuegen. - 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 ## Datenquellen pro Quelltyp
@@ -315,7 +345,9 @@ Ausloeser:
Ablauf: 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_<Datum>.xlsx`. 2. `ExcelExportService.CreateConsolidatedExcelFile(...)` erzeugt `Sales_All_<Datum>.xlsx`.
3. Die Datei wird lokal geschrieben. 3. Die Datei wird lokal geschrieben.
4. Falls SharePoint konfiguriert ist, wird sie hochgeladen. 4. Falls SharePoint konfiguriert ist, wird sie hochgeladen.
@@ -342,14 +374,16 @@ Wichtig:
- `Finance Summary` im Excel wird beim Schreiben aus den Records berechnet. - `Finance Summary` im Excel wird beim Schreiben aus den Records berechnet.
- Es liest nicht aus einem vorherigen SharePoint-Excel. - 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. - Wechselkurs-Zielwaehrung aus der UI wird dabei nicht angewendet.
## Finance Summary und Spartenanalyse in der App ## Finance Summary und Spartenanalyse in der App
Die App-Anzeigen lesen direkt aus: Die App-Anzeigen lesen direkt aus der zentralen Auswertungsquelle:
```text ```text
CentralSalesRecords Standard: CentralSalesRecords
Audit-Modus: neueste Sales_ProcessedMergeInput_*.csv je TSC
``` ```
Nicht aus: Nicht aus:
@@ -360,9 +394,9 @@ SharePoint Sales_All_*.xlsx
Das bedeutet: Das bedeutet:
- Lokal zeigt die App lokale DB-Daten. - Lokal zeigt die App lokale DB-Daten oder lokale Audit-CSV, je nach Setting.
- Publizierter Server zeigt Server-DB-Daten. - Publizierter Server zeigt Server-DB-Daten oder Server-Audit-CSV, je nach Setting.
- Wenn lokale und Server-DB gleich sind, sehen beide gleich aus. - Wenn lokale und Server-Auswertungsquelle gleich sind, sehen beide gleich aus.
- Ein SharePoint-Upload veraendert die App-Anzeige nicht. - Ein SharePoint-Upload veraendert die App-Anzeige nicht.
## Spartenanalyse: genaue Logik ## Spartenanalyse: genaue Logik
@@ -433,21 +467,26 @@ SalesRecord-Liste
+-- FieldTransformationRules anwenden +-- FieldTransformationRules anwenden
| -> optional Feldkopien, FirstNonEmpty, ConvertCurrency | -> optional Feldkopien, FirstNonEmpty, ConvertCurrency
| |
+-- optional Audit-CSV Sales_ProcessedMergeInput_<TSC>_<Datum>.csv schreiben
| -> verarbeitete Daten fuer Finance/Revision
|
+-- Standort-Excel Sales_<TSC>_<Datum>.xlsx lokal schreiben +-- Standort-Excel Sales_<TSC>_<Datum>.xlsx lokal schreiben
| |
+-- CentralSalesRecords fuer SiteId ersetzen +-- CentralSalesRecords fuer SiteId ersetzen
| |
+-- Standort-Excel optional nach SharePoint hochladen +-- Standort-Excel und Audit-CSV optional nach SharePoint hochladen
Finance Summary / Spartenanalyse Finance Summary / Spartenanalyse
| |
+-- liest CentralSalesRecords +-- liest zentrale Auswertungsquelle
| -> Standard: CentralSalesRecords
| -> optional: neueste Sales_ProcessedMergeInput_*.csv je TSC
+-- FinanceRuleEngine rechnet Include/Exclude/Net Sales Actual +-- 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 Zentrale Excel
| |
+-- liest CentralSalesRecords +-- liest zentrale Auswertungsquelle
+-- erzeugt Sales_All_<Datum>.xlsx lokal +-- erzeugt Sales_All_<Datum>.xlsx lokal
+-- erzeugt Finance Summary / Finance Details im Excel +-- erzeugt Finance Summary / Finance Details im Excel
+-- laedt Datei optional nach SharePoint +-- laedt Datei optional nach SharePoint
@@ -456,10 +495,10 @@ Zentrale Excel
## Wichtige Klarstellungen fuer Finance ## Wichtige Klarstellungen fuer Finance
1. SharePoint ist Ablage und Quelle fuer manuelle Dateien, aber nicht Live-Quelle der Finance Summary. 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. 3. Sparten kommen fachlich aus TR-AG/SAP `ProductDivisionRefSet`, nicht aus lokalen ERP-Sparten.
4. CH/AT bekommen Spartenfelder direkt beim ZSCHWEIZ-Export. 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. 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. 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. 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.
@@ -1,17 +1,22 @@
# Finance Kurs-Workflow # 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. 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` Visualisierung: `docs/FINANCE_KURS_WORKFLOW_2026-06-09.svg`
Aktuelle Kurs-/Waehrungsgrafik: `docs/FINANCE_WAEHRUNG_KURSFLUSS_2026-06-11.svg`
![Finance Kurs-Workflow](FINANCE_KURS_WORKFLOW_2026-06-09.svg) ![Finance Kurs-Workflow](FINANCE_KURS_WORKFLOW_2026-06-09.svg)
![Finance Waehrungs- und Kursfluss](FINANCE_WAEHRUNG_KURSFLUSS_2026-06-11.svg)
## Kurzfazit ## Kurzfazit
- Der Standortimport rechnet Werte normalerweise nicht ueber die App-Kurstabelle um. - 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. - `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. - `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. - 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. - 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`. | | App-Kurstabelle | Tabelle `CurrencyExchangeRates` mit `FromCurrency`, `ToCurrency`, `Rate`, `ValidFrom`, `ValidTo`, `Notes`, `IsActive`. |
| Anzeige-Waehrung | Zielwaehrung in Analyse-Sichten, aktuell `NATIVE`, `CHF`, `EUR`, `USD`. | | 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. | | Budgetkurs | Kurs mit `Notes = Budget <Jahr>`, z. B. `Budget 2025`, fuer separaten CHF-Kontrollkandidaten. |
| Audit-CSV | Verarbeitete Standort-CSV `Sales_ProcessedMergeInput_<TSC>_<Datum>.csv`; optional zentrale Quelle fuer Dashboard und zentrale Excel. |
## Gesamtfluss ## Gesamtfluss
@@ -45,8 +51,15 @@ Land / Quellsystem
| |
+-- Standort-Excel schreiben +-- Standort-Excel schreiben
| |
+-- optional Audit-CSV schreiben
| Sales_ProcessedMergeInput_<TSC>_<Datum>.csv
|
+-- CentralSalesRecords fuer Standort ersetzen +-- CentralSalesRecords fuer Standort ersetzen
| |
+-- zentrale Auswertungsquelle
| Standard: CentralSalesRecords
| optional: neueste Audit-CSV je TSC
|
+-- zentrale Excel / Finance Summary +-- zentrale Excel / Finance Summary
| Hauswaehrung, keine stille App-Kursumrechnung | Hauswaehrung, keine stille App-Kursumrechnung
| |
@@ -111,6 +124,7 @@ Beim normalen Standortexport gilt:
```text ```text
Daten holen Daten holen
-> Transformationen anwenden -> Transformationen anwenden
-> optional Audit-CSV Sales_ProcessedMergeInput_*.csv schreiben
-> Standort-Excel schreiben -> Standort-Excel schreiben
-> CentralSalesRecords fuer diesen Standort ersetzen -> CentralSalesRecords fuer diesen Standort ersetzen
-> optional SharePoint Upload -> 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. 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 ## 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. 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: Logik:
```text ```text
CentralSalesRecords zentrale Auswertungsquelle
Standard: CentralSalesRecords
optional: Sales_ProcessedMergeInput_*.csv
-> FinanceRuleEngine -> FinanceRuleEngine
-> Finance | Net Sales Actual -> Finance | Net Sales Actual
-> Gruppierung nach Jahr, Land, Finance-Waehrung -> Gruppierung nach Jahr, Land, Finance-Waehrung
@@ -166,7 +184,7 @@ Die Kursanwendung fuer einen zentralen Dashboard-Wert passiert in der Management
Eingaben: 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`. - Summenfeld: z. B. `SalesPriceValue`, `StandardCost`, `StandardCostTotal`, `Quantity`.
- Anzeige-Waehrung: `NATIVE`, `CHF`, `EUR` oder `USD`. - Anzeige-Waehrung: `NATIVE`, `CHF`, `EUR` oder `USD`.
- Zeitraum/Filter: Jahr, Monat, Land, TSC. - Zeitraum/Filter: Jahr, Monat, Land, TSC.
@@ -296,6 +314,8 @@ ORDER BY FromCurrency, ToCurrency, ValidFrom DESC;
| ECB-Import | `Services/ExchangeRateImportService.cs` | | ECB-Import | `Services/ExchangeRateImportService.cs` |
| Settings/Kurspflege | `Services/SettingsPageService.cs`, `Components/Pages/Settings.razor` | | Settings/Kurspflege | `Services/SettingsPageService.cs`, `Components/Pages/Settings.razor` |
| Standortexport-Reihenfolge | `Services/SiteExportService.cs` | | 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 Speicherung | `Services/CentralSalesRecordService.cs` |
| zentrale Analyse mit Zielwaehrung | `Services/ManagementCockpitService.cs` | | zentrale Analyse mit Zielwaehrung | `Services/ManagementCockpitService.cs` |
| Finance Summary ohne stille Umrechnung | `Services/ManagementCockpitService.cs`, `Services/ExcelExportService.cs` | | Finance Summary ohne stille Umrechnung | `Services/ManagementCockpitService.cs`, `Services/ExcelExportService.cs` |
@@ -0,0 +1,106 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="760" viewBox="0 0 1280 760" role="img" aria-labelledby="title desc">
<title id="title">Finance Prozessfluss vom Export bis Dashboard</title>
<desc id="desc">Uebersicht: Standortdaten werden gelesen, gemappt, transformiert, optional als Audit-CSV geschrieben und danach fuer Dashboard, Soll/Ist und zentrale Excel verwendet.</desc>
<defs>
<marker id="arrow" viewBox="0 0 10 10" refX="8.5" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse">
<path d="M 0 0 L 10 5 L 0 10 z" fill="#334155" />
</marker>
<style>
.title { font: 700 30px Arial, sans-serif; fill: #0f172a; }
.subtitle { font: 400 16px Arial, sans-serif; fill: #475569; }
.lane-title { font: 700 15px Arial, sans-serif; fill: #334155; }
.box-title { font: 700 16px Arial, sans-serif; fill: #0f172a; }
.box-text { font: 400 13px Arial, sans-serif; fill: #334155; }
.small { font: 400 12px Arial, sans-serif; fill: #475569; }
.note { font: 700 13px Arial, sans-serif; fill: #7c2d12; }
.line { stroke: #334155; stroke-width: 2.2; fill: none; marker-end: url(#arrow); }
.thin { stroke: #94a3b8; stroke-width: 1.4; fill: none; marker-end: url(#arrow); }
.source { fill: #e0f2fe; stroke: #0284c7; }
.process { fill: #f1f5f9; stroke: #64748b; }
.audit { fill: #ecfdf5; stroke: #059669; }
.db { fill: #eef2ff; stroke: #4f46e5; }
.out { fill: #fff7ed; stroke: #ea580c; }
.sp { fill: #f8fafc; stroke: #94a3b8; stroke-dasharray: 7 5; }
</style>
</defs>
<rect x="0" y="0" width="1280" height="760" fill="#ffffff" />
<text x="48" y="54" class="title">Finance Prozessfluss: Export Dashboard bis zentrale Auswertung</text>
<text x="48" y="82" class="subtitle">Stand 2026-06-11: Audit-CSV ist das verarbeitete Merge-Eingangsfile und kann optional die zentrale Quelle sein.</text>
<text x="50" y="142" class="lane-title">1. Quelle lesen</text>
<rect x="48" y="158" width="190" height="118" rx="8" class="source" />
<text x="68" y="188" class="box-title">Quellsystem</text>
<text x="68" y="214" class="box-text">HANA / SAP B1</text>
<text x="68" y="235" class="box-text">SAP Gateway / OData</text>
<text x="68" y="256" class="box-text">Excel / CSV / SharePoint</text>
<line x1="238" y1="217" x2="294" y2="217" class="line" />
<text x="300" y="142" class="lane-title">2. Vereinheitlichen</text>
<rect x="300" y="158" width="210" height="118" rx="8" class="process" />
<text x="322" y="188" class="box-title">Mapping</text>
<text x="322" y="214" class="box-text">Spalten und ERP-Felder</text>
<text x="322" y="235" class="box-text">werden SalesRecord</text>
<text x="322" y="256" class="box-text">zugeordnet.</text>
<line x1="510" y1="217" x2="566" y2="217" class="line" />
<rect x="572" y="158" width="210" height="118" rx="8" class="process" />
<text x="594" y="188" class="box-title">Transformation</text>
<text x="594" y="214" class="box-text">Finance-Regeln noch nicht</text>
<text x="594" y="235" class="box-text">final summiert; Felder</text>
<text x="594" y="256" class="box-text">werden vorbereitet.</text>
<line x1="677" y1="276" x2="677" y2="332" class="line" />
<text x="300" y="337" class="lane-title">3. Nachvollziehbare Standortartefakte</text>
<rect x="300" y="354" width="230" height="128" rx="8" class="audit" />
<text x="322" y="384" class="box-title">Audit-CSV</text>
<text x="322" y="410" class="box-text">Sales_ProcessedMergeInput</text>
<text x="322" y="431" class="box-text">_&lt;TSC&gt;_&lt;Datum&gt;.csv</text>
<text x="322" y="456" class="small">Nach Mapping + Transformation</text>
<line x1="530" y1="418" x2="586" y2="418" class="line" />
<rect x="592" y="354" width="210" height="128" rx="8" class="out" />
<text x="614" y="384" class="box-title">Standort-Excel</text>
<text x="614" y="410" class="box-text">Sales_&lt;TSC&gt;_&lt;Datum&gt;.xlsx</text>
<text x="614" y="435" class="small">Ablage und manuelle Pruefung</text>
<line x1="782" y1="217" x2="850" y2="217" class="line" />
<line x1="415" y1="482" x2="415" y2="548" class="thin" />
<line x1="697" y1="482" x2="697" y2="548" class="thin" />
<text x="856" y="142" class="lane-title">4. Operative Datenbasis</text>
<rect x="856" y="158" width="220" height="118" rx="8" class="db" />
<text x="878" y="188" class="box-title">CentralSalesRecords</text>
<text x="878" y="214" class="box-text">Standort wird ersetzt</text>
<text x="878" y="235" class="box-text">und zentral gespeichert.</text>
<text x="878" y="256" class="small">Standard-Auswertungsquelle</text>
<line x1="966" y1="276" x2="966" y2="332" class="line" />
<rect x="856" y="354" width="220" height="128" rx="8" class="db" />
<text x="878" y="384" class="box-title">Zentrale Quelle</text>
<text x="878" y="410" class="box-text">Schalter in Settings:</text>
<text x="878" y="431" class="box-text">DB oder Audit-CSV</text>
<text x="878" y="456" class="small">je TSC neueste CSV</text>
<line x1="1076" y1="418" x2="1132" y2="418" class="line" />
<text x="1138" y="337" class="lane-title">5. Finance-Ergebnis</text>
<rect x="1138" y="354" width="96" height="128" rx="8" class="out" />
<text x="1154" y="384" class="box-title">Output</text>
<text x="1154" y="410" class="box-text">Dashboard</text>
<text x="1154" y="431" class="box-text">Soll/Ist</text>
<text x="1154" y="452" class="box-text">Sales_All</text>
<rect x="326" y="548" width="504" height="110" rx="8" class="sp" />
<text x="350" y="580" class="box-title">SharePoint-Ablage</text>
<text x="350" y="606" class="box-text">Standort-Excel und Audit-CSV werden in denselben Landesordner hochgeladen.</text>
<text x="350" y="630" class="note">SharePoint-Dateien sind Ablage/Pruefspur, nicht automatisch die Live-Quelle.</text>
<line x1="802" y1="418" x2="850" y2="418" class="thin" />
<line x1="830" y1="603" x2="966" y2="482" class="thin" />
</svg>

After

Width:  |  Height:  |  Size: 5.9 KiB

@@ -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:
![Finance Prozessfluss](FINANCE_PROZESS_EXPORT_DASHBOARD_2026-06-11.svg)
![Audit-CSV als zentrale Auswertungsquelle](FINANCE_AUDIT_CSV_QUELLE_2026-06-11.svg)
![Waehrungs- und Kursfluss](FINANCE_WAEHRUNG_KURSFLUSS_2026-06-11.svg)
## 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_<TSC>_<yyyy-MM-dd>.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_<TSC>_<Datum>.csv
|
+-- Standort-Excel schreiben
| Sales_<TSC>_<Datum>.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_<Datum>.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_<TSC>_<yyyy-MM-dd>.xlsx` | Standort-Excel fuer Menschen und Ablage. |
| `Sales_ProcessedMergeInput_<TSC>_<yyyy-MM-dd>.csv` | Verarbeitetes Standortfile nach Mapping und Transformation; Eingang fuer Merge/zentrale Auswertung, auditierbar. |
| `Sales_All_<yyyy-MM-dd>.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 <Jahr>` | nutzt Kurse mit `Notes = Budget <Jahr>` 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_<TSC>_<Datum>.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_<TSC>_<Datum>.xlsx`
- `Sales_ProcessedMergeInput_<TSC>_<Datum>.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_<TSC>_<Datum>.csv`.
- Die Wechselkurstabelle wird nicht still fuer Standard-Finance-Soll/Ist angewendet.
- Die aktuellen Management-Reiter sind links erreichbar; doppelte obere Reiterbaender wurden reduziert.
@@ -0,0 +1,85 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1180" height="720" viewBox="0 0 1180 720" role="img" aria-labelledby="title desc">
<title id="title">Finance Waehrungs- und Kursfluss</title>
<desc id="desc">Zeigt, wo die App-Kurstabelle verwendet wird und wo keine stille Umrechnung stattfindet.</desc>
<defs>
<marker id="arrow" viewBox="0 0 10 10" refX="8.5" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse">
<path d="M 0 0 L 10 5 L 0 10 z" fill="#334155" />
</marker>
<style>
.title { font: 700 29px Arial, sans-serif; fill: #0f172a; }
.subtitle { font: 400 16px Arial, sans-serif; fill: #475569; }
.box-title { font: 700 16px Arial, sans-serif; fill: #0f172a; }
.box-text { font: 400 13px Arial, sans-serif; fill: #334155; }
.small { font: 400 12px Arial, sans-serif; fill: #64748b; }
.warn { font: 700 13px Arial, sans-serif; fill: #991b1b; }
.line { stroke: #334155; stroke-width: 2.2; fill: none; marker-end: url(#arrow); }
.muted-line { stroke: #94a3b8; stroke-width: 1.5; fill: none; marker-end: url(#arrow); }
.source { fill: #e0f2fe; stroke: #0284c7; }
.standard { fill: #f1f5f9; stroke: #64748b; }
.rate { fill: #fef3c7; stroke: #d97706; }
.convert { fill: #ecfdf5; stroke: #059669; }
.budget { fill: #eef2ff; stroke: #4f46e5; }
.stop { fill: #fef2f2; stroke: #dc2626; }
</style>
</defs>
<rect x="0" y="0" width="1180" height="720" fill="#ffffff" />
<text x="48" y="54" class="title">Waehrungsumrechnung: wann wirkt die Kurstabelle?</text>
<text x="48" y="82" class="subtitle">Standard-Soll/Ist bleibt in Hauswaehrung. Die App-Kurstabelle wirkt nur in expliziten Pfaden.</text>
<rect x="56" y="128" width="260" height="140" rx="8" class="source" />
<text x="80" y="162" class="box-title">Quelle liefert Werte</text>
<text x="80" y="191" class="box-text">SalesPriceValue</text>
<text x="80" y="214" class="box-text">SalesCurrency / CompanyCurrency</text>
<text x="80" y="237" class="box-text">DocumentRate als Quellinfo</text>
<line x1="316" y1="198" x2="392" y2="198" class="line" />
<rect x="400" y="128" width="280" height="140" rx="8" class="standard" />
<text x="424" y="162" class="box-title">Standard Finance</text>
<text x="424" y="191" class="box-text">Finance Summary / Sales_All</text>
<text x="424" y="214" class="box-text">nutzt Hauswaehrung je Land.</text>
<text x="424" y="242" class="warn">Keine stille App-Kursumrechnung</text>
<line x1="540" y1="268" x2="540" y2="344" class="muted-line" />
<rect x="400" y="352" width="280" height="132" rx="8" class="stop" />
<text x="424" y="386" class="box-title">Nicht verwechseln</text>
<text x="424" y="415" class="box-text">DocumentRate kommt aus ERP.</text>
<text x="424" y="438" class="box-text">CurrencyExchangeRates ist</text>
<text x="424" y="461" class="box-text">die App-Kurstabelle.</text>
<rect x="772" y="92" width="308" height="160" rx="8" class="rate" />
<text x="796" y="126" class="box-title">CurrencyExchangeRates</text>
<text x="796" y="155" class="box-text">1. gleiche Waehrung = Faktor 1</text>
<text x="796" y="178" class="box-text">2. direkter Kurs</text>
<text x="796" y="201" class="box-text">3. inverser Kurs</text>
<text x="796" y="224" class="box-text">4. Kreuzkurs ueber EUR</text>
<line x1="926" y1="252" x2="926" y2="316" class="line" />
<rect x="760" y="324" width="332" height="120" rx="8" class="convert" />
<text x="784" y="358" class="box-title">Pfad A: Management Analyse</text>
<text x="784" y="387" class="box-text">Zielwaehrung CHF / EUR / USD</text>
<text x="784" y="410" class="box-text">Anzeige-Wert = Quellwert * Kurs</text>
<line x1="926" y1="444" x2="926" y2="494" class="line" />
<rect x="760" y="502" width="332" height="118" rx="8" class="convert" />
<text x="784" y="536" class="box-title">Pfad B: ConvertCurrency</text>
<text x="784" y="565" class="box-text">Transformation beim Standortexport</text>
<text x="784" y="588" class="box-text">schreibt Zielfeld dauerhaft um.</text>
<rect x="56" y="438" width="260" height="132" rx="8" class="budget" />
<text x="80" y="472" class="box-title">Pfad C: Budget-CHF</text>
<text x="80" y="501" class="box-text">separater Soll/Ist-Kandidat</text>
<text x="80" y="524" class="box-text">Notes = Budget &lt;Jahr&gt;</text>
<text x="80" y="547" class="small">Kontrollsicht, nicht Standard-Ist</text>
<line x1="316" y1="504" x2="392" y2="438" class="muted-line" />
<line x1="680" y1="198" x2="764" y2="172" class="muted-line" />
<line x1="680" y1="418" x2="752" y2="384" class="muted-line" />
<rect x="56" y="612" width="1036" height="62" rx="8" fill="#f8fafc" stroke="#cbd5e1" />
<text x="80" y="649" class="box-title">Kursdatum: Settings &gt; Export Einstellungen &gt; Wechselkurse anwenden auf = PostingDate, InvoiceDate oder ExtractionDate</text>
</svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

@@ -1,6 +1,6 @@
# Manual-Import und Delta-Stand # 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. 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 | | Auswahl | Jahresdatei zuerst, danach alle spaeteren Delta-Dateien im gleichen Jahr |
| Import | App liest alle ausgewaehlten Dateien in einem Lauf zusammen | | Import | App liest alle ausgewaehlten Dateien in einem Lauf zusammen |
| Persistenz | `CentralSalesRecords` fuer `TRUK` werden ersetzt, nicht blind additiv angehaengt | | Persistenz | `CentralSalesRecords` fuer `TRUK` werden ersetzt, nicht blind additiv angehaengt |
| Audit-CSV | optional `Sales_ProcessedMergeInput_TRUK_<Datum>.csv` nach Mapping/Transformation |
| Nach Delta-Lieferung | Delta-Datei in den Ordner legen, `TRUK` exportieren, danach zentrale Excel neu erzeugen | | Nach Delta-Lieferung | Delta-Datei in den Ordner legen, `TRUK` exportieren, danach zentrale Excel neu erzeugen |
Wichtig: Wichtig:
@@ -51,6 +52,7 @@ Aktueller Implementierungsstand:
- primaer ueber `SourceLineId`. - primaer ueber `SourceLineId`.
- Fallback ueber `TSC + InvoiceNumber + PositionOnInvoice + Material`. - 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. - 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_<TSC>_<Datum>.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. - 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: Finance-Logik:
@@ -92,11 +94,18 @@ Offen:
1. Neue Datei oder Delta-Datei im richtigen Ordner bereitstellen. 1. Neue Datei oder Delta-Datei im richtigen Ordner bereitstellen.
2. In `Manuelle Importe` Pfad pruefen bzw. Standort aktiv lassen. 2. In `Manuelle Importe` Pfad pruefen bzw. Standort aktiv lassen.
3. Standortexport fuer das betroffene Land ausfuehren. 3. Standortexport fuer das betroffene Land ausfuehren.
4. Danach `Zentrale Datei neu erzeugen` starten. 4. Falls Audit-CSV fuer Finance/Revision gebraucht wird, im Exportordner `Sales_ProcessedMergeInput_<TSC>_<Datum>.csv` pruefen.
5. Im zentralen Excel `Finance Summary` und `Finance Details` 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 ## 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.
@@ -1,6 +1,6 @@
# Markdown-Dokumentenstatus # 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. 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 | | `docs/FINANCE_ENTSCHEIDE.md` | Finance-Regeln und Kontrollpunkte | Aktuell fuehrend fuer Finance-Logik |
| `entscheide.md` | Kurzfassung der Finance-Fachentscheide | Aktuell als Kurzfassung | | `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_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/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/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 | | `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 | | Datei | Rolle | Status |
| --- | --- | --- | | --- | --- | --- |
| `docs/FINANCE_BERECHNUNGSFORMELN_LAENDER_2026-05-19.md` | Detailregeln je Land | Behalten | | `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_IT_VORGEHEN_2026-05-18.md` | Italien-Pruefpfad | Behalten |
| `docs/FINANCE_UK_QUELLE_KORREKTUR_2026-05-18.md` | UK-Quellkorrektur | 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/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/hr_kpi_cockpit_preview.png` | neutrale HR-Cockpit-Vorschaugrafik fuer DOCX |
| `docs/finance_cockpit_preview.png` | neutrale Finance-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
Bereinigung 2026-06-09: 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 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. - 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-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: Weiterhin gilt:
+26 -2
View File
@@ -1,6 +1,19 @@
# Programm-Diagramme # 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 ## 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 - beschreibt Quelle, Mapping, Hauswaehrung, Nettofakturawert, Buchungsdatum, IC-Ausweis und Sollvergleich
- macht sichtbar, dass der Algorithmus regelbasiert ist und nicht auf einzelne Testzahlen frisiert wurde - 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 ## Abgleich gegen Quellcode
Die Diagramme wurden gegen folgende Codebereiche abgeglichen: 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/DataSources/*`: HANA, SAP Gateway und Manual Excel/CSV Adapter
- `Services/SiteExportService.cs`: Standortexport, Transformation, Excel-Erzeugung, zentrale Speicherung, SharePoint-Upload - `Services/SiteExportService.cs`: Standortexport, Transformation, Excel-Erzeugung, zentrale Speicherung, SharePoint-Upload
- `Services/ExportOrchestrationService.cs`: Export aller aktiven Standorte und anschliessender konsolidierter Export - `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/MappedSalesRecordComposer.cs`: gemeinsame Mapping-Engine fuer SAP OData und generisches HANA-Mapping
- `Services/FinanceReconciliationService.cs`: Soll/Ist-Kandidaten, Budgetkurse, IC-Regeln und Ampelstatus - `Services/FinanceReconciliationService.cs`: Soll/Ist-Kandidaten, Budgetkurse, IC-Regeln und Ampelstatus
- `Services/DatabaseSeedService.cs`: Seed fuer Quellsysteme, ZSCHWEIZ, Finance-Referenzen, Budgetkurse und IC-Regeln - `Services/DatabaseSeedService.cs`: Seed fuer Quellsysteme, ZSCHWEIZ, Finance-Referenzen, Budgetkurse und IC-Regeln
+5 -2
View File
@@ -1,6 +1,6 @@
# RAG Router # RAG Router
Stand: 2026-06-10 Stand: 2026-06-11
Zweck: Diese Datei zuerst laden. Danach nur die Dateien aus dem passenden Themenblock laden. 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` | | Aktueller Stand | Projektstatus, letzte Aenderungen, offene Punkte | `docs/rag/PROJECT.md` |
| Finance Cockpit | Soll/Ist, Finance Summary, Regeln, Laenderlogik | `docs/rag/FINANCE.md` | | Finance Cockpit | Soll/Ist, Finance Summary, Regeln, Laenderlogik | `docs/rag/FINANCE.md` |
| Finance Spezialfaelle | IT, UK, ES, Abweichungen | `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` | | HR KPI | HR Dashboard, Formeln, Datenqualitaet, Anwenderstand | `docs/rag/HR_KPI.md` |
| Deployment/IIS | Publish, Server, BiDashboard, TLS, lokaler Uebergang | `docs/rag/DEPLOYMENT.md` | | Deployment/IIS | Publish, Server, BiDashboard, TLS, lokaler Uebergang | `docs/rag/DEPLOYMENT.md` |
| Admin/Startseite | Admin Login, Sessions, Landing Page | `docs/rag/ADMIN.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/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/MD_DOKUMENTENSTATUS_2026-05-20.md` | Einordnung alter Dokumente |
| `docs/FINANCE_ENTSCHEIDE.md` | Finance-Entscheide im Detail | | `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_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/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/MANUAL_IMPORT_DELTA_STAND_2026-05-21.md` | Manual-Import-Details |
| `docs/HR_KPI_NACHDOKU_2026-05-13.md` | HR-KPI-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 | | Suchwort | Thema |
| --- | --- | | --- | --- |
| `Finance Summary`, `Soll/Ist`, `check.xlsx`, `FinanceRuleEngine` | Finance Cockpit | | `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` | | `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 | | `TRUK`, `UK_B1`, `Delta`, `Manual Excel` | Manual Import / Finance Spezialfaelle |
| `TRDE`, `Alphaplan`, `NettoPreisGesamtX` | Finance Cockpit / Manual Import | | `TRDE`, `Alphaplan`, `NettoPreisGesamtX` | Finance Cockpit / Manual Import |
+15 -3
View File
@@ -1,11 +1,13 @@
# RAG Finance # RAG Finance
Stand: 2026-06-10 Stand: 2026-06-11
## Kurzstand ## Kurzstand
- Fuehrende Sicht: `Finance Summary`. - 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_<TSC>_<yyyy-MM-dd>.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. - `Finance Summary` nutzt dieselbe `FinanceRuleEngine` wie das zentrale Excel.
- `Management Analyse` bleibt Diagnose-/Plausibilitaetssicht, nicht fuehrende Finance-Zahl. - `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. - 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. - Gutschriften/Storno laufen als negative Beleg-/Positionszeilen.
- Budget-CHF ist Kontroll-/Reporting-Kandidat, nicht Standardabgleich. - 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. - `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 ## Offene Fachpunkte
@@ -53,7 +56,15 @@ Stand: 2026-06-10
- `Datenqualitaet`: fehlende Materialnummern, ProductGroup, Waehrung, Kunde, Datum, Nullwerte und ausgeschlossene Zeilen. - `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 > 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. - `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 ## Experten / 3D Datenanalyse
@@ -98,6 +109,7 @@ Stand: 2026-06-10
## Rohquellen Nur Bei Bedarf ## Rohquellen Nur Bei Bedarf
- Entscheide: `docs/FINANCE_ENTSCHEIDE.md`, `entscheide.md` - 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` - Formeln je Land: `docs/FINANCE_BERECHNUNGSFORMELN_LAENDER_2026-05-19.md`
- Isolierter Kurs-Workflow: `docs/FINANCE_KURS_WORKFLOW_2026-06-09.md` - Isolierter Kurs-Workflow: `docs/FINANCE_KURS_WORKFLOW_2026-06-09.md`
- IT Detail: `docs/FINANCE_IT_VORGEHEN_2026-05-18.md` - IT Detail: `docs/FINANCE_IT_VORGEHEN_2026-05-18.md`
@@ -1,6 +1,6 @@
# RAG Manual Import # RAG Manual Import
Stand: 2026-06-05 Stand: 2026-06-11
## Kurzstand ## 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`. - 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. - Spanien-Deltas werden vor dem Speichern dedupliziert: zuerst `SourceLineId`, sonst Invoice/Position/Material.
- DE muss weiterhin Vollfiles liefern. - DE muss weiterhin Vollfiles liefern.
- Wenn Audit-CSV aktiv ist, schreibt der Standortexport nach Mapping/Transformation zusaetzlich `Sales_ProcessedMergeInput_<TSC>_<Datum>.csv` in den Standort-Exportordner.
- Zentrale Auswertungen koennen per Setting aus den neuesten Audit-CSV je TSC statt direkt aus `CentralSalesRecords` lesen.
## Laender ## Laender
@@ -24,8 +26,10 @@ Stand: 2026-06-05
1. Datei oder Delta im richtigen Ordner bereitstellen. 1. Datei oder Delta im richtigen Ordner bereitstellen.
2. In `Manuelle Importe` Pfad/Standort pruefen. 2. In `Manuelle Importe` Pfad/Standort pruefen.
3. Standortexport ausfuehren. 3. Standortexport ausfuehren.
4. Zentrale Datei neu erzeugen. 4. Optional Audit-CSV im Standort-Exportordner pruefen.
5. `Finance Summary` und `Finance Details` 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 ## Spanien Delta-Sync
+3 -2
View File
@@ -1,11 +1,12 @@
# RAG Project # RAG Project
Stand: 2026-06-10 Stand: 2026-06-11
## Kurzstand ## Kurzstand
- Fuehrende App: `TrafagSalesExporter`, publiziert als `BiDashboard`. - 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_<TSC>_<Datum>.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. - 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. - 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$\`. - Letzter dokumentierter Deploy: 2026-06-10 auf `\\trch-webapp-bidashboard.trafagch.local\BiDashboard$\`.
+3 -1
View File
@@ -1,6 +1,6 @@
# Last Change # Last Change
Stand: 2026-06-10 Stand: 2026-06-11
Diese Datei ist fuer tokenarme RAG-Nutzung komprimiert. 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`. - Fuehrender Kurzkontext: `docs/rag/PROJECT.md`.
- Themenrouter: `docs/RAG_ROUTER.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. - 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. - 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. - Letzte dokumentierte Validierung: `dotnet test TrafagSalesExporter.sln --verbosity minimal` mit `87/87` Tests gruen.