Changes for page BMD NLZ-Zulagen Import
Last modified by Claude MCP Bot on 2026/06/23 21:14
From version 1.1
edited by Dimitri Rupp
on 2026/06/11 11:10
on 2026/06/11 11:10
Change comment:
There is no comment for this version
To version 8.1
edited by Maximilian Petru
on 2026/06/22 09:15
on 2026/06/22 09:15
Change comment:
There is no comment for this version
Summary
-
Page properties (3 modified, 0 added, 0 removed)
-
Attachments (0 modified, 5 added, 0 removed)
Details
- Page properties
-
- Author
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. drupp1 +XWiki.petrum - Tags
-
... ... @@ -1,0 +1,1 @@ 1 +anleitung - Content
-
... ... @@ -1,10 +1,24 @@ 1 -<p>BMD NLZ-Zulagen Import – Prozessdokumentation</p><p><strong>BMD NLZ-Zulagen Import</strong></p><p>Prozessdokumentation</p><table><tr><td> </td><td> </td></tr><tr><td>Version</td><td>1.4</td></tr><tr><td>Erstellt am</td><td>2026-05-22</td></tr><tr><td>Erstellt von</td><td>Patrick Sonderegger</td></tr><tr><td>Workspace</td><td>Fabric / 08_Data for Sharing / BMD NLZ-Zulagen Import</td></tr><tr><td>Status</td><td>Aktiv</td></tr></table><div><p> </p></div><div><p> </p></div><h1 id="H1.DCberblick" class="wikigeneratedid"><span><strong>1. Überblick</strong></span></h1><p>Dieser Prozess liest täglich CSV-Dateien (NLZ und Zulagen) sowie ein Excel-File (Kantine) von einem Windows-Fileserver ein, transformiert sie gemäss definierten Geschäftsregeln und legt die verarbeiteten Dateien wieder auf dem Fileserver ab. Die Output-Files heissen fix ntcsNLZ.csv, ntcsZulagen.csv und Importdatei Kantine.csv. Das Kantine-File wird zusätzlich mit Firmendaten aus dem Lakehouse spl_gold_lh angereichert.</p><p>Der Prozess läuft vollautomatisch einmal täglich über Microsoft Fabric (Pipeline + Notebook) und ist über ein On-Premises Data Gateway mit dem Fileserver verbunden.</p><h1 id="H2.Prozessablauf" class="wikigeneratedid"><span><strong>2. Prozessablauf</strong></span></h1><h2 id="H2.1TE4glicherAblauf" class="wikigeneratedid"><span><strong>2.1 Täglicher Ablauf</strong></span></h2><ul><li>Die Pipeline wird automatisch gestartet (Scheduled Trigger)</li><li>NLZ-, Zulagen- und Kantine-Files werden vom Fileserver in das Fabric Lakehouse kopiert</li><li>Das Notebook transformiert die Files gemäss den Geschäftsregeln</li><li>Die transformierten Files werden zurück auf den Fileserver geschrieben</li><li>Die ursprünglichen Source-Files werden auf dem Fileserver archiviert und gelöscht</li><li>Zeilen für Firma 260 werden in die Output-Files ntcsNLZ.csv / ntcsZulagen.csv integriert</li><li>Ein Log-Protokoll wird im Lakehouse abgelegt</li></ul><h2 id="H2.2OrdnerstrukturFileserver" class="wikigeneratedid"><span><strong>2.2 Ordnerstruktur Fileserver</strong></span></h2><h3 id="HTest-Umgebung" class="wikigeneratedid"><span><strong>Test-Umgebung</strong></span></h3><table><tr><td><strong>Typ</strong></td><td><strong>Pfad</strong></td></tr><tr><td>NLZ Source</td><td>\\atvietfs01\daten\Orbyte_Testordner\NLZ\Rohdaten</td></tr><tr><td>NLZ Output</td><td>\\atvietfs01\daten\Orbyte_Testordner\NLZ</td></tr><tr><td>NLZ Archiv</td><td>\\atvietfs01\daten\Orbyte_Testordner\NLZ\Rohdaten\Archiv</td></tr><tr><td>Zulagen Source</td><td>\\atvietfs01\daten\Orbyte_Testordner\Zulagen\Rohdaten</td></tr><tr><td>Zulagen Output</td><td>\\atvietfs01\daten\Orbyte_Testordner\Zulagen</td></tr><tr><td>Zulagen Archiv</td><td>\\atvietfs01\daten\Orbyte_Testordner\Zulagen\Rohdaten\Archiv</td></tr></table><h3 id="HLive-Umgebung" class="wikigeneratedid"><span><strong>Live-Umgebung</strong></span></h3><table><tr><td><strong>Typ</strong></td><td><strong>Pfad</strong></td></tr><tr><td>NLZ Source</td><td>\\atvietfs01\daten\IT\BMD\BMD\LV\NLZ\Rohdaten</td></tr><tr><td>NLZ Output</td><td>\\atvietfs01\daten\IT\BMD\BMD\LV\NLZ</td></tr><tr><td>NLZ Archiv</td><td>\\atvietfs01\daten\IT\BMD\BMD\LV\NLZ\Rohdaten\Archiv</td></tr><tr><td>Zulagen Source</td><td>\\atvietfs01\daten\IT\BMD\BMD\LV\Zulagen\Rohdaten</td></tr><tr><td>Zulagen Output</td><td>\\atvietfs01\daten\IT\BMD\BMD\LV\Zulagen</td></tr><tr><td>Zulagen Archiv</td><td>\\atvietfs01\daten\IT\BMD\BMD\LV\Zulagen\Rohdaten\Archiv</td></tr></table><h2 id="H2.3OrdnerstrukturFabricLakehouse28shared_data_lh29" class="wikigeneratedid"><span><strong>2.3 Ordnerstruktur Fabric Lakehouse (shared_data_lh)</strong></span></h2><p>Files/</p><p>└── CSV_Transformation/</p><p>├── NLZ/</p><p>│ ├── Raw/ ← Eingang vom Fileserver</p><p>│ ├── Output/ ← Transformierte Files</p><p>│ └── Archive/ ← Archiv der Source-Files</p><p>├── Zulagen/</p><p>│ ├── Raw/</p><p>│ ├── Output/</p><p>│ └── Archive/</p><p>├── Kantine/</p><p>│ ├── Raw/ ← Eingang vom Fileserver</p><p>│ ├── Output/ ← Importdatei Kantine.csv (ohne Firma 78)</p><p>│ ├── Output_78/ ← Importdatei Kantine.csv (nur Firma 78)</p><p>│ ├── Fehlerhafte_Eintraege/ ← Zeilen mit fehlender PersonalNr oder Betrag</p><p>│ └── Archive/ ← Archiv der Source-Files</p><p>└── Logs/ ← Run-Protokolle und Summaries</p><h1 id="H3.Transformationsregeln" class="wikigeneratedid"><span><strong>3. Transformationsregeln</strong></span></h1><h2 id="H3.1Zulagen-Files" class="wikigeneratedid"><span><strong>3.1 Zulagen-Files</strong></span></h2><p><em>Erkennungsmerkmal: Dateiname enthält "Zulagen"</em></p><table><tr><td><strong>Bedingung</strong></td><td><strong>Spalte</strong></td><td><strong>Aktion</strong></td></tr><tr><td>Spalte D == 7590</td><td>F (idx 5)</td><td>Wert auf 1 setzen</td></tr><tr><td>Spalte D == 7590</td><td>G (idx 6)</td><td>Aktuellen Monat aus Spalte A (YYYYMMDD) als Zahl eintragen (z.B. April → 4)</td></tr><tr><td>Spalte D != 7590</td><td>—</td><td>Zeile bleibt unverändert</td></tr></table><h2 id="H3.2NLZ-Files" class="wikigeneratedid"><span><strong>3.2 NLZ-Files</strong></span></h2><p><em>Erkennungsmerkmal: Dateiname enthält "NLZ"</em></p><h3 id="HSchritt12013ZeilenlF6schen28SpalteD29" class="wikigeneratedid"><span><strong>Schritt 1 – Zeilen löschen (Spalte D)</strong></span></h3><table><tr><td><strong>Wert in Spalte D</strong></td><td><strong>Aktion</strong></td></tr><tr><td>3, 7, 8, 11, 16</td><td>Zeile löschen</td></tr></table><h3 id="HSchritt22013Werteersetzen28SpalteD29" class="wikigeneratedid"><span><strong>Schritt 2 – Werte ersetzen (Spalte D)</strong></span></h3><table><tr><td><strong>Ursprungswert</strong></td><td><strong>Neuer Wert</strong></td></tr><tr><td>4</td><td>1</td></tr><tr><td>6</td><td>2</td></tr><tr><td>9</td><td>3</td></tr></table><h3 id="HSchritt32013Spaltenneuanordnen" class="wikigeneratedid"><span><strong>Schritt 3 – Spalten neu anordnen</strong></span></h3><table><tr><td><strong>Output-Spalte</strong></td><td><strong>Quelle</strong></td></tr><tr><td>A</td><td>Source Spalte B</td></tr><tr><td>B</td><td>Source Spalte C</td></tr><tr><td>C</td><td>Source Spalte D (nach Ersetzung)</td></tr><tr><td>D</td><td>Fix-Wert 3</td></tr><tr><td>E</td><td>Source Spalte A (Datum)</td></tr><tr><td>F</td><td>Source Spalte A (Datum, dupliziert)</td></tr></table><h2 id="H3.3Firma-260-Integration" class="wikigeneratedid"><span><strong>3.3 Firma-260-Integration</strong></span></h2><table><tr><td><strong>Output-File</strong></td><td><strong>Filterkriterium</strong></td><td><strong>Änderung</strong></td></tr><tr><td>ntcsZulagen.csv</td><td>Spalte B (idx 1) == 70</td><td>Zeilen kopieren, Spalte B auf 260 setzen, ans Ende von ntcsZulagen.csv anhängen</td></tr><tr><td>ntcsNLZ.csv</td><td>Spalte A (idx 0) == 70</td><td>Zeilen kopieren, Spalte A auf 260 setzen, ans Ende von ntcsNLZ.csv anhängen</td></tr></table><h2 id="H3.4Kantine-File" class="wikigeneratedid"><span><strong>3.4 Kantine-File</strong></span></h2><p><em>Erkennungsmerkmal: Dateiendung .xlsx im Kantine/Raw-Ordner</em></p><table><tr><td><strong>Schritt</strong></td><td><strong>Beschreibung</strong></td></tr><tr><td>1. Filter: Firma „Rudi Schütz“</td><td>Zeilen mit Spalte Firma == „Rudi Schütz“ werden gelöscht</td></tr><tr><td>2. Filter: Personalnummer leer</td><td>Zeilen ohne Personalnummer (Spalte Vorname leer) werden übersprungen</td></tr><tr><td>3. Join mit sdmperson</td><td>Personalnummer wird mit spl_gold_lh.rimo.sdmperson (Spalte persid) gejoint. Resultat: getcompanyidorna</td></tr><tr><td>4. Folgemonat berechnen</td><td>Spalte Monat (Format MM/YYYY) wird um 1 Monat erhöht und als einfache Monatszahl ausgegeben. Beispiel: 04/2026 → 5</td></tr><tr><td>5. Output-Struktur</td><td>Spalte A: Monat (einfache Zahl, z.B. 5) | B: getcompanyidorna | C: Personalnummer | D: 2934 (fix) | E: Betrag (2 Dezimalstellen, Komma)</td></tr><tr><td>6. Firma-78-Split</td><td>Zeilen mit getcompanyidorna == 78 werden im Originalformat (Spalten: Firma | Kunde | PersonalNr | Nachname | Betrag | Monat) in ein separates File geschrieben (Kantine/Output_78 → FS: Kantine\Germany). Alle anderen Zeilen kommen transformiert in Kantine/Output.</td></tr><tr><td>7. Firma-260-Integration</td><td>Zeilen mit getcompanyidorna == 70 werden kopiert, Firma auf 260 geändert und ans Ende von Kantine/Output angehängt.</td></tr><tr><td>8. Fehlerhafte Einträge</td><td>Zeilen mit fehlender Personalnummer und/oder fehlendem Betrag werden aus dem Output entfernt und im Originalformat als „Fehlerhafte Eintraege.csv“ unter Kantine/Fehlerhafte_Eintraege gespeichert.</td></tr></table><h1 id="H4.TechnischeDokumentation" class="wikigeneratedid"><span><strong>4. Technische Dokumentation</strong></span></h1><h2 id="H4.1FabricKomponenten" class="wikigeneratedid"><span><strong>4.1 Fabric Komponenten</strong></span></h2><table><tr><td><strong>Komponente</strong></td><td><strong>Name</strong></td><td><strong>Typ</strong></td></tr><tr><td>Pipeline</td><td>Pipeline_CSV_Transform</td><td>Data Pipeline</td></tr><tr><td>Notebook</td><td>csv_transformation</td><td>Notebook (Python)</td></tr><tr><td>Lakehouse</td><td>shared_data_lh</td><td>Lakehouse</td></tr><tr><td>Gateway</td><td>SPL_Datagateway</td><td>On-Premises Data Gateway</td></tr></table><h2 id="H4.2Pipeline-ActivitiesimDetail" class="wikigeneratedid"><span><strong>4.2 Pipeline-Activities im Detail</strong></span></h2><table><tr><td><strong>Activity</strong></td><td><strong>Typ</strong></td><td><strong>Von</strong></td><td><strong>Nach</strong></td></tr><tr><td>Copy NLZ FS → Lakehouse</td><td>Copy data</td><td>FS: NLZ\Rohdaten\*.csv</td><td>Lakehouse: NLZ/Raw</td></tr><tr><td>Copy Zulagen FS → Lakehouse</td><td>Copy data</td><td>FS: Zulagen\Rohdaten\*.csv</td><td>Lakehouse: Zulagen/Raw</td></tr><tr><td>csv_transformation (Notebook)</td><td>Notebook</td><td>Lakehouse: NLZ/Raw + Zulagen/Raw</td><td>Lakehouse: NLZ/Output + Zulagen/Output</td></tr><tr><td>Copy NLZ Lakehouse → FS</td><td>Copy data</td><td>Lakehouse: NLZ/Output</td><td>FS: NLZ\</td></tr><tr><td>Copy Zulagen Lakehouse → FS</td><td>Copy data</td><td>Lakehouse: Zulagen/Output</td><td>FS: Zulagen\</td></tr><tr><td>Archive NLZ on FS</td><td>Copy data</td><td>FS: NLZ\Rohdaten\*.csv</td><td>FS: NLZ\Rohdaten\Archiv</td></tr><tr><td>Delete NLZ on FS</td><td>Delete data</td><td>FS: NLZ\Rohdaten\*.csv</td><td>—</td></tr><tr><td>Archive Zulagen on FS</td><td>Copy data</td><td>FS: Zulagen\Rohdaten\*.csv</td><td>FS: Zulagen\Rohdaten\Archiv</td></tr><tr><td>Delete Zulagen on FS</td><td>Delete data</td><td>FS: Zulagen\Rohdaten\*.csv</td><td>—</td></tr><tr><td>Copy Kantine FS → Lakehouse</td><td>Copy data</td><td>FS: Kantine\Rohdaten\*.xlsx</td><td>Lakehouse: Kantine/Raw</td></tr><tr><td>Copy Kantine Lakehouse → FS</td><td>Copy data</td><td>Lakehouse: Kantine/Output</td><td>FS: Kantine\</td></tr><tr><td>Copy Kantine (Firma 78) Lakehouse → FS</td><td>Copy data</td><td>Lakehouse: Kantine/Output_78</td><td>FS: Kantine\Germany</td></tr><tr><td>Archive Kantine on FS</td><td>Copy data</td><td>FS: Kantine\Rohdaten\*.xlsx</td><td>FS: Kantine\Rohdaten\Archiv</td></tr><tr><td>Delete Kantine on FS</td><td>Delete data</td><td>FS: Kantine\Rohdaten\*.xlsx</td><td>—</td></tr><tr><td>Copy Kantine Fehlerhafte Einträge Lakehouse → FS</td><td>Copy data</td><td>Lakehouse: Kantine/Fehlerhafte_Eintraege</td><td>FS: Kantine\Fehlerhafte Eintraege</td></tr></table><h2 id="H4.3Notebook-Konfiguration" class="wikigeneratedid"><span><strong>4.3 Notebook-Konfiguration</strong></span></h2><p>Alle konfigurierbaren Pfade sind am Anfang des Notebooks im Abschnitt KONFIGURATION zusammengefasst:</p><p>BASE_DIR = "/lakehouse/default/Files/CSV_Transformation"</p><p>NLZ_SOURCE_DIR = f"{BASE_DIR}/NLZ/Raw"</p><p>NLZ_OUTPUT_DIR = f"{BASE_DIR}/NLZ/Output"</p><p>NLZ_ARCHIVE_DIR = f"{BASE_DIR}/NLZ/Archive"</p><p>ZUL_SOURCE_DIR = f"{BASE_DIR}/Zulagen/Raw"</p><p>ZUL_OUTPUT_DIR = f"{BASE_DIR}/Zulagen/Output"</p><p>ZUL_ARCHIVE_DIR = f"{BASE_DIR}/Zulagen/Archive"</p><p>KAN_SOURCE_DIR = f"{BASE_DIR}/Kantine/Raw"</p><p>KAN_OUTPUT_DIR = f"{BASE_DIR}/Kantine/Output"</p><p>KAN_OUTPUT_78_DIR = f"{BASE_DIR}/Kantine/Output_78"</p><p>KAN_ERROR_DIR = f"{BASE_DIR}/Kantine/Fehlerhafte_Eintraege"</p><p>KAN_ARCHIVE_DIR = f"{BASE_DIR}/Kantine/Archive"</p><p>SDMPERSON_ABFSS = "abfss://<container>@<storage>.dfs.core.windows.net/spl_gold_lh/rimo/sdmperson"</p><p>LOG_DIR = f"{BASE_DIR}/Logs"</p><h2 id="H4.4Logging26Monitoring" class="wikigeneratedid"><span><strong>4.4 Logging & Monitoring</strong></span></h2><p>Pro Run werden zwei Dateien im Lakehouse unter CSV_Transformation/Logs/ erstellt:</p><table><tr><td><strong>Datei</strong></td><td><strong>Inhalt</strong></td></tr><tr><td>YYYYMMDD_HHMMSS_run.log</td><td>Vollständiges Zeilenprotokoll mit Timestamps</td></tr><tr><td>YYYYMMDD_HHMMSS_summary.json</td><td>Kompakte Zusammenfassung: Status, verarbeitete Files, Fehler</td></tr></table><p>Run History in Fabric: Pipeline → View run history → Status, Dauer und Fehlerdetails pro Activity.</p><h1 id="H5.Fehlerbehandlung26Troubleshooting" class="wikigeneratedid"><span><strong>5. Fehlerbehandlung & Troubleshooting</strong></span></h1><h2 id="H5.1WoseheichobderProzesserfolgreichwar3F" class="wikigeneratedid"><span><strong>5.1 Wo sehe ich ob der Prozess erfolgreich war?</strong></span></h2><ul><li>Fabric Portal → Workspace → Pipeline → View run history (Status pro Activity, Dauer, Fehlertext)</li><li>Lakehouse → shared_data_lh → Files → CSV_Transformation → Logs → _summary.json für schnellen Überblick</li><li>_run.log für vollständige Details</li></ul><h2 id="H5.2HE4ufigeFehlerundLF6sungen" class="wikigeneratedid"><span><strong>5.2 Häufige Fehler und Lösungen</strong></span></h2><table><tr><td><strong>Fehler</strong></td><td><strong>Mögliche Ursache</strong></td><td><strong>Lösung</strong></td></tr><tr><td>FileNotFoundError: .../Raw</td><td>Lakehouse-Ordner fehlt</td><td>Ordner manuell im Lakehouse anlegen</td></tr><tr><td>Source-Ordner nicht erreichbar</td><td>Gateway offline oder Pfad falsch</td><td>Gateway-Status prüfen; Pfad in Pipeline-Activity kontrollieren</td></tr><tr><td>Cannot connect to \\atvietfs01\...</td><td>Pfad-Dopplung im Wildcard folder</td><td>Basispath der Verbindung (\\atvietfs01\Daten) nicht nochmals angeben</td></tr><tr><td>Keine CSV-Files gefunden</td><td>Source-Ordner leer</td><td>Prüfen ob Files korrekt im Source-Ordner abgelegt wurden</td></tr><tr><td>Output-File fehlt</td><td>Transformation-Fehler</td><td>_run.log im Lakehouse öffnen und nach ERROR suchen</td></tr></table><h2 id="H5.3ManuellerTest" class="wikigeneratedid"><span><strong>5.3 Manueller Test</strong></span></h2><ul><li>Source-Files manuell in Raw-Ordner im Lakehouse hochladen (Lakehouse → Files → NLZ/Raw oder Zulagen/Raw → Upload)</li><li>Notebook direkt öffnen und Run all klicken</li><li>Output-Files im Lakehouse unter NLZ/Output bzw. Zulagen/Output prüfen</li></ul><h2 id="H5.4Anpassungenvornehmen" class="wikigeneratedid"><span><strong>5.4 Anpassungen vornehmen</strong></span></h2><table><tr><td><strong>Was ändern?</strong></td><td><strong>Wo?</strong></td></tr><tr><td>Fileserver-Pfade</td><td>Pipeline-Activities (Source/Destination)</td></tr><tr><td>Transformationsregeln</td><td>Notebook: Funktionen transform_nlz() / transform_zulagen()</td></tr><tr><td>Firma-260-Logik</td><td>Notebook: Funktion process_folder() (260-Logik integriert)</td></tr><tr><td>Scheduled Trigger (Uhrzeit)</td><td>Pipeline → Schedule oben in der Toolbar</td></tr><tr><td>Lakehouse-Pfade</td><td>Notebook: Abschnitt KONFIGURATION (ganz oben)</td></tr></table><h1 id="H6.ZustE4ndigkeiten" class="wikigeneratedid"><span><strong>6. Zuständigkeiten</strong></span></h1><table><tr><td><strong>Bereich</strong></td><td><strong>Zuständig</strong></td></tr><tr><td>Fachliche Transformationsregeln</td><td>BMD-Team</td></tr><tr><td>Fabric Pipeline & Notebook</td><td>IT / Patrick Sonderegger</td></tr><tr><td>Fileserver & Gateway</td><td>IT-Infrastruktur</td></tr><tr><td>Monitoring & Fehleranalyse</td><td>IT / Patrick Sonderegger</td></tr></table><h1 id="H7.C4nderungshistorie" class="wikigeneratedid"><span><strong>7. Änderungshistorie</strong></span></h1><table><tr><td><strong>Version</strong></td><td><strong>Datum</strong></td><td><strong>Änderung</strong></td><td><strong>Autor</strong></td></tr><tr><td>1.0</td><td>2026-05-22</td><td>Erstversion</td><td>Patrick Sonderegger</td></tr><tr><td>1.1</td><td>2026-05-26</td><td>Output-Dateinamen fix (ntcsNLZ.csv, ntcsZulagen.csv); 260-Logik in process_folder() integriert; create_260_files() entfernt</td><td>Patrick Sonderegger</td></tr><tr><td>1.2</td><td>2026-05-27</td><td>Kantine-Verarbeitung hinzugefügt: Excel-Einlesen, Join mit sdmperson (Delta via abfss), Folgemonat-Logik, Firma-78-Split, neue Pipeline-Activities</td><td>Patrick Sonderegger</td></tr><tr><td>1.3</td><td>2026-05-28</td><td>Kantine: Monat als einfache Zahl (statt MM/YYYY); Firma-260-Integration; Fehlerhafte-Einträge-Logik (fehlende PersonalNr/Betrag → Fehlerhafte Eintraege.csv); neue Pipeline-Activity; KAN_ERROR_DIR</td><td>Patrick Sonderegger</td></tr><tr><td>1.4</td><td>2026-06-08</td><td>Kantine: Germany-File (Output_78) wird im Originalformat gespeichert (Spalten: Firma | Kunde | PersonalNr | Nachname | Betrag | Monat)</td><td>Patrick Sonderegger</td></tr></table><p>Version 1.0 | 2026-05-22 | Seite 7</p><p> </p> 1 +<p>BMD NLZ-Zulagen Import – Prozessdokumentation</p><p><strong>BMD NLZ-Zulagen Import</strong></p><p>Prozessdokumentation</p><table><tr><td> </td><td> </td></tr><tr><td>Version</td><td>1.4</td></tr><tr><td>Erstellt am</td><td>2026-05-22</td></tr><tr><td>Erstellt von</td><td>Patrick Sonderegger</td></tr><tr><td>Workspace</td><td>Fabric / 08_Data for Sharing / BMD NLZ-Zulagen Import</td></tr><tr><td>Status</td><td>Aktiv</td></tr></table><div><p> </p></div><div><p> </p></div><h1 id="H1.DCberblick" class="wikigeneratedid"><span><strong>1. Überblick</strong></span></h1><p>Dieser Prozess liest täglich CSV-Dateien (NLZ und Zulagen) sowie ein Excel-File (Kantine) von einem Windows-Fileserver ein, transformiert sie gemäss definierten Geschäftsregeln und legt die verarbeiteten Dateien wieder auf dem Fileserver ab. Die Output-Files heissen fix ntcsNLZ.csv, ntcsZulagen.csv und Importdatei Kantine.csv. Das Kantine-File wird zusätzlich mit Firmendaten aus dem Lakehouse spl_gold_lh angereichert.</p><p>Der Prozess läuft vollautomatisch einmal täglich über Microsoft Fabric (Pipeline + Notebook) und ist über ein On-Premises Data Gateway mit dem Fileserver verbunden.</p><h1 id="H2.Prozessablauf" class="wikigeneratedid"><span><strong>2. Prozessablauf</strong></span></h1><h2 id="H2.1TE4glicherAblauf" class="wikigeneratedid"><span><strong>2.1 Täglicher Ablauf</strong></span></h2><ul><li>Die Pipeline wird automatisch gestartet (Scheduled Trigger)</li><li>NLZ-, Zulagen- und Kantine-Files werden vom Fileserver in das Fabric Lakehouse kopiert</li><li>Das Notebook transformiert die Files gemäss den Geschäftsregeln</li><li>Die transformierten Files werden zurück auf den Fileserver geschrieben</li><li>Die ursprünglichen Source-Files werden auf dem Fileserver archiviert und gelöscht</li><li>Zeilen für Firma 260 werden in die Output-Files ntcsNLZ.csv / ntcsZulagen.csv integriert</li><li>Ein Log-Protokoll wird im Lakehouse abgelegt</li></ul><h2 id="H2.2OrdnerstrukturFileserver" class="wikigeneratedid"><span><strong>2.2 Ordnerstruktur Fileserver</strong></span></h2><h3 id="HTest-Umgebung" class="wikigeneratedid"><span><strong>Test-Umgebung</strong></span></h3><table><tr><td><strong>Typ</strong></td><td><strong>Pfad</strong></td></tr><tr><td>NLZ Source</td><td> 2 +atvietfs01\daten\Orbyte_Testordner\NLZ\Rohdaten</td></tr><tr><td>NLZ Output</td><td> 3 +atvietfs01\daten\Orbyte_Testordner\NLZ</td></tr><tr><td>NLZ Archiv</td><td> 4 +atvietfs01\daten\Orbyte_Testordner\NLZ\Rohdaten\Archiv</td></tr><tr><td>Zulagen Source</td><td> 5 +atvietfs01\daten\Orbyte_Testordner\Zulagen\Rohdaten</td></tr><tr><td>Zulagen Output</td><td> 6 +atvietfs01\daten\Orbyte_Testordner\Zulagen</td></tr><tr><td>Zulagen Archiv</td><td> 7 +atvietfs01\daten\Orbyte_Testordner\Zulagen\Rohdaten\Archiv</td></tr></table><h3 id="HLive-Umgebung" class="wikigeneratedid"><span><strong>Live-Umgebung</strong></span></h3><table><tr><td><strong>Typ</strong></td><td><strong>Pfad</strong></td></tr><tr><td>NLZ Source</td><td> 8 +atvietfs01\daten\IT\BMD\BMD\LV\NLZ\Rohdaten</td></tr><tr><td>NLZ Output</td><td> 9 +atvietfs01\daten\IT\BMD\BMD\LV\NLZ</td></tr><tr><td>NLZ Archiv</td><td> 10 +atvietfs01\daten\IT\BMD\BMD\LV\NLZ\Rohdaten\Archiv</td></tr><tr><td>Zulagen Source</td><td> 11 +atvietfs01\daten\IT\BMD\BMD\LV\Zulagen\Rohdaten</td></tr><tr><td>Zulagen Output</td><td> 12 +atvietfs01\daten\IT\BMD\BMD\LV\Zulagen</td></tr><tr><td>Zulagen Archiv</td><td> 13 +atvietfs01\daten\IT\BMD\BMD\LV\Zulagen\Rohdaten\Archiv</td></tr></table><h2 id="H2.3OrdnerstrukturFabricLakehouse28shared_data_lh29" class="wikigeneratedid"><span><strong>2.3 Ordnerstruktur Fabric Lakehouse (shared_data_lh)</strong></span></h2><p>Files/</p><p>└── CSV_Transformation/</p><p>├── NLZ/</p><p>│ ├── Raw/ ← Eingang vom Fileserver</p><p>│ ├── Output/ ← Transformierte Files</p><p>│ └── Archive/ ← Archiv der Source-Files</p><p>├── Zulagen/</p><p>│ ├── Raw/</p><p>│ ├── Output/</p><p>│ └── Archive/</p><p>├── Kantine/</p><p>│ ├── Raw/ ← Eingang vom Fileserver</p><p>│ ├── Output/ ← Importdatei Kantine.csv (ohne Firma 78)</p><p>│ ├── Output_78/ ← Importdatei Kantine.csv (nur Firma 78)</p><p>│ ├── Fehlerhafte_Eintraege/ ← Zeilen mit fehlender PersonalNr oder Betrag</p><p>│ └── Archive/ ← Archiv der Source-Files</p><p>└── Logs/ ← Run-Protokolle und Summaries</p><h1 id="H3.Transformationsregeln" class="wikigeneratedid"><span><strong>3. Transformationsregeln</strong></span></h1><h2 id="H3.1Zulagen-Files" class="wikigeneratedid"><span><strong>3.1 Zulagen-Files</strong></span></h2><p><em>Erkennungsmerkmal: Dateiname enthält "Zulagen"</em></p><table><tr><td><strong>Bedingung</strong></td><td><strong>Spalte</strong></td><td><strong>Aktion</strong></td></tr><tr><td>Spalte D == 7590</td><td>F (idx 5)</td><td>Wert auf 1 setzen</td></tr><tr><td>Spalte D == 7590</td><td>G (idx 6)</td><td>Aktuellen Monat aus Spalte A (YYYYMMDD) als Zahl eintragen (z.B. April → 4)</td></tr><tr><td>Spalte D != 7590</td><td>—</td><td>Zeile bleibt unverändert</td></tr></table><h2 id="H3.2NLZ-Files" class="wikigeneratedid"><span><strong>3.2 NLZ-Files</strong></span></h2><p><em>Erkennungsmerkmal: Dateiname enthält "NLZ"</em></p><h3 id="HSchritt12013ZeilenlF6schen28SpalteD29" class="wikigeneratedid"><span><strong>Schritt 1 – Zeilen löschen (Spalte D)</strong></span></h3><table><tr><td><strong>Wert in Spalte D</strong></td><td><strong>Aktion</strong></td></tr><tr><td>3, 7, 8, 11, 16</td><td>Zeile löschen</td></tr></table><h3 id="HSchritt22013Werteersetzen28SpalteD29" class="wikigeneratedid"><span><strong>Schritt 2 – Werte ersetzen (Spalte D)</strong></span></h3><table><tr><td><strong>Ursprungswert</strong></td><td><strong>Neuer Wert</strong></td></tr><tr><td>4</td><td>1</td></tr><tr><td>6</td><td>2</td></tr><tr><td>9</td><td>3</td></tr></table><h3 id="HSchritt32013Spaltenneuanordnen" class="wikigeneratedid"><span><strong>Schritt 3 – Spalten neu anordnen</strong></span></h3><table><tr><td><strong>Output-Spalte</strong></td><td><strong>Quelle</strong></td></tr><tr><td>A</td><td>Source Spalte B</td></tr><tr><td>B</td><td>Source Spalte C</td></tr><tr><td>C</td><td>Source Spalte D (nach Ersetzung)</td></tr><tr><td>D</td><td>Fix-Wert 3</td></tr><tr><td>E</td><td>Source Spalte A (Datum)</td></tr><tr><td>F</td><td>Source Spalte A (Datum, dupliziert)</td></tr></table><h2 id="H3.3Firma-260-Integration" class="wikigeneratedid"><span><strong>3.3 Firma-260-Integration</strong></span></h2><table><tr><td><strong>Output-File</strong></td><td><strong>Filterkriterium</strong></td><td><strong>Änderung</strong></td></tr><tr><td>ntcsZulagen.csv</td><td>Spalte B (idx 1) == 70</td><td>Zeilen kopieren, Spalte B auf 260 setzen, ans Ende von ntcsZulagen.csv anhängen</td></tr><tr><td>ntcsNLZ.csv</td><td>Spalte A (idx 0) == 70</td><td>Zeilen kopieren, Spalte A auf 260 setzen, ans Ende von ntcsNLZ.csv anhängen</td></tr></table><h2 id="H3.4Kantine-File" class="wikigeneratedid"><span><strong>3.4 Kantine-File</strong></span></h2><p><em>Erkennungsmerkmal: Dateiendung .xlsx im Kantine/Raw-Ordner</em></p><table><tr><td><strong>Schritt</strong></td><td><strong>Beschreibung</strong></td></tr><tr><td>1. Filter: Firma „Rudi Schütz“</td><td>Zeilen mit Spalte Firma == „Rudi Schütz“ werden gelöscht</td></tr><tr><td>2. Filter: Personalnummer leer</td><td>Zeilen ohne Personalnummer (Spalte Vorname leer) werden übersprungen</td></tr><tr><td>3. Join mit sdmperson</td><td>Personalnummer wird mit spl_gold_lh.rimo.sdmperson (Spalte persid) gejoint. Resultat: getcompanyidorna</td></tr><tr><td>4. Folgemonat berechnen</td><td>Spalte Monat (Format MM/YYYY) wird um 1 Monat erhöht und als einfache Monatszahl ausgegeben. Beispiel: 04/2026 → 5</td></tr><tr><td>5. Output-Struktur</td><td>Spalte A: Monat (einfache Zahl, z.B. 5) | B: getcompanyidorna | C: Personalnummer | D: 2934 (fix) | E: Betrag (2 Dezimalstellen, Komma)</td></tr><tr><td>6. Firma-78-Split</td><td>Zeilen mit getcompanyidorna == 78 werden im Originalformat (Spalten: Firma | Kunde | PersonalNr | Nachname | Betrag | Monat) in ein separates File geschrieben (Kantine/Output_78 → FS: Kantine\Germany). Alle anderen Zeilen kommen transformiert in Kantine/Output.</td></tr><tr><td>7. Firma-260-Integration</td><td>Zeilen mit getcompanyidorna == 70 werden kopiert, Firma auf 260 geändert und ans Ende von Kantine/Output angehängt.</td></tr><tr><td>8. Fehlerhafte Einträge</td><td>Zeilen mit fehlender Personalnummer und/oder fehlendem Betrag werden aus dem Output entfernt und im Originalformat als „Fehlerhafte Eintraege.csv“ unter Kantine/Fehlerhafte_Eintraege gespeichert.</td></tr></table><h1 id="H4.TechnischeDokumentation" class="wikigeneratedid"><span><strong>4. Technische Dokumentation</strong></span></h1><h2 id="H4.1FabricKomponenten" class="wikigeneratedid"><span><strong>4.1 Fabric Komponenten</strong></span></h2><table><tr><td><strong>Komponente</strong></td><td><strong>Name</strong></td><td><strong>Typ</strong></td></tr><tr><td>Pipeline</td><td>Pipeline_CSV_Transform</td><td>Data Pipeline</td></tr><tr><td>Notebook</td><td>csv_transformation</td><td>Notebook (Python)</td></tr><tr><td>Lakehouse</td><td>shared_data_lh</td><td>Lakehouse</td></tr><tr><td>Gateway</td><td>SPL_Datagateway</td><td>On-Premises Data Gateway</td></tr></table><h2 id="H4.2Pipeline-ActivitiesimDetail" class="wikigeneratedid"><span><strong>4.2 Pipeline-Activities im Detail</strong></span></h2><table><tr><td><strong>Activity</strong></td><td><strong>Typ</strong></td><td><strong>Von</strong></td><td><strong>Nach</strong></td></tr><tr><td>Copy NLZ FS → Lakehouse</td><td>Copy data</td><td>FS: NLZ\Rohdaten\*.csv</td><td>Lakehouse: NLZ/Raw</td></tr><tr><td>Copy Zulagen FS → Lakehouse</td><td>Copy data</td><td>FS: Zulagen\Rohdaten\*.csv</td><td>Lakehouse: Zulagen/Raw</td></tr><tr><td>csv_transformation (Notebook)</td><td>Notebook</td><td>Lakehouse: NLZ/Raw + Zulagen/Raw</td><td>Lakehouse: NLZ/Output + Zulagen/Output</td></tr><tr><td>Copy NLZ Lakehouse → FS</td><td>Copy data</td><td>Lakehouse: NLZ/Output</td><td>FS: NLZ\</td></tr><tr><td>Copy Zulagen Lakehouse → FS</td><td>Copy data</td><td>Lakehouse: Zulagen/Output</td><td>FS: Zulagen\</td></tr><tr><td>Archive NLZ on FS</td><td>Copy data</td><td>FS: NLZ\Rohdaten\*.csv</td><td>FS: NLZ\Rohdaten\Archiv</td></tr><tr><td>Delete NLZ on FS</td><td>Delete data</td><td>FS: NLZ\Rohdaten\*.csv</td><td>—</td></tr><tr><td>Archive Zulagen on FS</td><td>Copy data</td><td>FS: Zulagen\Rohdaten\*.csv</td><td>FS: Zulagen\Rohdaten\Archiv</td></tr><tr><td>Delete Zulagen on FS</td><td>Delete data</td><td>FS: Zulagen\Rohdaten\*.csv</td><td>—</td></tr><tr><td>Copy Kantine FS → Lakehouse</td><td>Copy data</td><td>FS: Kantine\Rohdaten\*.xlsx</td><td>Lakehouse: Kantine/Raw</td></tr><tr><td>Copy Kantine Lakehouse → FS</td><td>Copy data</td><td>Lakehouse: Kantine/Output</td><td>FS: Kantine\</td></tr><tr><td>Copy Kantine (Firma 78) Lakehouse → FS</td><td>Copy data</td><td>Lakehouse: Kantine/Output_78</td><td>FS: Kantine\Germany</td></tr><tr><td>Archive Kantine on FS</td><td>Copy data</td><td>FS: Kantine\Rohdaten\*.xlsx</td><td>FS: Kantine\Rohdaten\Archiv</td></tr><tr><td>Delete Kantine on FS</td><td>Delete data</td><td>FS: Kantine\Rohdaten\*.xlsx</td><td>—</td></tr><tr><td>Copy Kantine Fehlerhafte Einträge Lakehouse → FS</td><td>Copy data</td><td>Lakehouse: Kantine/Fehlerhafte_Eintraege</td><td>FS: Kantine\Fehlerhafte Eintraege</td></tr></table><h2 id="H4.3Notebook-Konfiguration" class="wikigeneratedid"><span><strong>4.3 Notebook-Konfiguration</strong></span></h2><p>Alle konfigurierbaren Pfade sind am Anfang des Notebooks im Abschnitt KONFIGURATION zusammengefasst:</p><p>BASE_DIR = "/lakehouse/default/Files/CSV_Transformation"</p><p>NLZ_SOURCE_DIR = f"{BASE_DIR}/NLZ/Raw"</p><p>NLZ_OUTPUT_DIR = f"{BASE_DIR}/NLZ/Output"</p><p>NLZ_ARCHIVE_DIR = f"{BASE_DIR}/NLZ/Archive"</p><p>ZUL_SOURCE_DIR = f"{BASE_DIR}/Zulagen/Raw"</p><p>ZUL_OUTPUT_DIR = f"{BASE_DIR}/Zulagen/Output"</p><p>ZUL_ARCHIVE_DIR = f"{BASE_DIR}/Zulagen/Archive"</p><p>KAN_SOURCE_DIR = f"{BASE_DIR}/Kantine/Raw"</p><p>KAN_OUTPUT_DIR = f"{BASE_DIR}/Kantine/Output"</p><p>KAN_OUTPUT_78_DIR = f"{BASE_DIR}/Kantine/Output_78"</p><p>KAN_ERROR_DIR = f"{BASE_DIR}/Kantine/Fehlerhafte_Eintraege"</p><p>KAN_ARCHIVE_DIR = f"{BASE_DIR}/Kantine/Archive"</p><p>SDMPERSON_ABFSS = "abfss://<container>@<storage>.dfs.core.windows.net/spl_gold_lh/rimo/sdmperson"</p><p>LOG_DIR = f"{BASE_DIR}/Logs"</p><h2 id="H4.4Logging26Monitoring" class="wikigeneratedid"><span><strong>4.4 Logging & Monitoring</strong></span></h2><p>Pro Run werden zwei Dateien im Lakehouse unter CSV_Transformation/Logs/ erstellt:</p><table><tr><td><strong>Datei</strong></td><td><strong>Inhalt</strong></td></tr><tr><td>YYYYMMDD_HHMMSS_run.log</td><td>Vollständiges Zeilenprotokoll mit Timestamps</td></tr><tr><td>YYYYMMDD_HHMMSS_summary.json</td><td>Kompakte Zusammenfassung: Status, verarbeitete Files, Fehler</td></tr></table><p>Run History in Fabric: Pipeline → View run history → Status, Dauer und Fehlerdetails pro Activity.</p><h1 id="H5.Fehlerbehandlung26Troubleshooting" class="wikigeneratedid"><span><strong>5. Fehlerbehandlung & Troubleshooting</strong></span></h1><h2 id="H5.1WoseheichobderProzesserfolgreichwar3F" class="wikigeneratedid"><span><strong>5.1 Wo sehe ich ob der Prozess erfolgreich war?</strong></span></h2><ul><li>Fabric Portal → Workspace → Pipeline → View run history (Status pro Activity, Dauer, Fehlertext)</li><li>Lakehouse → shared_data_lh → Files → CSV_Transformation → Logs → _summary.json für schnellen Überblick</li><li>_run.log für vollständige Details</li></ul><h2 id="H5.2HE4ufigeFehlerundLF6sungen" class="wikigeneratedid"><span><strong>5.2 Häufige Fehler und Lösungen</strong></span></h2><table><tr><td><strong>Fehler</strong></td><td><strong>Mögliche Ursache</strong></td><td><strong>Lösung</strong></td></tr><tr><td>FileNotFoundError: .../Raw</td><td>Lakehouse-Ordner fehlt</td><td>Ordner manuell im Lakehouse anlegen</td></tr><tr><td>Source-Ordner nicht erreichbar</td><td>Gateway offline oder Pfad falsch</td><td>Gateway-Status prüfen; Pfad in Pipeline-Activity kontrollieren</td></tr><tr><td>Cannot connect to 14 +atvietfs01\...</td><td>Pfad-Dopplung im Wildcard folder</td><td>Basispath der Verbindung ( 15 +atvietfs01\Daten) nicht nochmals angeben</td></tr><tr><td>Keine CSV-Files gefunden</td><td>Source-Ordner leer</td><td>Prüfen ob Files korrekt im Source-Ordner abgelegt wurden</td></tr><tr><td>Output-File fehlt</td><td>Transformation-Fehler</td><td>_run.log im Lakehouse öffnen und nach ERROR suchen</td></tr></table><h2 id="H5.3ManuellerTest" class="wikigeneratedid"><span><strong>5.3 Manueller Test</strong></span></h2><ul><li>Source-Files manuell in Raw-Ordner im Lakehouse hochladen (Lakehouse → Files → NLZ/Raw oder Zulagen/Raw → Upload)</li><li>Notebook direkt öffnen und Run all klicken</li><li>Output-Files im Lakehouse unter NLZ/Output bzw. Zulagen/Output prüfen</li></ul><h2 id="H5.4Anpassungenvornehmen" class="wikigeneratedid"><span><strong>5.4 Anpassungen vornehmen</strong></span></h2><table><tr><td><strong>Was ändern?</strong></td><td><strong>Wo?</strong></td></tr><tr><td>Fileserver-Pfade</td><td>Pipeline-Activities (Source/Destination)</td></tr><tr><td>Transformationsregeln</td><td>Notebook: Funktionen transform_nlz() / transform_zulagen()</td></tr><tr><td>Firma-260-Logik</td><td>Notebook: Funktion process_folder() (260-Logik integriert)</td></tr><tr><td>Scheduled Trigger (Uhrzeit)</td><td>Pipeline → Schedule oben in der Toolbar</td></tr><tr><td>Lakehouse-Pfade</td><td>Notebook: Abschnitt KONFIGURATION (ganz oben)</td></tr></table><h1 id="H6.ZustE4ndigkeiten" class="wikigeneratedid"><span><strong>6. Zuständigkeiten</strong></span></h1><table><tr><td><strong>Bereich</strong></td><td><strong>Zuständig</strong></td></tr><tr><td>Fachliche Transformationsregeln</td><td>BMD-Team</td></tr><tr><td>Fabric Pipeline & Notebook</td><td>IT / Patrick Sonderegger</td></tr><tr><td>Fileserver & Gateway</td><td>IT-Infrastruktur</td></tr><tr><td>Monitoring & Fehleranalyse</td><td>IT / Patrick Sonderegger</td></tr></table><h1 id="H7.C4nderungshistorie" class="wikigeneratedid"><span><strong>7. Änderungshistorie</strong></span></h1><table><tr><td><strong>Version</strong></td><td><strong>Datum</strong></td><td><strong>Änderung</strong></td><td><strong>Autor</strong></td></tr><tr><td>1.0</td><td>2026-05-22</td><td>Erstversion</td><td>Patrick Sonderegger</td></tr><tr><td>1.1</td><td>2026-05-26</td><td>Output-Dateinamen fix (ntcsNLZ.csv, ntcsZulagen.csv); 260-Logik in process_folder() integriert; create_260_files() entfernt</td><td>Patrick Sonderegger</td></tr><tr><td>1.2</td><td>2026-05-27</td><td>Kantine-Verarbeitung hinzugefügt: Excel-Einlesen, Join mit sdmperson (Delta via abfss), Folgemonat-Logik, Firma-78-Split, neue Pipeline-Activities</td><td>Patrick Sonderegger</td></tr><tr><td>1.3</td><td>2026-05-28</td><td>Kantine: Monat als einfache Zahl (statt MM/YYYY); Firma-260-Integration; Fehlerhafte-Einträge-Logik (fehlende PersonalNr/Betrag → Fehlerhafte Eintraege.csv); neue Pipeline-Activity; KAN_ERROR_DIR</td><td>Patrick Sonderegger</td></tr><tr><td>1.4</td><td>2026-06-08</td><td>Kantine: Germany-File (Output_78) wird im Originalformat gespeichert (Spalten: Firma | Kunde | PersonalNr | Nachname | Betrag | Monat)</td><td>Patrick Sonderegger</td></tr></table><p>Version 1.0 | 2026-05-22 | Seite 7</p><p> </p> 2 2 3 3 ---- 4 4 5 5 == Verwandte Themen == 6 6 7 -//Kuratiert — kann direkt im Editor ergänzt werden:// 21 +//Kuratiert — kann direkt im Editor ergänzt werden://// 8 8 9 9 * [[BMD SQL>>doc:IT-Wiki.02-Tools.Software.BMD.BMD-SQL.WebHome]] 10 10 * [[BMD Test>>doc:IT-Wiki.02-Tools.Software.BMD.BMD-Test.WebHome]] ... ... @@ -13,5 +13,5 @@ 13 13 {{include reference="IT-Wiki.Makros.Verwandte-Themen.WebHome"/}} 14 14 15 15 ---- 16 -**Status:** Migriert — Team-Review ausstehend · **Owner:** //(festlegen)// · **Letzter Review:** 2026-06-11 17 17 31 +**Status:** Migriert — Team-Review ausstehend · **Owner:** //(festlegen)// · **Letzter Review:** 2026-06-11
- Dokumentation_BMD_NLZ_Zulagen_Import.docx
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.drupp - Size
-
... ... @@ -1,0 +1,1 @@ 1 +16.3 KB - Content
- Dokumentation_BMD_NLZ_Zulagen_Import.md
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.drupp - Size
-
... ... @@ -1,0 +1,1 @@ 1 +9.5 KB - Content
-
... ... @@ -1,0 +1,249 @@ 1 +# BMD NLZ-Zulagen Import – Prozessdokumentation 2 + 3 +**Version:** 1.0 4 +**Erstellt:** 2026-05-22 5 +**Erstellt von:** Patrick Sonderegger 6 +**Workspace:** Fabric / 08_Data for Sharing / BMD NLZ-Zulagen Import 7 + 8 +--- 9 + 10 +## 1. Überblick 11 + 12 +Dieser Prozess liest täglich CSV-Dateien (NLZ und Zulagen) von einem Windows-Fileserver ein, transformiert sie gemäss definierten Regeln und legt die verarbeiteten Dateien wieder auf dem Fileserver ab. Zusätzlich werden Testfiles für die Firma 260 erstellt. 13 + 14 +Der Prozess läuft vollautomatisch einmal täglich über Microsoft Fabric (Pipeline + Notebook) und ist über ein On-Premises Data Gateway mit dem Fileserver verbunden. 15 + 16 +--- 17 + 18 +## 2. Prozessablauf (funktional) 19 + 20 +### 2.1 Was passiert täglich? 21 + 22 +1. Die Pipeline wird automatisch gestartet (Scheduled Trigger) 23 +2. NLZ- und Zulagen-Files werden vom Fileserver in das Fabric Lakehouse kopiert 24 +3. Das Notebook transformiert die Files gemäss den Geschäftsregeln 25 +4. Die transformierten Files werden zurück auf den Fileserver geschrieben 26 +5. Die ursprünglichen Source-Files werden auf dem Fileserver archiviert und gelöscht 27 +6. Testfiles für Firma 260 werden erstellt 28 +7. Ein Log-Protokoll wird im Lakehouse abgelegt 29 + 30 +### 2.2 Ordnerstruktur Fileserver 31 + 32 +| Umgebung | Typ | Pfad | 33 +|---|---|---| 34 +| **Test** | NLZ Source | `\\atvietfs01\daten\Orbyte_Testordner\NLZ\Rohdaten` | 35 +| **Test** | NLZ Output | `\\atvietfs01\daten\Orbyte_Testordner\NLZ` | 36 +| **Test** | NLZ Archiv | `\\atvietfs01\daten\Orbyte_Testordner\NLZ\Rohdaten\Archiv` | 37 +| **Test** | Zulagen Source | `\\atvietfs01\daten\Orbyte_Testordner\Zulagen\Rohdaten` | 38 +| **Test** | Zulagen Output | `\\atvietfs01\daten\Orbyte_Testordner\Zulagen` | 39 +| **Test** | Zulagen Archiv | `\\atvietfs01\daten\Orbyte_Testordner\Zulagen\Rohdaten\Archiv` | 40 +| **Live** | NLZ Source | `\\atvietfs01\daten\IT\BMD\BMD\LV\NLZ\Rohdaten` | 41 +| **Live** | NLZ Output | `\\atvietfs01\daten\IT\BMD\BMD\LV\NLZ` | 42 +| **Live** | NLZ Archiv | `\\atvietfs01\daten\IT\BMD\BMD\LV\NLZ\Rohdaten\Archiv` | 43 +| **Live** | Zulagen Source | `\\atvietfs01\daten\IT\BMD\BMD\LV\Zulagen\Rohdaten` | 44 +| **Live** | Zulagen Output | `\\atvietfs01\daten\IT\BMD\BMD\LV\Zulagen` | 45 +| **Live** | Zulagen Archiv | `\\atvietfs01\daten\IT\BMD\BMD\LV\Zulagen\Rohdaten\Archiv` | 46 + 47 +### 2.3 Ordnerstruktur Fabric Lakehouse (shared_data_lh) 48 + 49 +``` 50 +Files/ 51 +└── CSV_Transformation/ 52 + ├── NLZ/ 53 + │ ├── Raw/ ← Eingang vom Fileserver 54 + │ ├── Output/ ← Transformierte Files 55 + │ └── Archive/ ← Archiv der Source-Files 56 + ├── Zulagen/ 57 + │ ├── Raw/ 58 + │ ├── Output/ 59 + │ └── Archive/ 60 + └── Logs/ ← Run-Protokolle und Summaries 61 +``` 62 + 63 +--- 64 + 65 +## 3. Transformationsregeln 66 + 67 +### 3.1 Zulagen-Files 68 + 69 +Erkennungsmerkmal: Dateiname enthält **"Zulagen"** 70 + 71 +| Bedingung | Spalte | Aktion | 72 +|---|---|---| 73 +| Spalte D == `7590` | F (idx 5) | Wert auf `1` setzen | 74 +| Spalte D == `7590` | G (idx 6) | Aktuellen Monat aus Spalte A (YYYYMMDD) als Zahl eintragen (z.B. April → `4`) | 75 +| Spalte D != `7590` | — | Zeile bleibt unverändert | 76 + 77 +### 3.2 NLZ-Files 78 + 79 +Erkennungsmerkmal: Dateiname enthält **"NLZ"** 80 + 81 +**Schritt 1 – Zeilen löschen** (Spalte D): 82 + 83 +| Wert in Spalte D | Aktion | 84 +|---|---| 85 +| 3, 7, 8, 11, 16 | Zeile löschen | 86 + 87 +**Schritt 2 – Werte ersetzen** (Spalte D): 88 + 89 +| Ursprungswert | Neuer Wert | 90 +|---|---| 91 +| 4 | 1 | 92 +| 6 | 2 | 93 +| 9 | 3 | 94 + 95 +**Schritt 3 – Spalten neu anordnen:** 96 + 97 +| Output-Spalte | Quelle | 98 +|---|---| 99 +| A | Source Spalte B | 100 +| B | Source Spalte C | 101 +| C | Source Spalte D (nach Ersetzung) | 102 +| D | Fix-Wert `3` | 103 +| E | Source Spalte A (Datum) | 104 +| F | Source Spalte A (Datum, dupliziert) | 105 + 106 +### 3.3 Testfiles Firma 260 107 + 108 +Aus den transformierten Output-Files werden zusätzliche Testfiles erstellt: 109 + 110 +| File | Filterkriterium | Änderung | 111 +|---|---|---| 112 +| `260_Zulagen.csv` | Spalte B (idx 1) == `70` | Spalte B wird auf `260` gesetzt | 113 +| `260_NLZ.csv` | Spalte A (idx 0) == `70` | Spalte A wird auf `260` gesetzt | 114 + 115 +--- 116 + 117 +## 4. Technische Dokumentation 118 + 119 +### 4.1 Systemübersicht 120 + 121 +``` 122 +Fileserver (\\atvietfs01) 123 + │ 124 + │ On-Premises Data Gateway (SPL_Datagateway) 125 + │ 126 +Microsoft Fabric 127 + ├── Data Pipeline (Pipeline_CSV_Transform) 128 + │ ├── Copy NLZ FS → Lakehouse 129 + │ ├── Copy Zulagen FS → Lakehouse 130 + │ ├── Notebook (csv_transformation) 131 + │ ├── Copy NLZ Lakehouse → FS 132 + │ ├── Copy Zulagen Lakehouse → FS 133 + │ ├── Archive NLZ on FS 134 + │ ├── Delete NLZ on FS 135 + │ ├── Archive Zulagen on FS 136 + │ └── Delete Zulagen on FS 137 + └── Lakehouse (shared_data_lh) 138 + └── Files/CSV_Transformation/... 139 +``` 140 + 141 +### 4.2 Fabric Komponenten 142 + 143 +| Komponente | Name | Workspace | Typ | 144 +|---|---|---|---| 145 +| Pipeline | Pipeline_CSV_Transform | Fabric / 08_Data for Sharing / BMD NLZ-Zulagen Import | Data Pipeline | 146 +| Notebook | csv_transformation | Fabric / 08_Data for Sharing / BMD NLZ-Zulagen Import | Notebook | 147 +| Lakehouse | shared_data_lh | Fabric | Lakehouse | 148 +| Gateway | SPL_Datagateway | On-Premises | Data Gateway | 149 + 150 +### 4.3 Pipeline-Activities im Detail 151 + 152 +| Activity | Typ | Von | Nach | 153 +|---|---|---|---| 154 +| Copy NLZ FS → Lakehouse | Copy data | FS: `NLZ\Rohdaten\*.csv` | Lakehouse: `NLZ/Raw` | 155 +| Copy Zulagen FS → Lakehouse | Copy data | FS: `Zulagen\Rohdaten\*.csv` | Lakehouse: `Zulagen/Raw` | 156 +| Notebook (csv_transformation) | Notebook | Lakehouse: `NLZ/Raw` + `Zulagen/Raw` | Lakehouse: `NLZ/Output` + `Zulagen/Output` | 157 +| Copy NLZ Lakehouse → FS | Copy data | Lakehouse: `NLZ/Output` | FS: `NLZ\` | 158 +| Copy Zulagen Lakehouse → FS | Copy data | Lakehouse: `Zulagen/Output` | FS: `Zulagen\` | 159 +| Archive NLZ on FS | Copy data | FS: `NLZ\Rohdaten\*.csv` | FS: `NLZ\Rohdaten\Archiv` | 160 +| Delete NLZ on FS | Delete data | FS: `NLZ\Rohdaten\*.csv` | — | 161 +| Archive Zulagen on FS | Copy data | FS: `Zulagen\Rohdaten\*.csv` | FS: `Zulagen\Rohdaten\Archiv` | 162 +| Delete Zulagen on FS | Delete data | FS: `Zulagen\Rohdaten\*.csv` | — | 163 + 164 +### 4.4 Notebook-Konfiguration 165 + 166 +Das Notebook ist in Python geschrieben und verwendet pandas für die Transformation. Alle konfigurierbaren Pfade sind am Anfang des Notebooks im Abschnitt **KONFIGURATION** zusammengefasst: 167 + 168 +```python 169 +BASE_DIR = "/lakehouse/default/Files/CSV_Transformation" 170 +NLZ_SOURCE_DIR = f"{BASE_DIR}/NLZ/Raw" 171 +NLZ_OUTPUT_DIR = f"{BASE_DIR}/NLZ/Output" 172 +NLZ_ARCHIVE_DIR = f"{BASE_DIR}/NLZ/Archive" 173 +ZUL_SOURCE_DIR = f"{BASE_DIR}/Zulagen/Raw" 174 +ZUL_OUTPUT_DIR = f"{BASE_DIR}/Zulagen/Output" 175 +ZUL_ARCHIVE_DIR = f"{BASE_DIR}/Zulagen/Archive" 176 +LOG_DIR = f"{BASE_DIR}/Logs" 177 +``` 178 + 179 +### 4.5 Logging & Monitoring 180 + 181 +Pro Run werden zwei Dateien im Lakehouse unter `CSV_Transformation/Logs/` erstellt: 182 + 183 +| Datei | Inhalt | 184 +|---|---| 185 +| `YYYYMMDD_HHMMSS_run.log` | Vollständiges Zeilenprotokoll mit Timestamps | 186 +| `YYYYMMDD_HHMMSS_summary.json` | Kompakte Zusammenfassung: Status, verarbeitete Files, Fehler | 187 + 188 +**Run History in Fabric:** 189 +Pipeline → oben in der Toolbar → **View run history** → Status, Dauer und Fehlerdetails pro Activity sichtbar. 190 + 191 +--- 192 + 193 +## 5. Fehlerbehandlung & Troubleshooting 194 + 195 +### 5.1 Wo sehe ich ob der Prozess erfolgreich war? 196 + 197 +1. **Fabric Portal** → Workspace → Pipeline → **View run history** 198 + Hier ist jeder Lauf mit Status (✅ Succeeded / ❌ Failed), Startzeit und Dauer sichtbar. 199 + 200 +2. **Lakehouse Logs** → `shared_data_lh` → Files → CSV_Transformation → Logs 201 + Die `_summary.json`-Dateien geben einen schnellen Überblick. Die `_run.log`-Dateien enthalten alle Details. 202 + 203 +### 5.2 Häufige Fehler und Lösungen 204 + 205 +| Fehler | Mögliche Ursache | Lösung | 206 +|---|---|---| 207 +| `FileNotFoundError: .../Raw` | Lakehouse-Ordner fehlt | Ordner manuell im Lakehouse anlegen | 208 +| `Source-Ordner nicht erreichbar` | Gateway offline oder Pfad falsch | Gateway-Status prüfen; Pfad in Pipeline-Activity kontrollieren | 209 +| `Cannot connect to \\atvietfs01\...` | Falscher UNC-Pfad (Dopplung) | Wildcard folder path in der Pipeline-Activity prüfen – der Basispfad der Verbindung (`\\atvietfs01\Daten`) darf nicht nochmals angegeben werden | 210 +| `Keine CSV-Files gefunden` | Source-Ordner leer | Prüfen ob Files korrekt im Source-Ordner abgelegt wurden | 211 +| Notebook schlägt fehl, Pipeline läuft weiter | Falsches Notebook verknüpft | In Pipeline-Activity Settings das korrekte Notebook auswählen | 212 +| Output-File fehlt | Transformation-Fehler | `_run.log` im Lakehouse öffnen und nach `ERROR` suchen | 213 + 214 +### 5.3 Manueller Test 215 + 216 +Falls der Prozess manuell gestartet werden soll: 217 +1. Source-Files manuell in den `Raw`-Ordner im Lakehouse hochladen (Lakehouse → Files → NLZ/Raw oder Zulagen/Raw → Upload) 218 +2. Notebook direkt öffnen und **Run all** klicken 219 +3. Output-Files im Lakehouse unter `NLZ/Output` bzw. `Zulagen/Output` prüfen 220 + 221 +### 5.4 Anpassungen vornehmen 222 + 223 +| Was ändern? | Wo? | 224 +|---|---| 225 +| Fileserver-Pfade | In den jeweiligen Pipeline-Activities (Source/Destination) | 226 +| Transformationsregeln | Im Notebook, Funktionen `transform_nlz()` / `transform_zulagen()` | 227 +| Firma-260-Logik | Im Notebook, Funktion `create_260_files()` | 228 +| Scheduled Trigger (Uhrzeit) | Pipeline → **Schedule** oben in der Toolbar | 229 +| Lakehouse-Pfade | Im Notebook, Abschnitt KONFIGURATION (oben) | 230 + 231 +--- 232 + 233 +## 6. Zuständigkeiten 234 + 235 +| Bereich | Zuständig | 236 +|---|---| 237 +| Fachliche Transformationsregeln | BMD-Team | 238 +| Fabric Pipeline & Notebook | IT / Patrick Sonderegger | 239 +| Fileserver & Gateway | IT-Infrastruktur | 240 +| Monitoring & Fehleranalyse | IT / Patrick Sonderegger | 241 + 242 +--- 243 + 244 +## 7. Änderungshistorie 245 + 246 +| Version | Datum | Änderung | Autor | 247 +|---|---|---|---| 248 +| 1.0 | 2026-05-22 | Erstversion | Patrick Sonderegger | 249 +
- Dokumentation_BMD_NLZ_Zulagen_Import_v1.1.docx
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.drupp - Size
-
... ... @@ -1,0 +1,1 @@ 1 +16.1 KB - Content
- Dokumentation_BMD_NLZ_Zulagen_Import_v1.2.docx
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.drupp - Size
-
... ... @@ -1,0 +1,1 @@ 1 +17.3 KB - Content
- Dokumentation_BMD_NLZ_Zulagen_Import_v1_4.docx
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.drupp - Size
-
... ... @@ -1,0 +1,1 @@ 1 +18.0 KB - Content