Add in-app training documentation
This commit is contained in:
@@ -19,6 +19,9 @@
|
||||
@T("Soll/Ist Vergleich", "Actual/reference comparison")
|
||||
</MudNavLink>
|
||||
}
|
||||
<MudNavLink Href="/finance-cockpit/schulung" Match="NavLinkMatch.Prefix" Icon="@Icons.Material.Filled.School">
|
||||
@T("Finance Schulung", "Finance training")
|
||||
</MudNavLink>
|
||||
<MudNavLink Href="/manual-imports" Match="NavLinkMatch.Prefix" Icon="@Icons.Material.Filled.UploadFile">
|
||||
@T("Manuelle Importe", "Manual imports")
|
||||
</MudNavLink>
|
||||
@@ -51,9 +54,14 @@
|
||||
</MudButton>
|
||||
}
|
||||
</MudNavGroup>
|
||||
<MudNavLink Href="/hr-kpi" Match="NavLinkMatch.Prefix" Icon="@Icons.Material.Filled.Groups">
|
||||
@T("HR KPI (Login)", "HR KPI (login)")
|
||||
</MudNavLink>
|
||||
<MudNavGroup Title="@T("HR KPI (Login)", "HR KPI (login)")" Icon="@Icons.Material.Filled.Groups">
|
||||
<MudNavLink Href="/hr-kpi" Match="NavLinkMatch.All" Icon="@Icons.Material.Filled.Dashboard">
|
||||
@T("HR Dashboard", "HR dashboard")
|
||||
</MudNavLink>
|
||||
<MudNavLink Href="/hr-kpi/schulung" Match="NavLinkMatch.Prefix" Icon="@Icons.Material.Filled.School">
|
||||
@T("HR KPI Schulung", "HR KPI training")
|
||||
</MudNavLink>
|
||||
</MudNavGroup>
|
||||
</MudNavMenu>
|
||||
|
||||
@code {
|
||||
|
||||
@@ -0,0 +1,218 @@
|
||||
@page "/finance-cockpit/schulung"
|
||||
@inject TrafagSalesExporter.Services.IUiTextService UiText
|
||||
|
||||
<PageTitle>@T("Finance Schulung", "Finance training")</PageTitle>
|
||||
|
||||
<MudText Typo="Typo.h4" Class="mb-2">@T("Finance Schulung", "Finance training")</MudText>
|
||||
<MudText Typo="Typo.body1" Class="mb-4 training-lead">
|
||||
Ausführliche Anwenderunterlage für Finance-Keyuser, CFO/Finance-Leitung und Administratoren. Die Schulung beschreibt den
|
||||
produktiven Ablauf vom manuellen Import bis zur zentralen Excel-Datei, inklusive Finance Summary, Finance Details und Soll/Ist Vergleich.
|
||||
</MudText>
|
||||
|
||||
<MudPaper Class="pa-4 mb-4" Elevation="1">
|
||||
<MudGrid>
|
||||
<MudItem xs="12" md="7">
|
||||
<img class="training-hero-image" src="training/finance_cockpit_preview.png" alt="Finance Cockpit Vorschau" />
|
||||
</MudItem>
|
||||
<MudItem xs="12" md="5">
|
||||
<MudAlert Severity="Severity.Info" Variant="Variant.Outlined" Class="mb-3">
|
||||
Verbindlich ist die Finance-Sicht: Finance Summary, Finance Details und Soll/Ist Vergleich müssen zusammen plausibel sein.
|
||||
</MudAlert>
|
||||
<MudSimpleTable Dense Hover>
|
||||
<thead>
|
||||
<tr><th>Rolle</th><th>Aufgabe</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>Finance Keyuser</td><td>Importe bereitstellen, Standorte exportieren, Summen prüfen</td></tr>
|
||||
<tr><td>CFO/Finance Leitung</td><td>Soll/Ist-Abgleich freigeben und Abweichungen entscheiden</td></tr>
|
||||
<tr><td>Admin</td><td>Standorte, Mapping, Regeln, Settings und SharePoint konfigurieren</td></tr>
|
||||
</tbody>
|
||||
</MudSimpleTable>
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
</MudPaper>
|
||||
|
||||
<MudTabs Rounded Border>
|
||||
<MudTabPanel Text="Prozess">
|
||||
<TrainingSection Title="1. Ziel der Finance-Sicht">
|
||||
<p>Das Finance Cockpit bereitet Sales- und Finance-Daten so auf, dass Länder, Systeme und unterschiedliche Spaltenlogiken in
|
||||
einer zentralen Sicht vergleichbar werden. Die Rohdaten bleiben nachvollziehbar, die Finance-Spalten liefern die verbindliche
|
||||
Abgrenzung für Summen und Soll/Ist-Vergleich.</p>
|
||||
<ul>
|
||||
<li><strong>Finance Summary</strong> zeigt die aggregierten Summen nach Jahr, Land und Währung.</li>
|
||||
<li><strong>Finance Details</strong> zeigt die Detailzeilen, die zu diesen Summen führen.</li>
|
||||
<li><strong>Sales</strong> enthält die breitere Rohdatensicht inklusive Finance-Spaltenblock.</li>
|
||||
<li><strong>Soll/Ist Vergleich</strong> prüft die App-Daten gegen die gepflegten Referenzwerte.</li>
|
||||
</ul>
|
||||
</TrainingSection>
|
||||
|
||||
<TrainingSection Title="2. Bedienreihenfolge im Tagesgeschäft">
|
||||
<div class="training-flow">
|
||||
<div><span>1</span><strong>Dateien bereitstellen</strong><small>SharePoint, lokaler Pfad oder Quellsystem</small></div>
|
||||
<div><span>2</span><strong>Standort exportieren</strong><small>CentralSalesRecords je Standort ersetzen</small></div>
|
||||
<div><span>3</span><strong>Zentrale Excel erzeugen</strong><small>Sales, Summary und Details neu schreiben</small></div>
|
||||
<div><span>4</span><strong>Summen prüfen</strong><small>Summary gegen Details aggregieren</small></div>
|
||||
<div><span>5</span><strong>Soll/Ist freigeben</strong><small>Abweichungen dokumentieren</small></div>
|
||||
</div>
|
||||
<p>Nach jeder neuen Datei muss zuerst der betroffene Standort exportiert werden. Erst danach ist die zentrale Excel-Datei aktuell.</p>
|
||||
</TrainingSection>
|
||||
|
||||
<TrainingSection Title="3. Prozessgrafik und Systembild">
|
||||
<MudGrid>
|
||||
<MudItem xs="12" md="6">
|
||||
<img class="training-doc-image" src="training/keyuser-prozess.svg" alt="Keyuser Prozess" />
|
||||
</MudItem>
|
||||
<MudItem xs="12" md="6">
|
||||
<img class="training-doc-image" src="training/systemarchitektur.svg" alt="Systemarchitektur" />
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
</TrainingSection>
|
||||
</MudTabPanel>
|
||||
|
||||
<MudTabPanel Text="Importe">
|
||||
<TrainingSection Title="4. Manuelle Importe und Delta-Regeln">
|
||||
<p>Manuelle Importe ersetzen beim Standortexport den aktuellen Datenstand dieses Standorts in <code>CentralSalesRecords</code>.
|
||||
Deshalb darf eine Delta-Datei nur dann verwendet werden, wenn die App sie zusammen mit einer Basisdatei liest.</p>
|
||||
<MudSimpleTable Dense Hover>
|
||||
<thead><tr><th>Land</th><th>Quelle</th><th>Lieferlogik</th><th>Konsequenz</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>UK / England</td><td>Sage Excel/CSV im Ordner UK_B1</td><td>Jahresdatei plus Deltas</td><td>Delta-fähig, weil Basis und Deltas zusammen gelesen werden</td></tr>
|
||||
<tr><td>Spanien</td><td>Sage CSV / Manual Excel</td><td>Vollfile erforderlich</td><td>Keine Delta-Dateien verwenden</td></tr>
|
||||
<tr><td>Deutschland</td><td>Alphaplan Excel</td><td>Vollfile/Jahresfile erforderlich</td><td>Keine Delta-Dateien verwenden</td></tr>
|
||||
<tr><td>CH/AT</td><td>SAP OData</td><td>Quellsystem wird neu gelesen</td><td>Kein manueller Delta-Prozess</td></tr>
|
||||
<tr><td>FR/IT/US/IN</td><td>HANA/SAP B1/Sage</td><td>direkte Quelle</td><td>Standortdaten werden aus Quelle aufgebaut</td></tr>
|
||||
</tbody>
|
||||
</MudSimpleTable>
|
||||
<MudAlert Severity="Severity.Warning" Variant="Variant.Outlined" Class="mt-3">
|
||||
Spanien und Deutschland müssen vollständige Dateien liefern. Eine einzelne Delta-Datei würde technisch den bisherigen Stand ersetzen und damit unvollständig werden.
|
||||
</MudAlert>
|
||||
</TrainingSection>
|
||||
|
||||
<TrainingSection Title="5. Standortexport verstehen">
|
||||
<p>Der Standortexport ist der Schritt, der Rohdaten aus der jeweiligen Quelle in die zentrale Datenbank schreibt. Er liest nicht nur
|
||||
eine Datei, sondern wendet auch Mapping, Transformationen und Finance-Regeln an.</p>
|
||||
<ul>
|
||||
<li>Bei SAP/HANA wird die definierte Quelle abgefragt.</li>
|
||||
<li>Bei manuellen Excel-/CSV-Importen wird die hinterlegte Datei oder der hinterlegte Ordner verwendet.</li>
|
||||
<li>Bestehende Zeilen des Standorts werden ersetzt, damit keine veralteten Dubletten stehen bleiben.</li>
|
||||
<li>Fehler stehen in den Logs und müssen vor der zentralen Excel-Erzeugung geklärt werden.</li>
|
||||
</ul>
|
||||
</TrainingSection>
|
||||
|
||||
<TrainingSection Title="6. Zentrale Excel-Datei">
|
||||
<MudSimpleTable Dense Hover>
|
||||
<thead><tr><th>Blatt</th><th>Zweck</th><th>Prüfung</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>Sales</td><td>Rohdaten plus normalisierte Spalten</td><td>Land, TSC, Beleg, Kunde, Wert, Währung</td></tr>
|
||||
<tr><td>Finance Summary</td><td>verbindliche Aggregation</td><td>Jahr, Land, Währung, Net Sales Actual</td></tr>
|
||||
<tr><td>Finance Details</td><td>Detailzeilen zur Summary</td><td>Summe je Land muss Summary ergeben</td></tr>
|
||||
<tr><td>Finance Filter Hilfe</td><td>Hinweise zur Excel-Prüfung</td><td>Filter und Pivot-Anleitung</td></tr>
|
||||
</tbody>
|
||||
</MudSimpleTable>
|
||||
</TrainingSection>
|
||||
</MudTabPanel>
|
||||
|
||||
<MudTabPanel Text="Abgleich">
|
||||
<TrainingSection Title="7. Finance Summary lesen">
|
||||
<p>Finance Summary ist die kompakte Sicht für Finance. Sie enthält nur Zeilen, die nach Finance-Regel eingeschlossen sind.
|
||||
Entscheidend sind Finance-Jahr, Country Key, Währung und Net Sales Actual.</p>
|
||||
<ul>
|
||||
<li>Immer zuerst nach Jahr 2025 filtern, wenn der 2025-Abgleich geprüft wird.</li>
|
||||
<li>Country Key ist die Finance-Länderlogik, nicht zwingend nur der sichtbare Rohdaten-Ländername.</li>
|
||||
<li>Währung muss zum Referenzwert passen, zum Beispiel GBP für UK oder INR für Indien.</li>
|
||||
<li>Included Rows zeigt, wie viele Detailzeilen in die Summe geflossen sind.</li>
|
||||
</ul>
|
||||
</TrainingSection>
|
||||
|
||||
<TrainingSection Title="8. Finance Details gegen Summary prüfen">
|
||||
<p>Finance Details ist das Kontrollblatt für Rückfragen. Die Summe über <code>Net Sales Actual</code> in Finance Details muss
|
||||
je Jahr, Land und Währung exakt mit Finance Summary übereinstimmen.</p>
|
||||
<MudSimpleTable Dense Hover>
|
||||
<thead><tr><th>Prüfung</th><th>Vorgehen</th><th>Erwartung</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>Landessumme</td><td>Details nach Year, Country Key und Currency aggregieren</td><td>identisch zu Finance Summary</td></tr>
|
||||
<tr><td>Einzelbeleg</td><td>Invoice Number, Position und Document Entry suchen</td><td>Beleg nachvollziehbar</td></tr>
|
||||
<tr><td>Ausschluss</td><td>Sales-Blatt mit Finance Include vergleichen</td><td>Regelgrund sichtbar</td></tr>
|
||||
<tr><td>Dubletten</td><td>Belegkopfwerte und Positionen prüfen</td><td>B1-Kopflogik wird nicht doppelt gezählt</td></tr>
|
||||
</tbody>
|
||||
</MudSimpleTable>
|
||||
</TrainingSection>
|
||||
|
||||
<TrainingSection Title="9. Soll/Ist Vergleich">
|
||||
<p>Der Soll/Ist Vergleich nutzt dieselbe Finance-Reconciliation-Logik wie die zentrale Finance-Sicht. Er ist die Seite für
|
||||
Freigabe, Abweichungsanalyse und Status je Land.</p>
|
||||
<MudSimpleTable Dense Hover>
|
||||
<thead><tr><th>Status</th><th>Bedeutung</th><th>Aktion</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>OK</td><td>Istwert passt gegen Referenz innerhalb Toleranz</td><td>für Freigabe vormerken</td></tr>
|
||||
<tr><td>Prüfen</td><td>Differenz vorhanden oder Regel noch nicht final</td><td>Details und Länderregel prüfen</td></tr>
|
||||
<tr><td>Keine Daten</td><td>Kein aktueller Stand in CentralSalesRecords</td><td>Standortexport oder Import prüfen</td></tr>
|
||||
</tbody>
|
||||
</MudSimpleTable>
|
||||
</TrainingSection>
|
||||
|
||||
<TrainingSection Title="10. Länderlogik kompakt">
|
||||
<MudSimpleTable Dense Hover>
|
||||
<thead><tr><th>Land</th><th>Aktuelle Hauptlogik</th><th>Hinweis</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>DE</td><td>Alphaplan NettoPreisGesamtX, GS negativ, Finance-Ausschlüsse</td><td>Vollfile erforderlich</td></tr>
|
||||
<tr><td>ES</td><td>Sage ImporteNeto, REC/Credit negativ</td><td>Vollfile erforderlich</td></tr>
|
||||
<tr><td>IT</td><td>B1 Positions-Netto, Trafag Italia ausgeschlossen, Dublettenlogik</td><td>Detailprüfung wichtig</td></tr>
|
||||
<tr><td>UK</td><td>Sage Netto in GBP, Credit Notes negativ</td><td>Basis plus Deltas möglich</td></tr>
|
||||
<tr><td>FR/US</td><td>B1 Sales Price/Value bevorzugt</td><td>gegen CheckValue prüfen</td></tr>
|
||||
<tr><td>IN</td><td>Hauswährung INR</td><td>Referenz in Local Currency</td></tr>
|
||||
<tr><td>CH/AT</td><td>SAP OData NetwrHc</td><td>AT hat Referenz, CH aktuell ohne Sollwert</td></tr>
|
||||
</tbody>
|
||||
</MudSimpleTable>
|
||||
</TrainingSection>
|
||||
</MudTabPanel>
|
||||
|
||||
<MudTabPanel Text="Fehler & Freigabe">
|
||||
<TrainingSection Title="11. Typische Fehler und Massnahmen">
|
||||
<MudSimpleTable Dense Hover>
|
||||
<thead><tr><th>Fehler</th><th>Ursache</th><th>Massnahme</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>Zentrale Datei konnte nicht erzeugt werden</td><td>Excel/SharePoint-Datei gesperrt oder Uploadfehler</td><td>Datei schliessen, Logs prüfen, ggf. Zeitstempeldatei verwenden</td></tr>
|
||||
<tr><td>Land fehlt in Summary</td><td>Standort nicht exportiert oder keine Finance Include Zeilen</td><td>Standortexport und Finance-Regeln prüfen</td></tr>
|
||||
<tr><td>Summe passt nicht zum Soll</td><td>falsche Datei, falsches Jahr, Länderregel offen</td><td>Finance Details aggregieren und Länderlogik prüfen</td></tr>
|
||||
<tr><td>Zu wenige Zeilen nach Import</td><td>Delta statt Vollfile verwendet</td><td>bei ES/DE vollständige Datei neu liefern lassen</td></tr>
|
||||
<tr><td>Keine Verbindung zur Quelle</td><td>Credentials, Netzwerk, HANA/SAP nicht erreichbar</td><td>Settings und Logs prüfen</td></tr>
|
||||
</tbody>
|
||||
</MudSimpleTable>
|
||||
</TrainingSection>
|
||||
|
||||
<TrainingSection Title="12. Freigabe-Checkliste">
|
||||
<MudSimpleTable Dense Hover>
|
||||
<thead><tr><th>Nr.</th><th>Prüfpunkt</th><th>OK</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>1</td><td>Alle relevanten Standorte wurden nach letzter Dateiänderung exportiert</td><td></td></tr>
|
||||
<tr><td>2</td><td>Zentrale Excel wurde danach neu erzeugt</td><td></td></tr>
|
||||
<tr><td>3</td><td>Finance Summary stimmt aggregiert mit Finance Details überein</td><td></td></tr>
|
||||
<tr><td>4</td><td>Soll/Ist Vergleich enthält keine unerwarteten Abweichungen</td><td></td></tr>
|
||||
<tr><td>5</td><td>ES und DE wurden als Vollfile geliefert</td><td></td></tr>
|
||||
<tr><td>6</td><td>Offene Länder- oder Regelentscheidungen sind dokumentiert</td><td></td></tr>
|
||||
<tr><td>7</td><td>SharePoint/Excel-Datei ist nicht mehr gesperrt</td><td></td></tr>
|
||||
</tbody>
|
||||
</MudSimpleTable>
|
||||
</TrainingSection>
|
||||
</MudTabPanel>
|
||||
</MudTabs>
|
||||
|
||||
<style>
|
||||
.training-lead { max-width: 980px; color: var(--mud-palette-text-secondary); }
|
||||
.training-hero-image, .training-doc-image { width: 100%; border: 1px solid var(--mud-palette-lines-default); border-radius: 6px; background: #fff; }
|
||||
.training-doc-image { margin-bottom: 12px; }
|
||||
.training-section { margin: 18px 0 28px; max-width: 1180px; }
|
||||
.training-section p { margin-bottom: 12px; line-height: 1.55; }
|
||||
.training-section ul { margin-top: 8px; }
|
||||
.training-flow { display: grid; grid-template-columns: repeat(5, minmax(120px, 1fr)); gap: 10px; margin: 12px 0 18px; }
|
||||
.training-flow div { border: 1px solid var(--mud-palette-lines-default); border-radius: 6px; padding: 12px; background: var(--mud-palette-surface); }
|
||||
.training-flow span { display: inline-flex; width: 28px; height: 28px; align-items: center; justify-content: center; border-radius: 50%; background: var(--mud-palette-primary); color: var(--mud-palette-primary-text); font-weight: 700; margin-bottom: 8px; }
|
||||
.training-flow strong, .training-flow small { display: block; }
|
||||
.training-flow small { color: var(--mud-palette-text-secondary); margin-top: 4px; }
|
||||
@@media (max-width: 900px) { .training-flow { grid-template-columns: 1fr; } }
|
||||
</style>
|
||||
|
||||
@code {
|
||||
private string T(string german, string english) => UiText.Text(german, english);
|
||||
}
|
||||
@@ -0,0 +1,187 @@
|
||||
@page "/hr-kpi/schulung"
|
||||
@inject TrafagSalesExporter.Services.IUiTextService UiText
|
||||
|
||||
<PageTitle>@T("HR KPI Schulung", "HR KPI training")</PageTitle>
|
||||
|
||||
<MudText Typo="Typo.h4" Class="mb-2">@T("HR KPI Schulung", "HR KPI training")</MudText>
|
||||
<MudText Typo="Typo.body1" Class="mb-4 training-lead">
|
||||
Ausführliche Anwenderunterlage für HR-Keyuser, HR-Leitung und Stellvertretungen. Die Seite erklärt nicht nur die Bedienung,
|
||||
sondern auch die Reihenfolge, die Prüfpflichten und die fachliche Interpretation der wichtigsten Kennzahlen.
|
||||
</MudText>
|
||||
|
||||
<MudPaper Class="pa-4 mb-4" Elevation="1">
|
||||
<MudGrid>
|
||||
<MudItem xs="12" md="7">
|
||||
<img class="training-hero-image" src="training/hr_kpi_cockpit_preview.png" alt="HR KPI Cockpit Vorschau" />
|
||||
</MudItem>
|
||||
<MudItem xs="12" md="5">
|
||||
<MudAlert Severity="Severity.Info" Variant="Variant.Outlined" Class="mb-3">
|
||||
Diese Schulung ist als Arbeitsanleitung gedacht: erst Datenstatus prüfen, dann filtern, danach Kennzahlen interpretieren.
|
||||
</MudAlert>
|
||||
<MudSimpleTable Dense Hover>
|
||||
<thead>
|
||||
<tr><th>Rolle</th><th>Schwerpunkt</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>HR Keyuser</td><td>Daten bereitstellen, Plausibilität prüfen, Monatsauswertung erstellen</td></tr>
|
||||
<tr><td>HR Leitung</td><td>Kennzahlen bewerten, Managementsicht freigeben, Massnahmen ableiten</td></tr>
|
||||
<tr><td>IT/Admin</td><td>Zugriff, Pfad, Konfiguration und technische Fehler klären</td></tr>
|
||||
</tbody>
|
||||
</MudSimpleTable>
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
</MudPaper>
|
||||
|
||||
<MudTabs Rounded Border>
|
||||
<MudTabPanel Text="Überblick">
|
||||
<TrainingSection Title="1. Zweck und Grundprinzip">
|
||||
<p>Das HR KPI Cockpit bündelt operative HR-Auswertungen in einer geschützten Oberfläche. Es ersetzt keine fachliche Freigabe,
|
||||
sondern liefert eine nachvollziehbare Sicht auf Headcount, Fluktuation, Absenzen, GLZ, Restferien und Datenqualität.</p>
|
||||
<p>Die wichtigste Regel lautet: Eine Kennzahl ist nur so belastbar wie die Quelldateien, Filter und fachlichen Ausschlüsse,
|
||||
die zu ihrer Berechnung verwendet wurden. Deshalb beginnt jede Auswertung mit dem Datenstatus.</p>
|
||||
<ul>
|
||||
<li>Vor jeder Weitergabe den Reiter <strong>Datenstatus</strong> öffnen.</li>
|
||||
<li>Rote Datenqualitätsmeldungen zuerst klären.</li>
|
||||
<li>Filter und Zeitraum in Bericht oder E-Mail nennen.</li>
|
||||
<li>Für Managementberichte personenbezogene Detailtabellen vermeiden.</li>
|
||||
</ul>
|
||||
</TrainingSection>
|
||||
|
||||
<TrainingSection Title="2. Bedienreihenfolge">
|
||||
<div class="training-flow">
|
||||
<div><span>1</span><strong>Dateien exportieren</strong><small>Rexx/SAP-Quellen aktualisieren</small></div>
|
||||
<div><span>2</span><strong>Datenordner prüfen</strong><small>Pfad und Dateistand kontrollieren</small></div>
|
||||
<div><span>3</span><strong>Laden</strong><small>Cockpit neu aufbauen</small></div>
|
||||
<div><span>4</span><strong>Datenqualität</strong><small>Warnungen und Fehler lesen</small></div>
|
||||
<div><span>5</span><strong>KPI freigeben</strong><small>Interpretieren und dokumentieren</small></div>
|
||||
</div>
|
||||
<p>Diese Reihenfolge verhindert, dass alte Dateien, leere Filter oder unvollständige Exporte als Managementzahlen verwendet werden.</p>
|
||||
</TrainingSection>
|
||||
|
||||
<TrainingSection Title="3. Datenquellen und Dateistatus">
|
||||
<MudSimpleTable Dense Hover>
|
||||
<thead><tr><th>Datei</th><th>Inhalt</th><th>Prüfung</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>Saldiperstichdatum.xlsx</td><td>Aktive Mitarbeitende, Saldi, Ferien, Organisation, Kostenstelle</td><td>Zeilenanzahl, Alter, Organisationsabdeckung</td></tr>
|
||||
<tr><td>Exportkommengehen.xlsx</td><td>Arbeitszeitmodell, Sollzeit, Geburtsdatum</td><td>FTE-/Sollzeit-Fallback prüfen</td></tr>
|
||||
<tr><td>HR_KPI_Export.xlsx</td><td>SAP-HR-Felder, Beschäftigungsgrad, Geschlecht, BU/NBU, Planstelle</td><td>Join auf Personalnummer plausibilisieren</td></tr>
|
||||
<tr><td>Abwesenheitinstunden.xlsx</td><td>Krankheit kurz/lang, Unfall, Stundenwerte</td><td>Stunden-zu-Tage-Logik und Zeitraum prüfen</td></tr>
|
||||
<tr><td>Personalausgeschieden.xlsx</td><td>Austritte, Austrittsart, Austrittsdatum</td><td>Austrittsarten und Ausschlüsse kontrollieren</td></tr>
|
||||
</tbody>
|
||||
</MudSimpleTable>
|
||||
<MudAlert Severity="Severity.Warning" Variant="Variant.Outlined" Class="mt-3">
|
||||
PDF-Dateien sind für diese Auswertung ungeeignet. Die Dateien müssen als strukturierte Excel-Dateien vorliegen.
|
||||
</MudAlert>
|
||||
</TrainingSection>
|
||||
</MudTabPanel>
|
||||
|
||||
<MudTabPanel Text="Auswertung">
|
||||
<TrainingSection Title="4. Filter richtig verwenden">
|
||||
<p>Filter sind fachliche Eingriffe in die Sicht. Deshalb muss bei jeder Auswertung klar sein, ob ein Filter nur aktive Mitarbeitende,
|
||||
Austritte oder beide Datenbereiche betrifft.</p>
|
||||
<MudSimpleTable Dense Hover>
|
||||
<thead><tr><th>Filter</th><th>Wirkung</th><th>Hinweis</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>Austrittsjahr</td><td>grenzt Austritte nach Jahr ein</td><td>Leer bedeutet alle verfügbaren Jahre</td></tr>
|
||||
<tr><td>Von/Bis Austritt</td><td>hat Vorrang vor Austrittsjahr</td><td>Für Quartals- und Sonderauswertungen verwenden</td></tr>
|
||||
<tr><td>Organisation</td><td>wirkt auf aktive Mitarbeitende und passende Austrittsdaten</td><td>Leere Organisationen sind Datenqualitätsthema</td></tr>
|
||||
<tr><td>Kostenstelle</td><td>wirkt stabil auf aktive Mitarbeitende</td><td>Nicht jede Austrittsquelle enthält Kostenstellen sauber</td></tr>
|
||||
<tr><td>GLZ/Restferien Ampel</td><td>fokussiert operative Prüffälle</td><td>Nicht als Fluktuationsfilter interpretieren</td></tr>
|
||||
<tr><td>Managementsicht</td><td>reduziert personenbezogene Details</td><td>Für Weitergabe und Ausdruck bevorzugen</td></tr>
|
||||
</tbody>
|
||||
</MudSimpleTable>
|
||||
</TrainingSection>
|
||||
|
||||
<TrainingSection Title="5. Headcount und Mitarbeitende">
|
||||
<p>Headcount ist die Basis fast aller HR-Kennzahlen. Sprünge gegenüber Vormonat oder Vorjahr müssen erklärbar sein,
|
||||
zum Beispiel durch Eintritte, Austritte, Organisationswechsel oder geänderte Quelldateien.</p>
|
||||
<ul>
|
||||
<li>Headcount nach Organisation zählt eindeutige Personalnummern.</li>
|
||||
<li>Leere Personalnummern werden nicht als verlässlicher Distinct-Headcount verwendet.</li>
|
||||
<li>FTE kann aus SAP-Beschäftigungsgrad oder aus Arbeitszeitmodell/Sollzeit abgeleitet werden.</li>
|
||||
<li>Bei unerwarteten Sprüngen zuerst Datenstatus und Join-Hinweise prüfen.</li>
|
||||
</ul>
|
||||
</TrainingSection>
|
||||
|
||||
<TrainingSection Title="6. Fluktuation fachlich lesen">
|
||||
<p>Die Fluktuation wird aus ausgeschiedenen Personen berechnet. Relevant sind vor allem Arbeitnehmerkündigungen.
|
||||
Praktikanten, befristete Verträge, Pensionierungen und Arbeitgeberkündigungen werden für die relevante Fluktuation ausgeschlossen.</p>
|
||||
<MudSimpleTable Dense Hover>
|
||||
<thead><tr><th>Kennzahl</th><th>Berechnung</th><th>Interpretation</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>Monatsfluktuation</td><td>relevante Austritte im Monat / Headcount des Monats</td><td>Operativer Frühindikator</td></tr>
|
||||
<tr><td>Quartalsfluktuation</td><td>relevante Austritte im Quartal / durchschnittlicher Quartals-Headcount</td><td>Stabiler als Monatswert</td></tr>
|
||||
<tr><td>Jahresfluktuation</td><td>relevante Austritte im Jahr / durchschnittlicher Jahres-Headcount</td><td>Management-KPI</td></tr>
|
||||
<tr><td>Hochrechnung</td><td>aktuelle Quartalsfluktuation x 4</td><td>Nur als Prognose lesen</td></tr>
|
||||
</tbody>
|
||||
</MudSimpleTable>
|
||||
</TrainingSection>
|
||||
|
||||
<TrainingSection Title="7. Absenzen, GLZ und Restferien">
|
||||
<p>Absenzen werden nach Stunden/Tagen und Organisation ausgewertet. Die Krankenquote nutzt Krankheitstage im Verhältnis
|
||||
zu FTE und Arbeitstagen. Unfalltage können je nach Quelle anders abgegrenzt sein und müssen daher vorsichtig interpretiert werden.</p>
|
||||
<ul>
|
||||
<li>Top-Absenzen dienen der operativen Prüfung, nicht der direkten Weitergabe.</li>
|
||||
<li>Kritische Restferien zeigen Planungsbedarf oder Datenfehler.</li>
|
||||
<li>Kritische GLZ-Saldi sollten mit Linienverantwortlichen geprüft werden.</li>
|
||||
<li>Gelbe Ampeln sind Beobachtungspunkte, rote Ampeln brauchen aktive Klärung.</li>
|
||||
</ul>
|
||||
</TrainingSection>
|
||||
</MudTabPanel>
|
||||
|
||||
<MudTabPanel Text="Qualität & Freigabe">
|
||||
<TrainingSection Title="8. Datenqualität systematisch prüfen">
|
||||
<MudSimpleTable Dense Hover>
|
||||
<thead><tr><th>Fehlerbild</th><th>Mögliche Ursache</th><th>Massnahme</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>Keine Daten</td><td>Datei fehlt, falscher Ordner, falscher Dateiname</td><td>Pfad korrigieren und neu laden</td></tr>
|
||||
<tr><td>Alter Dateistand</td><td>Export wurde nicht erneuert</td><td>Quelle neu exportieren</td></tr>
|
||||
<tr><td>Leere Organisation</td><td>Join oder Stammdatenfeld fehlt</td><td>Quelldaten und Personalnummer prüfen</td></tr>
|
||||
<tr><td>Sprung im Headcount</td><td>neuer Export, Filter, Stichtagswechsel</td><td>Vorperiode und Dateistatus vergleichen</td></tr>
|
||||
<tr><td>Ungewöhnliche Absenzen</td><td>Stundenlogik, Zeitraum, Doppelerfassung</td><td>Einzelzeilen und Quelle prüfen</td></tr>
|
||||
</tbody>
|
||||
</MudSimpleTable>
|
||||
</TrainingSection>
|
||||
|
||||
<TrainingSection Title="9. Managementsicht und Datenschutz">
|
||||
<p>HR-Daten enthalten personenbezogene Informationen. Für Berichte an Management oder Dritte ist die Managementsicht zu bevorzugen.
|
||||
Detailtabellen mit Namen, Personalnummern oder Einzelfällen dürfen nur an berechtigte Personen gehen.</p>
|
||||
<MudAlert Severity="Severity.Error" Variant="Variant.Outlined">
|
||||
Keine HR-Dateien per E-Mail weiterleiten und keine Kopien in ungeschützten Ordnern liegen lassen.
|
||||
</MudAlert>
|
||||
</TrainingSection>
|
||||
|
||||
<TrainingSection Title="10. Monatsabschluss-Checkliste">
|
||||
<MudSimpleTable Dense Hover>
|
||||
<thead><tr><th>Nr.</th><th>Prüfpunkt</th><th>Erledigt</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>1</td><td>Alle HR-Quelldateien neu exportiert und im richtigen Ordner abgelegt</td><td></td></tr>
|
||||
<tr><td>2</td><td>Cockpit neu geladen, keine roten Dateistatusmeldungen</td><td></td></tr>
|
||||
<tr><td>3</td><td>Headcount gegen Vorperiode plausibilisiert</td><td></td></tr>
|
||||
<tr><td>4</td><td>Fluktuationsausschlüsse fachlich geprüft</td><td></td></tr>
|
||||
<tr><td>5</td><td>Absenzen, GLZ und Restferien auf Ausreisser geprüft</td><td></td></tr>
|
||||
<tr><td>6</td><td>Filter, Zeitraum und Datenstand im Bericht dokumentiert</td><td></td></tr>
|
||||
<tr><td>7</td><td>Managementsicht für Weitergabe verwendet</td><td></td></tr>
|
||||
</tbody>
|
||||
</MudSimpleTable>
|
||||
</TrainingSection>
|
||||
</MudTabPanel>
|
||||
</MudTabs>
|
||||
|
||||
<style>
|
||||
.training-lead { max-width: 980px; color: var(--mud-palette-text-secondary); }
|
||||
.training-hero-image { width: 100%; border: 1px solid var(--mud-palette-lines-default); border-radius: 6px; }
|
||||
.training-section { margin: 18px 0 28px; max-width: 1180px; }
|
||||
.training-section p { margin-bottom: 12px; line-height: 1.55; }
|
||||
.training-section ul { margin-top: 8px; }
|
||||
.training-flow { display: grid; grid-template-columns: repeat(5, minmax(120px, 1fr)); gap: 10px; margin: 12px 0 18px; }
|
||||
.training-flow div { border: 1px solid var(--mud-palette-lines-default); border-radius: 6px; padding: 12px; background: var(--mud-palette-surface); }
|
||||
.training-flow span { display: inline-flex; width: 28px; height: 28px; align-items: center; justify-content: center; border-radius: 50%; background: var(--mud-palette-primary); color: var(--mud-palette-primary-text); font-weight: 700; margin-bottom: 8px; }
|
||||
.training-flow strong, .training-flow small { display: block; }
|
||||
.training-flow small { color: var(--mud-palette-text-secondary); margin-top: 4px; }
|
||||
@@media (max-width: 900px) { .training-flow { grid-template-columns: 1fr; } }
|
||||
</style>
|
||||
|
||||
@code {
|
||||
private string T(string german, string english) => UiText.Text(german, english);
|
||||
}
|
||||
@@ -44,6 +44,7 @@
|
||||
return path is "" or
|
||||
"management-cockpit" or
|
||||
"finance-cockpit/vergleich" or
|
||||
"finance-cockpit/schulung" or
|
||||
"standorte" or
|
||||
"transformations" or
|
||||
"finance-rules" or
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
<section class="training-section">
|
||||
<MudText Typo="Typo.h5" Class="mb-2">@Title</MudText>
|
||||
@ChildContent
|
||||
</section>
|
||||
|
||||
@code {
|
||||
[Parameter]
|
||||
public string Title { get; set; } = string.Empty;
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? ChildContent { get; set; }
|
||||
}
|
||||
@@ -32,6 +32,7 @@ public sealed class UiTextService : IUiTextService
|
||||
["Export Dashboard"] = "Panel de exportación",
|
||||
["Management Analyse"] = "Análisis de gestión",
|
||||
["Soll/Ist Vergleich"] = "Comparación real/referencia",
|
||||
["Finance Schulung"] = "Formación financiera",
|
||||
["Manuelle Importe"] = "Importaciones manuales",
|
||||
["Admin"] = "Administración",
|
||||
["Standorte"] = "Sitios",
|
||||
@@ -41,6 +42,8 @@ public sealed class UiTextService : IUiTextService
|
||||
["Logs"] = "Registros",
|
||||
["Finance sperren"] = "Bloquear finanzas",
|
||||
["HR KPI (Login)"] = "KPI RR. HH. (login)",
|
||||
["HR Dashboard"] = "Panel HR",
|
||||
["HR KPI Schulung"] = "Formación HR KPI",
|
||||
["HR KPI enthaelt sensible Personaldaten. Bitte separat anmelden."] = "HR KPI contiene datos personales sensibles. Inicie sesión por separado.",
|
||||
["HR-KPI-Zugang ist noch nicht konfiguriert. Bitte Username und PasswordHash in HrKpiAccess konfigurieren."] = "El acceso a HR KPI aún no está configurado. Configure Username y PasswordHash en HrKpiAccess.",
|
||||
["HR KPI entsperren"] = "Desbloquear HR KPI",
|
||||
@@ -233,6 +236,7 @@ public sealed class UiTextService : IUiTextService
|
||||
["Export Dashboard"] = "Dashboard esportazioni",
|
||||
["Management Analyse"] = "Analisi di gestione",
|
||||
["Soll/Ist Vergleich"] = "Confronto consuntivo/riferimento",
|
||||
["Finance Schulung"] = "Formazione finance",
|
||||
["Manuelle Importe"] = "Import manuali",
|
||||
["Admin"] = "Amministrazione",
|
||||
["Standorte"] = "Sedi",
|
||||
@@ -242,6 +246,8 @@ public sealed class UiTextService : IUiTextService
|
||||
["Logs"] = "Log",
|
||||
["Finance sperren"] = "Blocca finance",
|
||||
["HR KPI (Login)"] = "KPI HR (login)",
|
||||
["HR Dashboard"] = "Dashboard HR",
|
||||
["HR KPI Schulung"] = "Formazione KPI HR",
|
||||
["HR KPI enthaelt sensible Personaldaten. Bitte separat anmelden."] = "HR KPI contiene dati personali sensibili. Effettuare un accesso separato.",
|
||||
["HR-KPI-Zugang ist noch nicht konfiguriert. Bitte Username und PasswordHash in HrKpiAccess konfigurieren."] = "L'accesso a HR KPI non è ancora configurato. Configurare Username e PasswordHash in HrKpiAccess.",
|
||||
["HR KPI entsperren"] = "Sblocca HR KPI",
|
||||
@@ -434,6 +440,7 @@ public sealed class UiTextService : IUiTextService
|
||||
["Export Dashboard"] = "निर्यात डैशबोर्ड",
|
||||
["Management Analyse"] = "प्रबंधन विश्लेषण",
|
||||
["Soll/Ist Vergleich"] = "वास्तविक/संदर्भ तुलना",
|
||||
["Finance Schulung"] = "वित्त प्रशिक्षण",
|
||||
["Manuelle Importe"] = "मैनुअल आयात",
|
||||
["Admin"] = "प्रशासन",
|
||||
["Standorte"] = "साइटें",
|
||||
@@ -443,6 +450,8 @@ public sealed class UiTextService : IUiTextService
|
||||
["Logs"] = "लॉग",
|
||||
["Finance sperren"] = "वित्त लॉक करें",
|
||||
["HR KPI (Login)"] = "HR KPI (लॉगिन)",
|
||||
["HR Dashboard"] = "HR डैशबोर्ड",
|
||||
["HR KPI Schulung"] = "HR KPI प्रशिक्षण",
|
||||
["HR KPI enthaelt sensible Personaldaten. Bitte separat anmelden."] = "HR KPI में संवेदनशील कर्मचारी डेटा है. कृपया अलग से साइन इन करें.",
|
||||
["HR-KPI-Zugang ist noch nicht konfiguriert. Bitte Username und PasswordHash in HrKpiAccess konfigurieren."] = "HR KPI एक्सेस अभी कॉन्फ़िगर नहीं है. कृपया HrKpiAccess में Username और PasswordHash सेट करें.",
|
||||
["HR KPI entsperren"] = "HR KPI अनलॉक करें",
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,101 @@
|
||||
# Manual-Import und Delta-Stand
|
||||
|
||||
Stand: 2026-05-21
|
||||
|
||||
Diese Datei beschreibt, wie manuelle Excel-/CSV-Importe aktuell behandelt werden und wie neue Eintraege bzw. Delta-Dateien verarbeitet werden.
|
||||
|
||||
## Uebersicht
|
||||
|
||||
| Land / Standort | Quelle aktuell | Dateityp | Neue Eintraege / Deltas | Wie die App auswaehlt | Was beim Standortexport passiert | Finance-Wert |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| UK / England `TRUK` | SharePoint-Ordner `Import/Finance/UK_B1` | Sage Excel `.xlsx` | Delta-faehig | Bei Jahreslauf: Jahresdatei fuer `TRUK` plus spaetere datierte Dateien `ddMMyy_TRUK.xlsx` oder `.csv` | Alle gefundenen Dateien werden gelesen und zusammen in `CentralSalesRecords` fuer `TRUK` ersetzt | `Sales Price/Value * Quantity`, Credit Notes negativ, GBP |
|
||||
| Spanien `TRSE` / `TRES` | SharePoint-Datei oder Ordner / Sage CSV | `.csv` | Vollfile erforderlich, keine Deltas | Wenn Ordner: neueste passende Vollfile-Datei nach TSC/Datum | Datei wird gelesen, Standortdaten werden ersetzt | Sage `ImporteNeto`, REC/Abono/Credit negativ, EUR |
|
||||
| Deutschland `TRDE` | Alphaplan Excel | `.xlsx` | Vollfile/Jahresfile erforderlich, keine Deltas | Pfad/Datei am Standort hinterlegt | Datei wird gelesen, DE-Zeilen ersetzen bisherigen DE-Stand | `NettoPreisGesamtX`, Finance-Regeln: Ausschluesse, GS negativ, 2025-Zwang |
|
||||
| CH/AT `ZSCHWEIZ` | SAP OData | OData | Kein manueller Delta-Excel-Prozess | App liest SAP-Service | ZSCHWEIZ-Zeilen ersetzen bisherigen Stand | `NetwrHc`, CHF/EUR nach Land |
|
||||
| FR / IT / US | HANA / SAP B1 | direkte DB | Kein manueller Delta-Excel-Prozess | App liest HANA nach Datum/Schema | Standortdaten werden neu aus HANA aufgebaut | B1 Positions-Netto, Credit Notes negativ |
|
||||
| IN | HANA / Sage | direkte DB | Kein manueller Delta-Excel-Prozess | App liest HANA/Sage | Standortdaten werden neu aus Quelle aufgebaut | Hauswaehrung INR |
|
||||
|
||||
## UK / England Delta-Mechanik
|
||||
|
||||
UK ist aktuell am besten fuer laufende Delta-Lieferungen vorbereitet.
|
||||
|
||||
| Punkt | Aktuelle Logik |
|
||||
| --- | --- |
|
||||
| Standort | `England`, `TSC = TRUK`, `SourceSystem = MANUAL_EXCEL` |
|
||||
| SharePoint-Ordner | `Import/Finance/UK_B1` |
|
||||
| Basisdatei | Jahresdatei im SharePoint-Ordner, z. B. mit Jahr `2025` im Namen |
|
||||
| Delta-Dateien | Datierte Dateien wie `010526_TRUK.xlsx` oder `010526_TRUK.csv` |
|
||||
| Auswahl | Jahresdatei zuerst, danach alle spaeteren Delta-Dateien im gleichen Jahr |
|
||||
| Import | App liest alle ausgewaehlten Dateien in einem Lauf zusammen |
|
||||
| Persistenz | `CentralSalesRecords` fuer `TRUK` werden ersetzt, nicht blind additiv angehaengt |
|
||||
| Nach Delta-Lieferung | Delta-Datei in den Ordner legen, `TRUK` exportieren, danach zentrale Excel neu erzeugen |
|
||||
|
||||
Wichtig:
|
||||
|
||||
- Der Ordnername `UK_B1` ist nur technisch/historisch. Fachlich ist UK Sage, nicht SAP B1.
|
||||
- UK nutzt grafisches Manual-Excel-Mapping.
|
||||
- Der Finance-Wert wird aus `Sales Price/Value * Quantity` gebildet.
|
||||
- Credit Notes werden anhand erkennbarer Sage-Typen negativ gesetzt.
|
||||
|
||||
## Spanien
|
||||
|
||||
Spanien nutzt technisch ebenfalls `MANUAL_EXCEL`, fachlich aber Sage CSV.
|
||||
|
||||
Aktueller Implementierungsstand:
|
||||
|
||||
- Datei/Ordner kann ueber SharePoint oder lokal hinterlegt werden.
|
||||
- Bei SharePoint-Ordnern wird die neueste passende Datei nach TSC/Datum ausgewaehlt.
|
||||
- Spanien muss immer den kompletten relevanten Datenstand liefern.
|
||||
- Delta-Dateien sind fuer Spanien nicht vorgesehen.
|
||||
- Praktisch gilt Spanien deshalb als Vollfile-Import.
|
||||
- Beim Standortexport ersetzt die App den bisherigen Spanien-Stand in `CentralSalesRecords`.
|
||||
- Wenn versehentlich nur eine Delta-Datei als neueste Datei im Ordner liegt oder direkt als Pfad hinterlegt wird, wuerde die App technisch nur dieses Delta lesen und damit den bisherigen Spanien-Stand ersetzen.
|
||||
- Es gibt aktuell keine explizite Sperre, die eine Spanien-Delta-Datei erkennt und ablehnt.
|
||||
|
||||
Finance-Logik:
|
||||
|
||||
- `SalesPriceValue = ImporteNeto`
|
||||
- `REC`, Abono bzw. Credit-Faelle werden negativ.
|
||||
- Waehrung ist EUR.
|
||||
|
||||
## Deutschland
|
||||
|
||||
Deutschland nutzt Alphaplan Excel.
|
||||
|
||||
Aktueller Implementierungsstand:
|
||||
|
||||
- Standort `TRDE` ist als `MANUAL_EXCEL` vorbereitet.
|
||||
- Quelle ist ein Jahres-/Vollfile, aktuell fuer 2025.
|
||||
- Finance-Regeln erzwingen DE fachlich auf 2025.
|
||||
- Deutschland muss immer den kompletten relevanten Datenstand liefern.
|
||||
- Delta-Dateien sind fuer Deutschland nicht vorgesehen.
|
||||
- Beim Standortexport ersetzt die App den bisherigen Deutschland-Stand in `CentralSalesRecords`.
|
||||
- Wenn versehentlich nur eine Delta-Datei als Pfad hinterlegt wird, wuerde die App technisch nur dieses Delta lesen und damit den bisherigen Deutschland-Stand ersetzen.
|
||||
- Es gibt aktuell keine explizite Sperre, die eine Deutschland-Delta-Datei erkennt und ablehnt.
|
||||
|
||||
Finance-Logik:
|
||||
|
||||
- `SalesPriceValue = NettoPreisGesamtX`
|
||||
- Ausschluesse gemaess Finance-Regeln:
|
||||
- `CustomerName = Trafag AG`
|
||||
- `CustomerName contains Magnetic Sense`
|
||||
- `InvoiceNumber = GS2510095`
|
||||
- `InvoiceNumber starts with GS` wird negativ gerechnet.
|
||||
|
||||
Offen:
|
||||
|
||||
- Finance/Munir muss bestaetigen, welche Kundenlaender und Filter fuer den offiziellen DE-Istwert gelten.
|
||||
|
||||
## Praktische Bedienreihenfolge
|
||||
|
||||
1. Neue Datei oder Delta-Datei im richtigen Ordner bereitstellen.
|
||||
2. In `Manuelle Importe` Pfad pruefen bzw. Standort aktiv lassen.
|
||||
3. Standortexport fuer das betroffene Land ausfuehren.
|
||||
4. Danach `Zentrale Datei neu erzeugen` starten.
|
||||
5. Im zentralen Excel `Finance Summary` und `Finance Details` pruefen.
|
||||
|
||||
## 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.
|
||||
|
||||
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.
|
||||
@@ -1,5 +1,28 @@
|
||||
# Last Change 2026-05-04
|
||||
|
||||
## In-App-Schulungen und Finance-Detaildoku 2026-05-21
|
||||
|
||||
Geaendert:
|
||||
|
||||
- Neue HTML-/Razor-Schulungsseite `HR KPI Schulung` unter `/hr-kpi/schulung`.
|
||||
- Neue HTML-/Razor-Schulungsseite `Finance Schulung` unter `/finance-cockpit/schulung`.
|
||||
- Navigation erweitert:
|
||||
- `Finance Cockpit` enthaelt jetzt `Finance Schulung`.
|
||||
- `HR KPI (Login)` ist jetzt eine Gruppe mit `HR Dashboard` und `HR KPI Schulung`.
|
||||
- Finance-Schulung ist wie die restlichen Finance-Seiten ueber die Finance-Cockpit-Entsperrung geschuetzt.
|
||||
- Schulungsseiten enthalten Tabellen, Checklisten, Prozessablauf und eingebettete Grafiken aus `wwwroot/training`.
|
||||
- Sprachtexte fuer die neuen Menuepunkte in Englisch, Spanisch, Italienisch und Hindi ergaenzt.
|
||||
- Word-Schulungsdokumente fuer HR und Finance neu erzeugt und Umlaut-Schreibweisen korrigiert.
|
||||
- Neue Markdown-Doku `docs/MANUAL_IMPORT_DELTA_STAND_2026-05-21.md` beschreibt den aktuellen Delta-/Vollfile-Stand:
|
||||
- UK kann Basis plus Deltas lesen.
|
||||
- Spanien und Deutschland muessen vollstaendige Dateien liefern.
|
||||
- Manual-Importe ersetzen pro Standort den aktuellen Stand in `CentralSalesRecords`.
|
||||
|
||||
Verifiziert:
|
||||
|
||||
- `dotnet test TrafagSalesExporter.sln --verbosity minimal --no-restore -p:BaseOutputPath=.tmp_build\bin\ -p:BaseIntermediateOutputPath=.tmp_build\obj\`
|
||||
- Normaler Debug-Build war lokal durch eine von Visual Studio/.NET Host gesperrte `bin\Debug\net8.0\BiDashboard.dll` blockiert.
|
||||
|
||||
## Markdown-Doku und Anwenderdokus nachgezogen 2026-05-20
|
||||
|
||||
Geaendert:
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 36 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 32 KiB |
@@ -0,0 +1,279 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1800" height="1450" viewBox="0 0 1800 1450">
|
||||
<defs>
|
||||
<style>
|
||||
.bg { fill: #f7f8fa; }
|
||||
.title { font: 700 34px Arial, sans-serif; fill: #111827; }
|
||||
.subtitle { font: 400 16px Arial, sans-serif; fill: #4b5563; }
|
||||
.section { font: 700 18px Arial, sans-serif; fill: #111827; }
|
||||
.stepno { font: 700 18px Arial, sans-serif; fill: #ffffff; }
|
||||
.box-title { font: 700 15px Arial, sans-serif; fill: #111827; }
|
||||
.txt { font: 400 13px Arial, sans-serif; fill: #1f2937; }
|
||||
.small { font: 400 12px Arial, sans-serif; fill: #4b5563; }
|
||||
.tiny { font: 400 11px Arial, sans-serif; fill: #4b5563; }
|
||||
.lane { fill: #ffffff; stroke: #d1d5db; stroke-width: 1.2; }
|
||||
.prep { fill: #e8f2ff; stroke: #2563eb; stroke-width: 1.5; }
|
||||
.run { fill: #eaf8ef; stroke: #15803d; stroke-width: 1.5; }
|
||||
.check { fill: #fffbeb; stroke: #d97706; stroke-width: 1.5; }
|
||||
.issue { fill: #fff1f2; stroke: #be123c; stroke-width: 1.5; }
|
||||
.output { fill: #eef2ff; stroke: #4338ca; stroke-width: 1.5; }
|
||||
.admin { fill: #f0ecff; stroke: #6d28d9; stroke-width: 1.5; }
|
||||
.line { stroke: #374151; stroke-width: 1.6; fill: none; marker-end: url(#arrow); }
|
||||
.line-soft { stroke: #6b7280; stroke-width: 1.2; fill: none; marker-end: url(#arrowSoft); }
|
||||
.dash { stroke-dasharray: 6 5; }
|
||||
.num-prep { fill: #2563eb; }
|
||||
.num-run { fill: #15803d; }
|
||||
.num-check { fill: #d97706; }
|
||||
.num-issue { fill: #be123c; }
|
||||
</style>
|
||||
<marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse">
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" fill="#374151" />
|
||||
</marker>
|
||||
<marker id="arrowSoft" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse">
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" fill="#6b7280" />
|
||||
</marker>
|
||||
</defs>
|
||||
|
||||
<rect class="bg" x="0" y="0" width="1800" height="1450" />
|
||||
<text class="title" x="48" y="58">Keyuser-Prozessdoku - Finance Export, zentrale Excel und Kontrolle</text>
|
||||
<text class="subtitle" x="50" y="86">Stand 2026-05-20 | Zielgruppe: Finance Keyuser / Poweruser | Fokus: was wann in der App tun, nicht technische Implementierung</text>
|
||||
|
||||
<rect class="lane" x="40" y="120" width="1720" height="84" rx="8" />
|
||||
<text class="section" x="60" y="150">Kurzprinzip</text>
|
||||
<text class="txt" x="60" y="176">1. Einstellungen und Standorte pflegen -> 2. Länder-/Standortdaten importieren/exportieren -> 3. zentrale Excel erzeugen -> 4. Finance Soll/Ist prüfen -> 5. offene fachliche Abgrenzungen klären.</text>
|
||||
<text class="small" x="60" y="196">Die zentrale Excel und das Finance Cockpit verwenden dieselbe Basis: CentralSalesRecords. Für Finance immer die Spalten `Finance | ...` bzw. den Reiter `Soll/Ist Vergleich` verwenden.</text>
|
||||
|
||||
<!-- Lanes -->
|
||||
<rect class="lane" x="40" y="240" width="410" height="1010" rx="8" />
|
||||
<text class="section" x="65" y="275">A. Vorbereitung / Stammdaten</text>
|
||||
|
||||
<rect class="lane" x="480" y="240" width="410" height="1010" rx="8" />
|
||||
<text class="section" x="505" y="275">B. Import und Export ausführen</text>
|
||||
|
||||
<rect class="lane" x="920" y="240" width="410" height="1010" rx="8" />
|
||||
<text class="section" x="945" y="275">C. Kontrolle und Finance-Abgleich</text>
|
||||
|
||||
<rect class="lane" x="1360" y="240" width="400" height="1010" rx="8" />
|
||||
<text class="section" x="1385" y="275">D. Fehler / Freigabe / Betrieb</text>
|
||||
|
||||
<!-- Preparation steps -->
|
||||
<rect class="prep" x="70" y="310" width="350" height="120" rx="8" />
|
||||
<circle class="num-prep" cx="102" cy="342" r="18" />
|
||||
<text class="stepno" x="96" y="349">1</text>
|
||||
<text class="box-title" x="132" y="338">Settings prüfen</text>
|
||||
<text class="small" x="132" y="362">Export Einstellungen öffnen</text>
|
||||
<text class="small" x="132" y="380">Datum-Filter ab z.B. 2025-01-01</text>
|
||||
<text class="small" x="132" y="398">Timer nur aktivieren, wenn automatischer Lauf gewünscht ist</text>
|
||||
<text class="small" x="132" y="416">SharePoint nur bei vollständigen Credentials nutzen</text>
|
||||
|
||||
<rect class="prep" x="70" y="465" width="350" height="145" rx="8" />
|
||||
<circle class="num-prep" cx="102" cy="497" r="18" />
|
||||
<text class="stepno" x="96" y="504">2</text>
|
||||
<text class="box-title" x="132" y="493">Standorte pflegen</text>
|
||||
<text class="small" x="132" y="517">Admin -> Standorte</text>
|
||||
<text class="small" x="132" y="535">aktive Länder kontrollieren</text>
|
||||
<text class="small" x="132" y="553">TSC, Land, SourceSystem prüfen</text>
|
||||
<text class="small" x="132" y="571">HANA/SAP: Schema, EntitySet, Mapping</text>
|
||||
<text class="small" x="132" y="589">Manual Excel: Datei/Pfad und Mapping</text>
|
||||
|
||||
<rect class="prep" x="70" y="645" width="350" height="150" rx="8" />
|
||||
<circle class="num-prep" cx="102" cy="677" r="18" />
|
||||
<text class="stepno" x="96" y="684">3</text>
|
||||
<text class="box-title" x="132" y="673">Manual Excel Länder vorbereiten</text>
|
||||
<text class="small" x="132" y="697">UK: Sage Excel / SharePoint-Ordner UK_B1</text>
|
||||
<text class="small" x="132" y="715">ES: Sage CSV / Manual Excel</text>
|
||||
<text class="small" x="132" y="733">DE: Alphaplan Excel, Datei hochladen oder Pfad setzen</text>
|
||||
<text class="small" x="132" y="751">nach Datei setzen: Header laden / Mapping prüfen</text>
|
||||
<text class="small" x="132" y="769">Standort erst aktivieren, wenn Datei erreichbar ist</text>
|
||||
|
||||
<rect class="admin" x="70" y="830" width="350" height="120" rx="8" />
|
||||
<circle class="num-prep" cx="102" cy="862" r="18" />
|
||||
<text class="stepno" x="96" y="869">4</text>
|
||||
<text class="box-title" x="132" y="858">Optional: Transformationen</text>
|
||||
<text class="small" x="132" y="882">Admin -> Transformationen</text>
|
||||
<text class="small" x="132" y="900">nur ändern, wenn Feld-/Währungslogik bekannt ist</text>
|
||||
<text class="small" x="132" y="918">bestehende Regeln nicht spontan löschen</text>
|
||||
<text class="small" x="132" y="936">Änderung danach mit Einzelstandort testen</text>
|
||||
|
||||
<rect class="check" x="70" y="985" width="350" height="145" rx="8" />
|
||||
<circle class="num-check" cx="102" cy="1017" r="18" />
|
||||
<text class="stepno" x="96" y="1024">5</text>
|
||||
<text class="box-title" x="132" y="1013">Vor dem Lauf kurz prüfen</text>
|
||||
<text class="small" x="132" y="1037">Sind die richtigen Standorte aktiv?</text>
|
||||
<text class="small" x="132" y="1055">Sind manuelle Dateien aktuell?</text>
|
||||
<text class="small" x="132" y="1073">Ist Datum-Filter korrekt?</text>
|
||||
<text class="small" x="132" y="1091">SharePoint Upload gewünscht und konfiguriert?</text>
|
||||
<text class="small" x="132" y="1109">Bei Unsicherheit zuerst Einzelstandort ausführen</text>
|
||||
|
||||
<!-- Run steps -->
|
||||
<rect class="run" x="510" y="310" width="350" height="125" rx="8" />
|
||||
<circle class="num-run" cx="542" cy="342" r="18" />
|
||||
<text class="stepno" x="536" y="349">6</text>
|
||||
<text class="box-title" x="572" y="338">Einzelstandort exportieren</text>
|
||||
<text class="small" x="572" y="362">Export Dashboard öffnen</text>
|
||||
<text class="small" x="572" y="380">Land/Standort starten</text>
|
||||
<text class="small" x="572" y="398">Statusmeldungen beobachten</text>
|
||||
<text class="small" x="572" y="416">bei Manual Excel wird Datei gelesen und gespeichert</text>
|
||||
|
||||
<rect class="run" x="510" y="470" width="350" height="135" rx="8" />
|
||||
<circle class="num-run" cx="542" cy="502" r="18" />
|
||||
<text class="stepno" x="536" y="509">7</text>
|
||||
<text class="box-title" x="572" y="498">Was beim Standortexport passiert</text>
|
||||
<text class="small" x="572" y="522">Quelle wird gelesen: HANA, SAP OData oder Excel/CSV</text>
|
||||
<text class="small" x="572" y="540">Mapping/Transformationen werden angewendet</text>
|
||||
<text class="small" x="572" y="558">CentralSalesRecords für diesen Standort wird ersetzt</text>
|
||||
<text class="small" x="572" y="576">Standortdatei und Logs werden geschrieben</text>
|
||||
<text class="small" x="572" y="594">optional SharePoint Upload</text>
|
||||
|
||||
<rect class="run" x="510" y="640" width="350" height="120" rx="8" />
|
||||
<circle class="num-run" cx="542" cy="672" r="18" />
|
||||
<text class="stepno" x="536" y="679">8</text>
|
||||
<text class="box-title" x="572" y="668">Alle Standorte exportieren</text>
|
||||
<text class="small" x="572" y="692">nur verwenden, wenn aktive Standorte bereit sind</text>
|
||||
<text class="small" x="572" y="710">läuft Standort für Standort</text>
|
||||
<text class="small" x="572" y="728">danach wird zentrale Excel automatisch erzeugt</text>
|
||||
<text class="small" x="572" y="746">bei Fehler: Logs prüfen und Einzelstandort wiederholen</text>
|
||||
|
||||
<rect class="output" x="510" y="795" width="350" height="130" rx="8" />
|
||||
<circle class="num-run" cx="542" cy="827" r="18" />
|
||||
<text class="stepno" x="536" y="834">9</text>
|
||||
<text class="box-title" x="572" y="823">Zentrale Excel erzeugen</text>
|
||||
<text class="small" x="572" y="847">Button zentrale Datei / konsolidierter Export</text>
|
||||
<text class="small" x="572" y="865">liest alle CentralSalesRecords</text>
|
||||
<text class="small" x="572" y="883">erstellt Sales_All_yyyy-MM-dd.xlsx</text>
|
||||
<text class="small" x="572" y="901">enthält Blatt Sales und Finance Filter Hilfe</text>
|
||||
|
||||
<rect class="output" x="510" y="960" width="350" height="150" rx="8" />
|
||||
<circle class="num-run" cx="542" cy="992" r="18" />
|
||||
<text class="stepno" x="531" y="999">10</text>
|
||||
<text class="box-title" x="572" y="988">Endexcel richtig filtern</text>
|
||||
<text class="small" x="572" y="1012">Blatt Sales verwenden</text>
|
||||
<text class="small" x="572" y="1030">Finance | Year = gewünschtes Jahr</text>
|
||||
<text class="small" x="572" y="1048">Finance | Country Key = Land, z.B. IT oder DE</text>
|
||||
<text class="small" x="572" y="1066">Finance | Include = TRUE</text>
|
||||
<text class="small" x="572" y="1084">Finance | Net Sales Actual summieren</text>
|
||||
|
||||
<!-- Check steps -->
|
||||
<rect class="check" x="950" y="310" width="350" height="125" rx="8" />
|
||||
<circle class="num-check" cx="982" cy="342" r="18" />
|
||||
<text class="stepno" x="976" y="349">11</text>
|
||||
<text class="box-title" x="1012" y="338">Soll/Ist Vergleich öffnen</text>
|
||||
<text class="small" x="1012" y="362">Finance Cockpit -> Soll/Ist Vergleich</text>
|
||||
<text class="small" x="1012" y="380">Jahr 2025 prüfen</text>
|
||||
<text class="small" x="1012" y="398">Spalten: Ist, Soll, Differenz, Währung</text>
|
||||
<text class="small" x="1012" y="416">Status OK/Prüfen beachten</text>
|
||||
|
||||
<rect class="check" x="950" y="470" width="350" height="140" rx="8" />
|
||||
<circle class="num-check" cx="982" cy="502" r="18" />
|
||||
<text class="stepno" x="976" y="509">12</text>
|
||||
<text class="box-title" x="1012" y="498">Management Analyse nutzen</text>
|
||||
<text class="small" x="1012" y="522">für Plausibilität je Land/Jahr/Monat</text>
|
||||
<text class="small" x="1012" y="540">Summenfeld bewusst wählen</text>
|
||||
<text class="small" x="1012" y="558">zentrale Roh-Auswertung arbeitet auf CentralSalesRecords</text>
|
||||
<text class="small" x="1012" y="576">bei Einzeldatei: Land/TSC Filter übernehmen</text>
|
||||
<text class="small" x="1012" y="594">keine fachliche Freigabe nur aus Rohsummen ableiten</text>
|
||||
|
||||
<rect class="check" x="950" y="645" width="350" height="150" rx="8" />
|
||||
<circle class="num-check" cx="982" cy="677" r="18" />
|
||||
<text class="stepno" x="976" y="684">13</text>
|
||||
<text class="box-title" x="1012" y="673">Länderspezifische Prüfpunkte</text>
|
||||
<text class="small" x="1012" y="697">IT: Trafag Italia ausgeschlossen</text>
|
||||
<text class="small" x="1012" y="715">IT: doppelte Zeilen ohne Supplier country nur einmal</text>
|
||||
<text class="small" x="1012" y="733">DE: Alphaplan, Kundenländer noch fachlich offen</text>
|
||||
<text class="small" x="1012" y="751">UK/ES: Sage-Dateien, Gutschriften negativ</text>
|
||||
<text class="small" x="1012" y="769">CH/AT: SAP OData DACH-Abgrenzung</text>
|
||||
|
||||
<rect class="check" x="950" y="830" width="350" height="125" rx="8" />
|
||||
<circle class="num-check" cx="982" cy="862" r="18" />
|
||||
<text class="stepno" x="976" y="869">14</text>
|
||||
<text class="box-title" x="1012" y="858">Excel gegen Cockpit abgleichen</text>
|
||||
<text class="small" x="1012" y="882">Endexcel: Finance-Spalten filtern</text>
|
||||
<text class="small" x="1012" y="900">Soll/Ist Vergleich: gleiche Land/Jahr-Sicht</text>
|
||||
<text class="small" x="1012" y="918">Summen sollten gleich sein</text>
|
||||
<text class="small" x="1012" y="936">Abweichung dokumentieren, nicht manuell korrigieren</text>
|
||||
|
||||
<rect class="output" x="950" y="990" width="350" height="120" rx="8" />
|
||||
<circle class="num-check" cx="982" cy="1022" r="18" />
|
||||
<text class="stepno" x="976" y="1029">15</text>
|
||||
<text class="box-title" x="1012" y="1018">Freigabe vorbereiten</text>
|
||||
<text class="small" x="1012" y="1042">zentrale Excel ablegen/teilen</text>
|
||||
<text class="small" x="1012" y="1060">offene Länder markieren</text>
|
||||
<text class="small" x="1012" y="1078">Finance-Leiter entscheidet fachliche Regel</text>
|
||||
<text class="small" x="1012" y="1096">erst danach Regel fixieren</text>
|
||||
|
||||
<!-- Issue lane -->
|
||||
<rect class="issue" x="1390" y="310" width="340" height="125" rx="8" />
|
||||
<circle class="num-issue" cx="1422" cy="342" r="18" />
|
||||
<text class="stepno" x="1416" y="349">16</text>
|
||||
<text class="box-title" x="1452" y="338">Wenn Export fehlschlägt</text>
|
||||
<text class="small" x="1452" y="362">Logs öffnen</text>
|
||||
<text class="small" x="1452" y="380">technische Fehlermeldung kopieren</text>
|
||||
<text class="small" x="1452" y="398">bei Manual Excel: Pfad/Datei/Mapping prüfen</text>
|
||||
<text class="small" x="1452" y="416">bei SAP/HANA: Verbindung/Schema/EntitySet prüfen</text>
|
||||
|
||||
<rect class="issue" x="1390" y="470" width="340" height="140" rx="8" />
|
||||
<circle class="num-issue" cx="1422" cy="502" r="18" />
|
||||
<text class="stepno" x="1416" y="509">17</text>
|
||||
<text class="box-title" x="1452" y="498">Wenn zentrale Excel fehlt</text>
|
||||
<text class="small" x="1452" y="522">prüfen, ob CentralSalesRecords vorhanden sind</text>
|
||||
<text class="small" x="1452" y="540">mindestens ein Standort muss erfolgreich gelaufen sein</text>
|
||||
<text class="small" x="1452" y="558">lokaler zentraler Pfad in Settings prüfen</text>
|
||||
<text class="small" x="1452" y="576">SharePoint Upload separat von lokaler Erzeugung prüfen</text>
|
||||
<text class="small" x="1452" y="594">Logs und AppEventLogs lesen</text>
|
||||
|
||||
<rect class="issue" x="1390" y="645" width="340" height="150" rx="8" />
|
||||
<circle class="num-issue" cx="1422" cy="677" r="18" />
|
||||
<text class="stepno" x="1416" y="684">18</text>
|
||||
<text class="box-title" x="1452" y="673">Wenn Soll/Ist nicht passt</text>
|
||||
<text class="small" x="1452" y="697">nicht direkt Code oder Excel manuell ändern</text>
|
||||
<text class="small" x="1452" y="715">Quelle, Filter, Datum, Währung prüfen</text>
|
||||
<text class="small" x="1452" y="733">Landesspezifische Regeln dokumentieren</text>
|
||||
<text class="small" x="1452" y="751">Finance-Leiter um Bestätigung bitten</text>
|
||||
<text class="small" x="1452" y="769">erst danach Mapping/Regel produktiv anpassen</text>
|
||||
|
||||
<rect class="admin" x="1390" y="830" width="340" height="125" rx="8" />
|
||||
<circle class="num-issue" cx="1422" cy="862" r="18" />
|
||||
<text class="stepno" x="1416" y="869">19</text>
|
||||
<text class="box-title" x="1452" y="858">Betrieb / Server</text>
|
||||
<text class="small" x="1452" y="882">IIS 500: Serveradmin/Event Viewer</text>
|
||||
<text class="small" x="1452" y="900">.NET 8 Hosting Bundle prüfen</text>
|
||||
<text class="small" x="1452" y="918">App Pool Rechte auf DB/logs prüfen</text>
|
||||
<text class="small" x="1452" y="936">Microsoft Excel ist auf Server nicht nötig</text>
|
||||
|
||||
<rect class="output" x="1390" y="990" width="340" height="120" rx="8" />
|
||||
<circle class="num-issue" cx="1422" cy="1022" r="18" />
|
||||
<text class="stepno" x="1416" y="1029">20</text>
|
||||
<text class="box-title" x="1452" y="1018">Monats-/Jahresabschluss</text>
|
||||
<text class="small" x="1452" y="1042">Exportdatum und Dateiversion notieren</text>
|
||||
<text class="small" x="1452" y="1060">offene Länder in Mail/Teams aufführen</text>
|
||||
<text class="small" x="1452" y="1078">freigegebene Regeln nicht rückwirkend überschreiben</text>
|
||||
<text class="small" x="1452" y="1096">neue Fachentscheide nachdokumentieren</text>
|
||||
|
||||
<!-- Arrows between lanes -->
|
||||
<path class="line" d="M420 370 H510" />
|
||||
<path class="line" d="M420 537 H510" />
|
||||
<path class="line" d="M420 720 H510" />
|
||||
<path class="line" d="M860 700 H950" />
|
||||
<path class="line" d="M860 860 H950" />
|
||||
<path class="line" d="M1300 372 H1390" />
|
||||
<path class="line" d="M1300 535 H1390" />
|
||||
<path class="line" d="M1300 705 H1390" />
|
||||
<path class="line-soft dash" d="M1125 1110 V1185 H250 V1130" />
|
||||
|
||||
<!-- Bottom checklists -->
|
||||
<rect class="lane" x="40" y="1285" width="1720" height="120" rx="8" />
|
||||
<text class="section" x="60" y="1315">Keyuser-Merksatz und offene Fachpunkte</text>
|
||||
<text class="txt" x="60" y="1342">Nie direkt Rohspalten wie `Sales Price/Value`, `Document Total LC` oder lokale Excel-Summen vergleichen, wenn es um CFO/Finance geht. Fuer den Abgleich immer `Soll/Ist Vergleich` oder im Endexcel die `Finance | ...`-Spalten nutzen.</text>
|
||||
<text class="small" x="60" y="1368">DE offen: Alphaplan liefert `NettoPreisGesamtX`, aber Kundenländer/Filter müssen von Munir/Finance bestätigt werden. IT bestätigt: Trafag Italia ausschliessen und Blank-Supplier-Dubletten nur einmal zählen.</text>
|
||||
<text class="small" x="60" y="1392">Bei Fehlern: Screenshot/Fehlertext, betroffener Standort, Uhrzeit, Datei/Pfad und letzter Schritt notieren. Danach Logs prüfen und erst dann technische Anpassung beauftragen.</text>
|
||||
|
||||
<!-- Legend -->
|
||||
<rect class="prep" x="60" y="1420" width="22" height="16" rx="3" />
|
||||
<text class="tiny" x="90" y="1433">Vorbereitung</text>
|
||||
<rect class="run" x="190" y="1420" width="22" height="16" rx="3" />
|
||||
<text class="tiny" x="220" y="1433">Ausführen</text>
|
||||
<rect class="check" x="300" y="1420" width="22" height="16" rx="3" />
|
||||
<text class="tiny" x="330" y="1433">Prüfen</text>
|
||||
<rect class="issue" x="395" y="1420" width="22" height="16" rx="3" />
|
||||
<text class="tiny" x="425" y="1433">Fehler/Fachentscheid</text>
|
||||
<text class="tiny" x="1440" y="1433">Quelle: App-Navigation, Services und aktuelle Finance-Doku, Stand 2026-05-20</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 18 KiB |
@@ -0,0 +1,285 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1800" height="1400" viewBox="0 0 1800 1400">
|
||||
<defs>
|
||||
<style>
|
||||
.bg { fill: #f6f7f9; }
|
||||
.title { font: 700 34px Arial, sans-serif; fill: #111827; }
|
||||
.subtitle { font: 400 16px Arial, sans-serif; fill: #4b5563; }
|
||||
.section { font: 700 18px Arial, sans-serif; fill: #111827; }
|
||||
.box-title { font: 700 15px Arial, sans-serif; fill: #111827; }
|
||||
.txt { font: 400 13px Arial, sans-serif; fill: #1f2937; }
|
||||
.small { font: 400 12px Arial, sans-serif; fill: #4b5563; }
|
||||
.tiny { font: 400 11px Arial, sans-serif; fill: #4b5563; }
|
||||
.pill { font: 700 12px Arial, sans-serif; fill: #374151; }
|
||||
.layer { fill: #ffffff; stroke: #d1d5db; stroke-width: 1.2; }
|
||||
.ui { fill: #e8f2ff; stroke: #2563eb; stroke-width: 1.4; }
|
||||
.service { fill: #f0ecff; stroke: #6d28d9; stroke-width: 1.4; }
|
||||
.data { fill: #eaf8ef; stroke: #15803d; stroke-width: 1.4; }
|
||||
.external { fill: #fff7ed; stroke: #ea580c; stroke-width: 1.4; }
|
||||
.security { fill: #fff1f2; stroke: #be123c; stroke-width: 1.4; }
|
||||
.output { fill: #eef2ff; stroke: #4338ca; stroke-width: 1.4; }
|
||||
.note { fill: #fffbeb; stroke: #d97706; stroke-width: 1.2; }
|
||||
.line { stroke: #374151; stroke-width: 1.5; fill: none; marker-end: url(#arrow); }
|
||||
.line-soft { stroke: #6b7280; stroke-width: 1.2; fill: none; marker-end: url(#arrowSoft); }
|
||||
.line-green { stroke: #15803d; stroke-width: 1.5; fill: none; marker-end: url(#arrowGreen); }
|
||||
.line-orange { stroke: #ea580c; stroke-width: 1.5; fill: none; marker-end: url(#arrowOrange); }
|
||||
.dash { stroke-dasharray: 6 5; }
|
||||
</style>
|
||||
<marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse">
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" fill="#374151" />
|
||||
</marker>
|
||||
<marker id="arrowSoft" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse">
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" fill="#6b7280" />
|
||||
</marker>
|
||||
<marker id="arrowGreen" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse">
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" fill="#15803d" />
|
||||
</marker>
|
||||
<marker id="arrowOrange" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse">
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" fill="#ea580c" />
|
||||
</marker>
|
||||
</defs>
|
||||
|
||||
<rect class="bg" x="0" y="0" width="1800" height="1400" />
|
||||
<text class="title" x="48" y="58">TrafagSalesExporter / BiDashboard - technische Systemarchitektur</text>
|
||||
<text class="subtitle" x="50" y="86">Stand 2026-05-20 | Produktive Applikation ohne Test-/Probeprogramme | ASP.NET Core Blazor Server, SQLite, SharePoint, SAP/HANA/OData/Manual Excel</text>
|
||||
|
||||
<rect class="layer" x="40" y="118" width="1720" height="90" rx="8" />
|
||||
<text class="section" x="60" y="148">Deployment und Laufzeit</text>
|
||||
<text class="txt" x="60" y="174">Fuehrendes Projekt: TrafagSalesExporter.csproj</text>
|
||||
<text class="txt" x="360" y="174">Publish-Ausgabe: BiDashboard.dll, keine EXE/AppHost</text>
|
||||
<text class="txt" x="770" y="174">IIS URL: https://trch-webapp-bidashboard.trafagch.local/BiDashboard/</text>
|
||||
<text class="txt" x="1270" y="174">Runtime: .NET 8 / ASP.NET Core Hosting Bundle</text>
|
||||
<text class="small" x="60" y="196">Publish-Ziel: \\trch-webapp-bidashboard.trafagch.local\BiDashboard$\ | web.config: dotnet .\BiDashboard.dll, stdout logs .\logs\stdout, out-of-process Diagnose</text>
|
||||
|
||||
<!-- Actors and hosting -->
|
||||
<rect class="external" x="70" y="250" width="210" height="78" rx="8" />
|
||||
<text class="box-title" x="92" y="276">Benutzer</text>
|
||||
<text class="small" x="92" y="298">Browser im Trafag-Netz</text>
|
||||
<text class="small" x="92" y="316">Finance / HR / Admin</text>
|
||||
|
||||
<rect class="security" x="340" y="236" width="250" height="110" rx="8" />
|
||||
<text class="box-title" x="362" y="262">Authentisierung</text>
|
||||
<text class="small" x="362" y="286">IIS / Windows Auth vorbereitet</text>
|
||||
<text class="small" x="362" y="304">AD-Rollen aktuell deaktivierbar</text>
|
||||
<text class="small" x="362" y="322">HR und Finance: eigene Logins</text>
|
||||
|
||||
<rect class="ui" x="650" y="226" width="470" height="135" rx="8" />
|
||||
<text class="box-title" x="672" y="252">Blazor Server UI</text>
|
||||
<text class="small" x="672" y="276">Dashboard / Export Dashboard</text>
|
||||
<text class="small" x="672" y="294">Finance Vergleich / Management Analyse</text>
|
||||
<text class="small" x="672" y="312">HR KPI</text>
|
||||
<text class="small" x="672" y="330">Admin: Standorte, Settings, Transformationen, Logs</text>
|
||||
|
||||
<rect class="service" x="1180" y="236" width="270" height="110" rx="8" />
|
||||
<text class="box-title" x="1202" y="262">Startup / Background</text>
|
||||
<text class="small" x="1202" y="286">DatabaseInitializationService</text>
|
||||
<text class="small" x="1202" y="304">DatabaseSchemaMaintenanceService</text>
|
||||
<text class="small" x="1202" y="322">TimerBackgroundService</text>
|
||||
|
||||
<rect class="data" x="1510" y="236" width="210" height="110" rx="8" />
|
||||
<text class="box-title" x="1532" y="262">SQLite</text>
|
||||
<text class="small" x="1532" y="286">trafag_exporter.db</text>
|
||||
<text class="small" x="1532" y="304">WAL/SHM auf Server</text>
|
||||
<text class="small" x="1532" y="322">App-Pool braucht Modify</text>
|
||||
|
||||
<path class="line" d="M280 289 H340" />
|
||||
<path class="line" d="M590 289 H650" />
|
||||
<path class="line" d="M1120 292 H1180" />
|
||||
<path class="line-green" d="M1450 292 H1510" />
|
||||
|
||||
<!-- Main application services -->
|
||||
<rect class="layer" x="40" y="400" width="1720" height="325" rx="8" />
|
||||
<text class="section" x="60" y="430">Applikationskern und Services</text>
|
||||
|
||||
<rect class="service" x="80" y="470" width="260" height="105" rx="8" />
|
||||
<text class="box-title" x="102" y="496">ExportOrchestrationService</text>
|
||||
<text class="small" x="102" y="520">Startet Einzel-/Alle-Exporte</text>
|
||||
<text class="small" x="102" y="538">Status fuer UI und Timer</text>
|
||||
<text class="small" x="102" y="556">Schreibt ExportLogs</text>
|
||||
|
||||
<rect class="service" x="390" y="470" width="260" height="105" rx="8" />
|
||||
<text class="box-title" x="412" y="496">SiteExportService</text>
|
||||
<text class="small" x="412" y="520">Quelle je Standort aufloesen</text>
|
||||
<text class="small" x="412" y="538">Adapter ausfuehren</text>
|
||||
<text class="small" x="412" y="556">Lokale/SharePoint-Ausgabe</text>
|
||||
|
||||
<rect class="service" x="700" y="470" width="285" height="105" rx="8" />
|
||||
<text class="box-title" x="722" y="496">DataSourceAdapterResolver</text>
|
||||
<text class="small" x="722" y="520">ConnectionKind entscheidet</text>
|
||||
<text class="small" x="722" y="538">HANA / SAP Gateway / Manual Excel</text>
|
||||
<text class="small" x="722" y="556">einheitliches SalesRecord-Modell</text>
|
||||
|
||||
<rect class="service" x="1035" y="470" width="285" height="105" rx="8" />
|
||||
<text class="box-title" x="1057" y="496">Transformationen</text>
|
||||
<text class="small" x="1057" y="520">RecordTransformationService</text>
|
||||
<text class="small" x="1057" y="538">TransformationCatalog</text>
|
||||
<text class="small" x="1057" y="556">Copy, Replace, Currency, FirstNonEmpty</text>
|
||||
|
||||
<rect class="service" x="1370" y="470" width="285" height="105" rx="8" />
|
||||
<text class="box-title" x="1392" y="496">CentralSalesRecordService</text>
|
||||
<text class="small" x="1392" y="520">Standortdaten ersetzen</text>
|
||||
<text class="small" x="1392" y="538">Batch Insert in CentralSalesRecords</text>
|
||||
<text class="small" x="1392" y="556">Grundlage fuer Cockpits und Endexcel</text>
|
||||
|
||||
<path class="line" d="M340 522 H390" />
|
||||
<path class="line" d="M650 522 H700" />
|
||||
<path class="line" d="M985 522 H1035" />
|
||||
<path class="line-green" d="M1320 522 H1370" />
|
||||
<path class="line-green" d="M1512 575 V640 H1615 V346" />
|
||||
|
||||
<rect class="service" x="80" y="610" width="260" height="80" rx="8" />
|
||||
<text class="box-title" x="102" y="636">ConsolidatedExportService</text>
|
||||
<text class="small" x="102" y="660">Sales_All_yyyy-MM-dd.xlsx</text>
|
||||
<text class="small" x="102" y="678">zentraler Export aus CentralSalesRecords</text>
|
||||
|
||||
<rect class="service" x="390" y="610" width="260" height="80" rx="8" />
|
||||
<text class="box-title" x="412" y="636">ExcelExportService</text>
|
||||
<text class="small" x="412" y="660">Standortdateien und Endexcel</text>
|
||||
<text class="small" x="412" y="678">Finance-Spalten + Hilfe-Blatt</text>
|
||||
|
||||
<rect class="service" x="700" y="610" width="285" height="80" rx="8" />
|
||||
<text class="box-title" x="722" y="636">FinanceReconciliationService</text>
|
||||
<text class="small" x="722" y="660">Soll/Ist gegen FinanceReferences</text>
|
||||
<text class="small" x="722" y="678">Landeslogiken: IT, UK, ES, DE vorbereitet</text>
|
||||
|
||||
<rect class="service" x="1035" y="610" width="285" height="80" rx="8" />
|
||||
<text class="box-title" x="1057" y="636">ManagementCockpitService</text>
|
||||
<text class="small" x="1057" y="660">Analysen aus Einzeldateien</text>
|
||||
<text class="small" x="1057" y="678">Analysen aus CentralSalesRecords</text>
|
||||
|
||||
<rect class="service" x="1370" y="610" width="285" height="80" rx="8" />
|
||||
<text class="box-title" x="1392" y="636">HR KPI Services</text>
|
||||
<text class="small" x="1392" y="660">HrKpiService + AccessService</text>
|
||||
<text class="small" x="1392" y="678">liest HR-Excel-Dateien aus konfiguriertem Ordner</text>
|
||||
|
||||
<path class="line-soft" d="M144 575 V610" />
|
||||
<path class="line-soft" d="M520 575 V610" />
|
||||
<path class="line-soft" d="M842 575 V610" />
|
||||
<path class="line-soft" d="M1177 575 V610" />
|
||||
|
||||
<!-- Sources -->
|
||||
<rect class="layer" x="40" y="760" width="1720" height="260" rx="8" />
|
||||
<text class="section" x="60" y="790">Datenquellen und Adapter</text>
|
||||
|
||||
<rect class="external" x="80" y="830" width="270" height="120" rx="8" />
|
||||
<text class="box-title" x="102" y="856">SAP HANA / BI1 / SAGE</text>
|
||||
<text class="small" x="102" y="880">HanaQueryService</text>
|
||||
<text class="small" x="102" y="898">HanaDataSourceAdapter</text>
|
||||
<text class="small" x="102" y="916">FR/IT/US B1, IN SAGE/HANA</text>
|
||||
<text class="small" x="102" y="934">Schema je Standort</text>
|
||||
|
||||
<rect class="external" x="410" y="830" width="270" height="120" rx="8" />
|
||||
<text class="box-title" x="432" y="856">SAP Gateway / OData</text>
|
||||
<text class="small" x="432" y="880">SapGatewayService</text>
|
||||
<text class="small" x="432" y="898">SapCompositionService</text>
|
||||
<text class="small" x="432" y="916">Quellen, Joins, Feldmappings</text>
|
||||
<text class="small" x="432" y="934">CH/AT ZSCHWEIZ</text>
|
||||
|
||||
<rect class="external" x="740" y="830" width="300" height="120" rx="8" />
|
||||
<text class="box-title" x="762" y="856">Manual Excel / CSV</text>
|
||||
<text class="small" x="762" y="880">ManualExcelImportService</text>
|
||||
<text class="small" x="762" y="898">lokal, UNC oder SharePoint Download</text>
|
||||
<text class="small" x="762" y="916">UK Sage, ES Sage CSV, DE Alphaplan</text>
|
||||
<text class="small" x="762" y="934">konfigurierbare Spaltenmappings</text>
|
||||
|
||||
<rect class="external" x="1100" y="830" width="270" height="120" rx="8" />
|
||||
<text class="box-title" x="1122" y="856">SharePoint / Graph</text>
|
||||
<text class="small" x="1122" y="880">SharePointUploadService</text>
|
||||
<text class="small" x="1122" y="898">Upload Standort-/Zentraldateien</text>
|
||||
<text class="small" x="1122" y="916">Download Manual Imports</text>
|
||||
<text class="small" x="1122" y="934">ClientId/TenantId/Secret aus Settings</text>
|
||||
|
||||
<rect class="output" x="1430" y="830" width="270" height="120" rx="8" />
|
||||
<text class="box-title" x="1452" y="856">Dateisystem / Output</text>
|
||||
<text class="small" x="1452" y="880">lokaler Standardpfad ./output</text>
|
||||
<text class="small" x="1452" y="898">optionale Standort-/Zentralpfade</text>
|
||||
<text class="small" x="1452" y="916">Sales_TRxx_yyyy-MM-dd.xlsx</text>
|
||||
<text class="small" x="1452" y="934">Sales_All_yyyy-MM-dd.xlsx</text>
|
||||
|
||||
<path class="line-orange" d="M350 890 H700" />
|
||||
<path class="line-orange" d="M680 890 H740" />
|
||||
<path class="line-orange" d="M1040 890 H1100" />
|
||||
<path class="line-orange" d="M1370 890 H1430" />
|
||||
<path class="line-soft dash" d="M890 830 V720" />
|
||||
<path class="line-soft dash" d="M1215 830 V690" />
|
||||
|
||||
<!-- Data model -->
|
||||
<rect class="layer" x="40" y="1055" width="1055" height="285" rx="8" />
|
||||
<text class="section" x="60" y="1085">Persistenzmodell SQLite - wichtigste Tabellen</text>
|
||||
|
||||
<rect class="data" x="70" y="1120" width="230" height="88" rx="8" />
|
||||
<text class="box-title" x="92" y="1146">Sites</text>
|
||||
<text class="small" x="92" y="1168">Standorte, TSC, Land</text>
|
||||
<text class="small" x="92" y="1186">SourceSystem, ManualImportFilePath</text>
|
||||
|
||||
<rect class="data" x="330" y="1120" width="230" height="88" rx="8" />
|
||||
<text class="box-title" x="352" y="1146">SourceSystemDefinitions</text>
|
||||
<text class="small" x="352" y="1168">ConnectionKind</text>
|
||||
<text class="small" x="352" y="1186">SAP / BI1 / SAGE / MANUAL_EXCEL</text>
|
||||
|
||||
<rect class="data" x="590" y="1120" width="230" height="88" rx="8" />
|
||||
<text class="box-title" x="612" y="1146">Mappings</text>
|
||||
<text class="small" x="612" y="1168">SapSource/Join/FieldMappings</text>
|
||||
<text class="small" x="612" y="1186">ManualExcelColumnMappings</text>
|
||||
|
||||
<rect class="data" x="850" y="1120" width="215" height="88" rx="8" />
|
||||
<text class="box-title" x="872" y="1146">CentralSalesRecords</text>
|
||||
<text class="small" x="872" y="1168">normalisierte SalesRecord-Zeilen</text>
|
||||
<text class="small" x="872" y="1186">Basis fuer Endexcel/Cockpit</text>
|
||||
|
||||
<rect class="data" x="70" y="1230" width="230" height="78" rx="8" />
|
||||
<text class="box-title" x="92" y="1256">ExportSettings</text>
|
||||
<text class="small" x="92" y="1278">Datumfilter, Timer, Pfade</text>
|
||||
<text class="small" x="92" y="1296">Debug Live-Logging</text>
|
||||
|
||||
<rect class="data" x="330" y="1230" width="230" height="78" rx="8" />
|
||||
<text class="box-title" x="352" y="1256">SharePointConfigs</text>
|
||||
<text class="small" x="352" y="1278">SiteUrl, ExportFolder</text>
|
||||
<text class="small" x="352" y="1296">Tenant/Client/Secret</text>
|
||||
|
||||
<rect class="data" x="590" y="1230" width="230" height="78" rx="8" />
|
||||
<text class="box-title" x="612" y="1256">Finance-Tabellen</text>
|
||||
<text class="small" x="612" y="1278">FinanceReferences</text>
|
||||
<text class="small" x="612" y="1296">BudgetRates, IntercompanyRules</text>
|
||||
|
||||
<rect class="data" x="850" y="1230" width="215" height="78" rx="8" />
|
||||
<text class="box-title" x="872" y="1256">Logs</text>
|
||||
<text class="small" x="872" y="1278">AppEventLogs</text>
|
||||
<text class="small" x="872" y="1296">ExportLogs</text>
|
||||
|
||||
<!-- Operational notes -->
|
||||
<rect class="layer" x="1130" y="1055" width="630" height="285" rx="8" />
|
||||
<text class="section" x="1150" y="1085">Betrieb, Security, fachliche Besonderheiten</text>
|
||||
|
||||
<rect class="security" x="1160" y="1120" width="270" height="86" rx="8" />
|
||||
<text class="box-title" x="1182" y="1146">Zugriff</text>
|
||||
<text class="small" x="1182" y="1168">Security.Enabled steuert globale AD-Policy</text>
|
||||
<text class="small" x="1182" y="1186">Finance/HR Cockpit eigene Passwortsperren</text>
|
||||
|
||||
<rect class="note" x="1460" y="1120" width="270" height="86" rx="8" />
|
||||
<text class="box-title" x="1482" y="1146">Serveranforderungen</text>
|
||||
<text class="small" x="1482" y="1168">.NET 8 Hosting Bundle</text>
|
||||
<text class="small" x="1482" y="1186">kein Microsoft Excel noetig</text>
|
||||
|
||||
<rect class="note" x="1160" y="1230" width="270" height="86" rx="8" />
|
||||
<text class="box-title" x="1182" y="1256">Finance-Sonderregeln</text>
|
||||
<text class="small" x="1182" y="1278">IT: Trafag Italia ausgeschlossen</text>
|
||||
<text class="small" x="1182" y="1296">DE: Alphaplan provisorisch vorbereitet</text>
|
||||
|
||||
<rect class="note" x="1460" y="1230" width="270" height="86" rx="8" />
|
||||
<text class="box-title" x="1482" y="1256">IIS Diagnose</text>
|
||||
<text class="small" x="1482" y="1278">diag.txt beweist korrekten Pfad</text>
|
||||
<text class="small" x="1482" y="1296">Event Viewer bei 500 pruefen</text>
|
||||
|
||||
<!-- Legend -->
|
||||
<rect class="ui" x="60" y="1355" width="22" height="16" rx="3" />
|
||||
<text class="tiny" x="90" y="1368">UI</text>
|
||||
<rect class="service" x="145" y="1355" width="22" height="16" rx="3" />
|
||||
<text class="tiny" x="175" y="1368">Service</text>
|
||||
<rect class="data" x="255" y="1355" width="22" height="16" rx="3" />
|
||||
<text class="tiny" x="285" y="1368">SQLite/Persistenz</text>
|
||||
<rect class="external" x="415" y="1355" width="22" height="16" rx="3" />
|
||||
<text class="tiny" x="445" y="1368">externes System</text>
|
||||
<rect class="security" x="585" y="1355" width="22" height="16" rx="3" />
|
||||
<text class="tiny" x="615" y="1368">Security/Betrieb</text>
|
||||
<text class="tiny" x="1470" y="1368">Quelle: Codebasis TrafagSalesExporter, Stand 2026-05-20</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 16 KiB |
Reference in New Issue
Block a user