diff --git a/config/appVersion.js b/config/appVersion.js
index ba26cc27b..a4174f091 100644
--- a/config/appVersion.js
+++ b/config/appVersion.js
@@ -1,2 +1,2 @@
// /config/appVersion
-export const APP_VERSION = "1.1.198";
+export const APP_VERSION = "1.1.199";
diff --git a/docs/docs/NodeMap.pdf b/docs/docs/NodeMap.pdf
new file mode 100644
index 000000000..423f61acf
Binary files /dev/null and b/docs/docs/NodeMap.pdf differ
diff --git a/docs/docs/README.md b/docs/docs/README.md
new file mode 100644
index 000000000..ae12a69bc
--- /dev/null
+++ b/docs/docs/README.md
@@ -0,0 +1,14 @@
+
+
+# Entwickler-Dokumentation
+
+Willkommen in der technischen Dokumentation von NodeMap.
+
+📂 Wichtige Themen:
+
+- Webservices: `api/webservices.md`
+- Redux / Fetch-Logik: `redux/api/fromWebService.md`
+- Konfigurationsschema: `env/env.local.schema.md`
+- Deployment: `deployment.md`
+
+Diese Doku ist für Entwickler, die an diesem Projekt mitarbeiten oder übernehmen.
diff --git a/docs/docs/architecture.md b/docs/docs/architecture.md
new file mode 100644
index 000000000..5c4bd8dab
--- /dev/null
+++ b/docs/docs/architecture.md
@@ -0,0 +1,90 @@
+
+
+# 🧠 Architekturübersicht – NodeMap
+
+Dieses Dokument beschreibt die technische Gesamtarchitektur des Projekts **NodeMap**, einer kartenbasierten Webanwendung zur Anzeige, Bearbeitung und Verwaltung von GIS-Daten, POIs und Gerätestatus.
+
+---
+
+## ⚙️ Technologie-Stack
+
+| Komponente | Beschreibung |
+| --------------------- | ---------------------------------------------------------------------- |
+| **Frontend** | React 18 + Next.js (App Router) |
+| **State-Management** | Redux Toolkit mit zentralem Store, Thunks & Slices |
+| **UI** | Tailwind CSS + Leaflet + React-Icons |
+| **Backend-Anbindung** | Webservices via `WebServiceMap.asmx` (IIS) + lokale Next.js API für DB |
+| **Datenbank** | MySQL (Produktiv & Entwicklung, z. T. via Docker) |
+| **Deployment** | Windows Server (IIS), optional per `nssm` als Dienst |
+
+---
+
+## 🗺️ Architekturüberblick
+
+```
++------------------+ +------------------+ +------------------+
+| Leaflet Map | <---> | Redux Store | <---> | Webservices |
+| (Interaktivität) | | (Status & Data) | | (IIS, .asmx) |
++------------------+ +------------------+ +------------------+
+ ^
+ |
+ v
++------------------+ +------------------+ +-------------------+
+| POI-Komponenten | <---> | Redux Slices | <---> | Next.js API-Routen|
+| (Add/Edit) | | (z. B. poiSlice) | | (Datenbank) |
++------------------+ +------------------+ +-------------------+
+```
+
+---
+
+## 🔁 Datenfluss (Beispiel: POI anzeigen)
+
+1. Leaflet-Karte lädt bei `MapComponent` Mounting
+2. Redux-Thunk `fetchPoiMarkersThunk` wird ausgelöst
+3. Thunk ruft `fetchPoiDataService.js` (DB) oder Webservice (IIS) auf
+4. Ergebnisse werden im Slice `readPoiMarkersStoreSlice` gespeichert
+5. Komponenten lesen POI-Daten über `useSelector(...)` aus dem Store
+6. POIs werden als Marker in Leaflet gesetzt
+
+---
+
+## 📁 Schlüsselfunktionen & Module
+
+| Bereich | Datei/Modul | Aufgabe |
+| ------------- | ----------------------------------------------- | ---------------------------------------- |
+| Kartenlogik | `MapComponent.js` | Zentrale Initialisierung und Layer-Logik |
+| Webservices | `services/webservice/` | Kommunikation mit TALAS V5 Webservice |
+| Datenbank | `services/database/` | Zugriff auf lokale Next.js-API & DB |
+| POIs | `AddPOIModal.js`, `PoiUpdateModal.js` | UI für POI-Erstellung & -Bearbeitung |
+| Redux | `redux/slices/`, `redux/thunks/`, `redux/store` | Globaler State, API-Steuerung |
+| Konfiguration | `.env.local`, `config.js`, dynamic URLs | IP, basePath, Ports |
+
+---
+
+## 🧩 Besonderheiten
+
+- **Konfigurierbarer basePath:**
+ Pfad wie `/talas5` ist optional und kann per `NEXT_PUBLIC_BASE_PATH` in `.env.local` gesetzt werden.
+- **Rechteabhängige UI:**
+ Funktionen (z. B. POI bearbeiten) basieren auf Benutzerrechten (`IdRight`) vom Server.
+- **Zentrale Komponentensteuerung:**
+ Komponenten wie `MapLayersControlPanel` oder `CoordinatePopup` kontrollieren Layer & Interaktion.
+- **Kontextmenü-Logik:**
+ Marker & Polylinien besitzen eigene Kontextmenüs – dynamisch zusammengesetzt und verwaltet.
+
+---
+
+## 📦 Versionierung & Builds
+
+- Version ist in `appVersion.js` definiert → wird über `NEXT_PUBLIC_APP_VERSION` eingeblendet
+- Build erfolgt via `npm run build`, Auslieferung über `.next/`
+- Nicht benötigte Dateien wie `__tests__`, `docs/`, `scripts/` etc. werden nicht in den Build aufgenommen
+
+---
+
+## 📚 Weiterführende Dokumentation
+
+- [`build-and-deploy.md`](./build-and-deploy.md)
+- [`env.local.schema.md`](./env.local.schema.md)
+- [`redux/slices/`](./redux/slices/)
+- [`services/webservice/`](./services/webservice/)
diff --git a/docs/docs/build-and-deploy.md b/docs/docs/build-and-deploy.md
new file mode 100644
index 000000000..8ce4da561
--- /dev/null
+++ b/docs/docs/build-and-deploy.md
@@ -0,0 +1,46 @@
+
+
+# 🛠 Deployment & Build-Verhalten (Next.js)
+
+Diese Datei beschreibt, welche Projektdateien in den Build (`.next/`) aufgenommen werden und welche nicht.
+Ziel: Klarheit für Onboarding, Deployment-ZIP-Erstellung oder CI/CD.
+
+---
+
+## 📦 Wird beim `npm run build` in `.next/` gespeichert
+
+| Inhalt | Beschreibung |
+| ---------------------- | -------------------------------------------------- |
+| Kompilierte Seiten | Alle unter `/pages/` |
+| API-Routen | Alles aus `pages/api/` |
+| Assets aus `public/` | Werden im Build nicht verändert, aber ausgeliefert |
+| CSS-Dateien (Tailwind) | Werden gebundelt und minimiert |
+| `.env.local` | Wird eingelesen, aber nicht exportiert |
+| JS/TS-Quellcode | Wird zu Client- und Server-Bundles kompiliert |
+
+---
+
+## 🧹 Wird **nicht** in `.next/` aufgenommen
+
+| Ordner/Datei | Zweck / Grund |
+| --------------------------- | -------------------------------------------- |
+| `__tests__`, `__mocks__` | Nur lokal für Tests, nicht im Build |
+| `cypress/` | End-to-End-Tests, nur für lokale Entwicklung |
+| `scripts/` | Hilfsskripte, nicht für Runtime relevant |
+| `docs/` | Dokumentation, nur für Entwickler |
+| `README.md`, `CHANGELOG.md` | Doku – nicht erforderlich zur Laufzeit |
+| `Jenkinsfile`, `.github/` | CI/CD – wird vom Buildsystem verwendet |
+
+---
+
+## 📂 Empfohlene Struktur für Deployment (z. B. ZIP-Upload auf Server)
+
+Nur folgende Dateien/Ordner übertragen:
+
+```bash
+.next/
+public/
+package.json
+package-lock.json
+.env.local
+```
diff --git a/docs/docs/checklist.md b/docs/docs/checklist.md
new file mode 100644
index 000000000..62133ddbe
--- /dev/null
+++ b/docs/docs/checklist.md
@@ -0,0 +1,42 @@
+
+
+# 🧾 Projektpflege-Checkliste
+
+Diese Datei dient als persönliche Gedächtnisstütze bei der Entwicklung und Pflege des Projekts.
+
+Bevor du einen Feature-, Refactor- oder Bugfix-Commit abschließt, geh diese Liste durch:
+
+---
+
+## 📝 Dokumentation
+
+- [ ] Ist `README.md` noch aktuell (Projektziel, Setup, Nutzung)?
+- [ ] Wurde `CHANGELOG.md` ergänzt (mit Datum, Version, Änderung)?
+- [ ] Wurde ggf. ein neuer Punkt in `/docs/` ergänzt oder aktualisiert?
+- [ ] Sind Beispiel-URLs oder sensible Daten **nicht im Code**, sondern dokumentiert?
+
+---
+
+## 📦 Konfiguration
+
+- [ ] Ist `.env.local` aktuell und vollständig (für Entwickler/Testserver)?
+- [ ] Wird jede Konfiguration ausschließlich über `.env.local` gesteuert?
+
+---
+
+## ✅ Codequalität & Git
+
+- [ ] Ist die Git-Commit-Message beschreibend und lesbar (z. B. `feat:`, `fix:`, `docs:`)?
+- [ ] Wurden unnötige Debug-Logs entfernt oder per `NODE_ENV` abgesichert?
+- [ ] Wurden Änderungen getestet (lokal, ggf. auf Testsystem)?
+
+---
+
+## 🧭 Onboarding-freundlich?
+
+- [ ] Könnte ein neuer Entwickler mit den aktuellen Dokumenten verstehen, was wie funktioniert?
+- [ ] Gibt es Hinweise zur Architektur, API-Flows oder Besonderheiten im Code?
+
+---
+
+Du kannst diese Checkliste in jedem Projekt beibehalten und auf deine Arbeitsweise anpassen.
diff --git a/docs/docs/components/README.md b/docs/docs/components/README.md
new file mode 100644
index 000000000..53c7cd71e
--- /dev/null
+++ b/docs/docs/components/README.md
@@ -0,0 +1,77 @@
+
+
+# 🧩 `components/` – Übersicht über alle UI-Komponenten
+
+Dieses Verzeichnis enthält die gesamten React-Komponenten der TALAS-Kartenanwendung.
+Sie sind thematisch gegliedert in Teilbereiche für Kontextmenüs, POIs, Polylinien, Modale und die zentrale `MapComponent`.
+
+---
+
+## 📁 Strukturübersicht
+
+```bash
+components/
+├── contextmenu/ # Komponenten für rechte Maustaste & Kontextaktionen
+│ ├── CoordinatePopup.js
+│ └── useMapContextMenu.js
+
+├── gisPolylines/ # Polylinien (Kabelstrecken)
+│ ├── PolylineContextMenu.js
+│ └── icons/
+│ ├── CircleIcon.js
+│ ├── EndIcon.js
+│ ├── StartIcon.js
+│ └── SupportPointIcons.js
+
+├── icons/devices/overlapping/ # Zusätzliche Overlap-Icons für Geräte
+│ └── PlusRoundIcon.js
+
+├── mainComponent/ # Hauptkomponenten für Karteninitialisierung
+│ ├── MapComponent.js
+│ └── hooks/
+│ └── useInitializeMap.js
+
+├── pois/ # POI-spezifische Modale
+│ ├── AddPOIModal.js
+│ └── PoiUpdateModal.js
+
+├── uiWidgets/ # UI-Widgets
+│ ├── CoordinateInput.js
+│ ├── VersionInfoModal.js
+│ ├── TestScript.js
+│ └── mapLayersControlPanel/
+│ ├── EditModeToggle.js
+│ └── MapLayersControlPanel.js
+```
+
+---
+
+## 🔎 Beschreibung der Hauptbereiche
+
+### `contextmenu/`
+
+Rechtsklick-Menüs für Marker, POIs, Polylinien. Steuert Anzeige & Verhalten.
+
+### `gisPolylines/`
+
+Komponenten für das Zeichnen, Bearbeiten und Interagieren mit Linien/Strecken.
+
+### `mainComponent/`
+
+Zentrale Leaflet-Map-Logik & Initialisierung via `MapComponent` und `useInitializeMap`.
+
+### `pois/`
+
+Modale für das Hinzufügen und Bearbeiten von POIs (Points of Interest).
+
+### `uiWidgets/`
+
+Komponenten wie Eingabefelder für Koordinaten-Suche, Infoboxen und Control Panel für Geräte Layers .
+
+---
+
+## ✅ Besonderheiten
+
+- Verwendet **Tailwind CSS** für Styling
+- Integration mit Redux, Leaflet, OverlappingMarkerSpiderfier
+- Vollständig modular & testbar aufgebaut
diff --git a/docs/docs/components/TestScript.md b/docs/docs/components/TestScript.md
new file mode 100644
index 000000000..c8184a986
--- /dev/null
+++ b/docs/docs/components/TestScript.md
@@ -0,0 +1,44 @@
+
+
+# 🧪 TestScript.js
+
+Ein einfaches React-Testskript zur Laufzeitüberprüfung von Codefragmenten in `setupPolylines.js`.
+
+## Zweck
+
+Dieses Skript durchsucht die geladene `setupPolylines.js`-Datei (per `raw-loader`) nach bestimmten Kontextmenüeinträgen:
+
+- „Stützpunkt entfernen“
+- „Stützpunkt hinzufügen“
+
+## Vorgehen
+
+- Lädt `setupPolylines.js` als Text via `!!raw-loader!`
+- Nutzt reguläre Ausdrücke zur Prüfung
+- Gibt Ergebnisse farblich formatiert in der Konsole aus
+
+## Ausgaben
+
+| Zustand | Beschreibung |
+|-------------|-----------------------------------------------------|
+| ✅ Test bestanden | Der gesuchte Text wurde gefunden |
+| ❌ Test fehlgeschlagen | Der gesuchte Text fehlt in der Datei |
+| ℹ️ Info | Neutrale Zusatzinformationen in der Konsole |
+
+## Besonderheiten
+
+- Kein visuelles UI – Rückmeldung nur über `console.log`
+- Eignet sich als Dev-Hilfe für Refactoring oder PR-Checks
+
+## Beispielausgabe
+
+```plaintext
+✔ Test bestanden: Der Text für 'Stützpunkt entfernen' wurde gefunden.
+ℹ️ Info: Überprüfung abgeschlossen.
+```
+
+## Hinweise
+
+- Wird automatisch beim Mount (via `useEffect`) ausgeführt
+- `return null` → keine sichtbare Ausgabe
+
diff --git a/docs/docs/components/contextmenu/CoordinatePopup.md b/docs/docs/components/contextmenu/CoordinatePopup.md
new file mode 100644
index 000000000..05048fe80
--- /dev/null
+++ b/docs/docs/components/contextmenu/CoordinatePopup.md
@@ -0,0 +1,32 @@
+
+
+# 📌 CoordinatePopup.js
+
+Zeigt ein modales Fenster mit Koordinateninformationen an, z. B. aus einem Kontextmenü heraus.
+
+## Features
+
+- Darstellung eines Koordinatenwerts (`lat,lng`)
+- Kopieren in die Zwischenablage (Clipboard API + Fallback)
+- Modal zentriert mit Tailwind CSS
+- Zwei Buttons: „Kopieren“ und „Schließen“
+
+## Props
+
+| Name | Typ | Beschreibung |
+| ------------- | ---------- | -------------------------------------------- |
+| `isOpen` | `boolean` | Steuert Sichtbarkeit des Modals |
+| `coordinates` | `string` | Zu zeigende Koordinaten (z. B. `"53.2,8.1"`) |
+| `onClose` | `function` | Wird bei Klick auf „Schließen“ ausgelöst |
+
+## Design
+
+- Tailwind-Klassen für zentriertes Layout (`fixed`, `inset-0`, `z-50`)
+- Leicht animierter Button-Hover
+
+## Interne Logik
+
+- Nutzt `navigator.clipboard.writeText` oder Fallback mit `document.execCommand("copy")`
+- Stoppt Event-Bubbling, um Klick außerhalb zu erkennen
+
+🔙 [Zurück zur Übersicht](./README.md)
diff --git a/docs/docs/components/contextmenu/README.md b/docs/docs/components/contextmenu/README.md
new file mode 100644
index 000000000..9a2cff810
--- /dev/null
+++ b/docs/docs/components/contextmenu/README.md
@@ -0,0 +1,43 @@
+
+
+# 🖱️ `contextmenu/` – Kontextmenü-Komponenten
+
+Dieses Verzeichnis enthält Komponenten und Hooks zur Anzeige und Steuerung von Kontextmenüs in der Leaflet-Kartenanwendung. Sie dienen der Interaktion mit POIs, Koordinaten und Layer-Objekten per Rechtsklick.
+
+---
+
+## 📂 Enthaltene Dateien
+
+| Datei | Beschreibung |
+| ------------------------------------------------ | ---------------------------------------------------------------------- |
+| [`CoordinatePopup.js`](./CoordinatePopup.md) | Zeigt ein kleines Kontextfenster mit Koordinaten und Copy-Funktion |
+| [`useMapContextMenu.js`](./useMapContextMenu.md) | Hook zur Initialisierung und Verwaltung des Kontextmenüs auf der Karte |
+
+---
+
+## 🔄 Verwendung
+
+Diese Komponenten sind typischerweise eingebunden in:
+
+- [`MapComponent.js`](../mainComponent/MapComponent.md)
+- [`PolylineContextMenu.js`](../gisPolylines/PolylineContextMenu.md)
+- Marker- und Linienfunktionen aus `setupDevices`, `setupPolylines`
+
+---
+
+## 🎯 Ziel
+
+Ermöglicht einfache Benutzerinteraktion mit:
+
+- Geräten
+- Koordinaten
+- POIs
+- Streckenabschnitten
+
+---
+
+## 📚 Weitere Dokumentation
+
+Alle Markdown-Dateien für Komponenten befinden sich im `/docs/components/contextmenu/` Verzeichnis.
+
+🔙 [Zurück zu `components`](../README.md)
diff --git a/docs/docs/components/contextmenu/useMapContextMenu.md b/docs/docs/components/contextmenu/useMapContextMenu.md
new file mode 100644
index 000000000..4c88560ee
--- /dev/null
+++ b/docs/docs/components/contextmenu/useMapContextMenu.md
@@ -0,0 +1,30 @@
+
+
+# 🖱️ useMapContextMenu.js
+
+Initialisiert Kontextmenüeinträge für die Leaflet-Karte.
+Wird typischerweise in `initializeMap()` oder `MapComponent` verwendet.
+
+## Kontextmenüeinträge
+
+| Eintrag | Funktion |
+| -------------------- | ----------------------------------------------- |
+| Koordinaten anzeigen | Öffnet `CoordinatePopup` mit aktueller Position |
+| Reinzoomen | Zoomt 3 Stufen näher an das Zentrum heran |
+| Rauszoomen | Zoomt 3 Stufen heraus |
+| Hier zentrieren | Verschiebt Kartenzentrum auf Klickposition |
+| POI hinzufügen | (nur bei `editMode=true`) öffnet POI-Dialog |
+
+## Parameter
+
+```js
+addItemsToMapContextMenu(map, menuItemAdded, setMenuItemAdded, setShowCoordinatesModal, setShowPoiModal, setPopupCoordinates, openPopupWithCoordinates);
+```
+
+## Besonderheiten
+
+- Prüft auf `localStorage.editMode` für POI-Eintrag
+- FlyTo-Animationen für Zoom-Vorgänge mit dynamischer Dauer
+- Modularer Aufbau: `openPopupWithCoordinates` wird extern übergeben
+
+ 🔙 [Zurück zu contextmenu ](./README.md)
diff --git a/docs/docs/components/gisPolylines/PolylineContextMenu.md b/docs/docs/components/gisPolylines/PolylineContextMenu.md
new file mode 100644
index 000000000..32ab16ae0
--- /dev/null
+++ b/docs/docs/components/gisPolylines/PolylineContextMenu.md
@@ -0,0 +1,34 @@
+
+
+# 📐 PolylineContextMenu.js
+
+Ein einfaches benutzerdefiniertes Kontextmenü zur Interaktion mit Linien (Polylinien) auf der Karte.
+
+## Zweck
+
+Das Menü erlaubt folgende Interaktionen:
+
+- ➕ „Stützpunkt hinzufügen“
+- ➖ „Stützpunkt entfernen“
+- ❌ „Schließen“
+
+Wird dynamisch positioniert anhand der Klickkoordinaten (`position.x`, `position.y`).
+
+## Props
+
+| Prop | Typ | Beschreibung |
+|---------------|-----------|----------------------------------------------------|
+| `position` | `{x, y}` | Position in Pixelkoordinaten (z. B. von Mausereignis) |
+| `onAddPoint` | `function`| Handler für „Stützpunkt hinzufügen“ |
+| `onRemovePoint` | `function` | Handler für „Stützpunkt entfernen“ |
+| `onClose` | `function`| Handler zum Schließen des Menüs |
+
+## Styling
+
+- Absolut positioniertes `div`
+- Weißer Hintergrund, schwarzer Rahmen
+- Kein Tailwind – purer Inline-Style
+
+## Verwendung
+
+Eingebettet z. B. in `setupPolylines.js` oder `PolylineLayerManager`, um rechte Mausklicks auf Linien zu behandeln.
diff --git a/docs/docs/components/gisPolylines/icons/CircleIcon.md b/docs/docs/components/gisPolylines/icons/CircleIcon.md
new file mode 100644
index 000000000..6b063073c
--- /dev/null
+++ b/docs/docs/components/gisPolylines/icons/CircleIcon.md
@@ -0,0 +1,16 @@
+
+
+# 🔘 CircleIcon.js
+
+Ein einfacher, grauer runder Marker als Stützpunkt in einer Polyline.
+
+## Eigenschaften
+
+- Stil: grauer Kreis mit schwarzem Rand
+- Größe: 10×10 px, IconSize 25×25 px (wegen Klickfläche)
+- Klasse: `custom-circle-icon`
+
+## Verwendung
+
+Wird in Polylinien als Zwischenpunkt gesetzt. Inaktiv, aber sichtbar.
+
diff --git a/docs/docs/components/gisPolylines/icons/EndIcon.md b/docs/docs/components/gisPolylines/icons/EndIcon.md
new file mode 100644
index 000000000..28189bd5a
--- /dev/null
+++ b/docs/docs/components/gisPolylines/icons/EndIcon.md
@@ -0,0 +1,15 @@
+
+
+# 🔲 EndIcon.js
+
+Ein Viereck zur Markierung des Endpunkts einer Polyline.
+
+## Eigenschaften
+
+- Stil: graues Quadrat mit schwarzem Rand
+- Größe: 14×14 px
+- Klasse: `custom-end-icon`
+
+## Verwendung
+
+Wird am letzten Punkt einer Linie gesetzt, z. B. `lineData.coordinates[line.length - 1]`
diff --git a/docs/docs/components/gisPolylines/icons/StartIcon.md b/docs/docs/components/gisPolylines/icons/StartIcon.md
new file mode 100644
index 000000000..a09d2a3d9
--- /dev/null
+++ b/docs/docs/components/gisPolylines/icons/StartIcon.md
@@ -0,0 +1,15 @@
+
+
+# 🔺 StartIcon.js
+
+Ein SVG-Dreieck zur Markierung des Startpunkts einer Polyline.
+
+## Eigenschaften
+
+- Schwarzes Dreieck mit grauem Overlay (Polygon SVG)
+- Größe: 18×18 px
+- Klasse: `custom-start-icon`
+
+## Verwendung
+
+Wird am ersten Punkt einer Polyline platziert.
diff --git a/docs/docs/components/gisPolylines/icons/SupportPointIcons.md b/docs/docs/components/gisPolylines/icons/SupportPointIcons.md
new file mode 100644
index 000000000..1e0e102a6
--- /dev/null
+++ b/docs/docs/components/gisPolylines/icons/SupportPointIcons.md
@@ -0,0 +1,20 @@
+
+
+# ➕➖ SupportPointIcons.js
+
+Definiert zwei Icons für interaktive Stützpunkte in einer Polyline:
+
+## AddSupportPointIcon
+
+- Grüner Kreis mit weißem Rand und Pluszeichen
+- `iconSize`: 24×24 px
+
+## RemoveSupportPointIcon
+
+- Roter Kreis mit weißem Rand und Minuszeichen
+- `iconSize`: 24×24 px
+
+## Verwendung
+
+- Hinzufügen/Entfernen von Zwischenpunkten in der Bearbeitungsansicht (editMode)
+- Marker erscheinen z. B. bei Maus-Hover oder per Kontextmenü
diff --git a/docs/docs/components/icons/devices/overlapping/PlusRoundIcon.md b/docs/docs/components/icons/devices/overlapping/PlusRoundIcon.md
new file mode 100644
index 000000000..42d3b2569
--- /dev/null
+++ b/docs/docs/components/icons/devices/overlapping/PlusRoundIcon.md
@@ -0,0 +1,26 @@
+
+
+# ➕ PlusRoundIcon.js
+
+Ein einfaches Leaflet-Icon, das ein rundes Pluszeichen darstellt.
+Wird für zusätzliche UI-Markierungen auf Geräten oder überlappenden Icons verwendet.
+
+## Eigenschaften
+
+| Attribut | Wert |
+|--------------|--------------------|
+| `iconUrl` | `/img/plus_round.png` |
+| `iconSize` | `[22, 22]` |
+| `iconAnchor` | `[25, 55]` |
+| `className` | `absolute top-0 left-0 z-10` (Tailwind)
+
+## Verwendung
+
+- Dient als Overlay-Symbol, z. B. für „Gerät hinzufügen“ oder zur Darstellung über bestehenden Icons
+- Durch die `z-10`-Klasse immer im Vordergrund sichtbar
+- Kombinierbar mit OverlappingMarkerSpiderfier oder Marker-Gruppen
+
+## Hinweis
+
+- Die Bilddatei `/img/plus_round.png` muss vorhanden sein
+- Kann bei Bedarf dynamisch durch ein anderes Icon ersetzt werden
diff --git a/docs/docs/components/mainComponent/MapComponent.md b/docs/docs/components/mainComponent/MapComponent.md
new file mode 100644
index 000000000..7099b50c9
--- /dev/null
+++ b/docs/docs/components/mainComponent/MapComponent.md
@@ -0,0 +1,71 @@
+
+
+# 🗺️ MapComponent.js
+
+Die zentrale React-Komponente zur Darstellung und Steuerung der Leaflet-Karte.
+Bindet alle Marker, Layer, POIs, Linien und das Kontextmenü dynamisch ein.
+
+---
+
+## 🎯 Zweck
+
+- Initialisiert die Leaflet-Karte (`useInitializeMap`)
+- Bindet Marker & Polylinien über Redux und eigene Hooks
+- Steuerung über Redux-Slices wie `selectedArea`, `zoomTrigger`, `polylineVisible`
+- Kontextmenüs für Karte, POIs, Polylinien
+- Unterstützung für Editierfunktionen über `editMode` (localStorage)
+
+---
+
+## 🧱 Hauptbestandteile
+
+- `useEffect`-Hooks zum Laden und Aktualisieren von:
+ - Kartenlayern, POIs, Linien, Rechte, Systeme, Positionen
+- Marker-Logik für 15+ Layergruppen (TALAS, ECI, GMA, etc.)
+- Marker-Overlapping mit `OverlappingMarkerSpiderfier`
+- Kontextmenüs (Karte & Polylinie)
+- UI-Komponenten:
+ - `MapLayersControlPanel`
+ - `CoordinateInput`
+ - `CoordinatePopup`
+ - `AddPOIModal`, `PoiUpdateModal`, `VersionInfoModal`
+
+---
+
+## 🧠 Zustand & Redux
+
+Verwendet umfangreiche Redux-Slices zur Steuerung von:
+
+- Linienstatus, POI-Typen, POI-Icons
+- Gerätesysteme & Rechte
+- Sichtbarkeit einzelner Layergruppen
+- Aktuelle Selektion (Area, Gerät, POI)
+
+---
+
+## 🔧 Lokale Steuerung
+
+- EditMode wird aus `localStorage` gelesen
+- Karte speichert Zoom & Center dauerhaft im Browser
+- Kontextmenü-Einträge ändern sich je nach Rechten & Modus
+
+---
+
+## 🧪 Besonderheiten
+
+- Fehlerbehandlung für `contextmenu`-Fehler eingebaut → Auto-Neuladen
+- Alle Marker-Updates mit Overlapping-Check & Z-Index-Steuerung
+- Linien enthalten dynamische Tooltips mit `tooltipContents`
+- Initiale Datenabfrage über Redux-Thunk-Kaskade
+
+---
+
+## 🔗 Abhängigkeiten
+
+- Leaflet, OverlappingMarkerSpiderfier, React-Toastify
+- Redux Toolkit (Thunks + Selectors)
+- Tailwind CSS für visuelles Layout
+
+---
+
+📄 Pfad: `/components/mainComponent/MapComponent.js`
diff --git a/docs/docs/components/mainComponent/hooks/useInitializeMap.md b/docs/docs/components/mainComponent/hooks/useInitializeMap.md
new file mode 100644
index 000000000..05b5acfa9
--- /dev/null
+++ b/docs/docs/components/mainComponent/hooks/useInitializeMap.md
@@ -0,0 +1,53 @@
+
+
+# 🪄 useInitializeMap.js
+
+Custom React-Hook zur Initialisierung der Leaflet-Karte.
+Ermöglicht die einfache Übergabe aller nötigen Parameter und abstrahiert die `initializeMap(...)`-Logik.
+
+---
+
+## 📦 Zweck
+
+- Führt `initializeMap(...)` nur **einmal** aus, wenn `mapRef` existiert und `map === null`
+- Kapselt die Initialisierung in ein `useEffect`
+
+---
+
+## 🔧 Parameter
+
+| Name | Typ | Beschreibung |
+|--------------------------|------------|---------------------------------------------------|
+| `map` | `LeafletMap` (Zustand) | Wird initialisiert, wenn `null` |
+| `mapRef` | `ref` | Referenz auf `
` |
+| `setMap` | `function` | Callback zum Setzen der Karteninstanz |
+| `setOms` | `function` | Callback für OverlappingMarkerSpiderfier |
+| `setMenuItemAdded` | `function` | Wird genutzt, um mehrfaches Menü-Setup zu verhindern |
+| `addItemsToMapContextMenu` | `function` | Logik zum Hinzufügen von Kontextmenüeinträgen |
+| `hasRights` | `boolean` | Steuerung, ob POI-Menüs angezeigt werden dürfen |
+| `setPolylineEventsDisabled` | `function` | Aktiviert/Deaktiviert Polyline-Events global |
+
+---
+
+## 🌐 Verwendung
+
+In `MapComponent.js`:
+
+```js
+useInitializeMap(
+ map,
+ mapRef,
+ setMap,
+ setOms,
+ setMenuItemAdded,
+ addItemsToMapContextMenu,
+ hasRights,
+ (value) => dispatch(setDisabled(value))
+);
+```
+
+---
+
+## 📁 Quelle
+
+Wrappt `initializeMap()` aus `/utils/initializeMap.js`
diff --git a/docs/docs/components/pois/AddPOIModal.md b/docs/docs/components/pois/AddPOIModal.md
new file mode 100644
index 000000000..0a3017925
--- /dev/null
+++ b/docs/docs/components/pois/AddPOIModal.md
@@ -0,0 +1,28 @@
+
+
+# ➕ AddPOIModal.js
+
+Zeigt ein modales Formular an, um einen neuen POI auf der Karte zu erstellen.
+Die Koordinaten (`latlng`) werden automatisch übernommen.
+
+## Funktionen
+
+- POI-Name, Typ und zugehöriges Gerät auswählbar
+- Koordinatenanzeige (`lat`, `lng`)
+- Dynamisches Laden der Gerätedaten und POI-Typen
+- Fehleranzeige bei fehlgeschlagenem Speichern
+- Löst `addPoiThunk` + Refresh-Trigger (`incrementTrigger`) aus
+
+## Props
+
+| Prop | Typ | Beschreibung |
+|----------|-----------|--------------------------------------------------|
+| `onClose` | `function` | Schließt das Modal |
+| `map` | `Leaflet` | (optional) zum Schließen evtl. offener Popups |
+| `latlng` | `object` | Koordinaten für den neuen POI |
+
+## Redux
+
+- `fetchPoiTypThunk`, `fetchPoiIconsDataThunk`
+- `addPoiThunk`, `resetAddPoiStatus`
+
diff --git a/docs/docs/components/pois/PoiUpdateModal.md b/docs/docs/components/pois/PoiUpdateModal.md
new file mode 100644
index 000000000..df17e5ec7
--- /dev/null
+++ b/docs/docs/components/pois/PoiUpdateModal.md
@@ -0,0 +1,29 @@
+
+
+# ✏️ PoiUpdateModal.js
+
+Ein Dialog zur Aktualisierung oder Löschung bestehender POIs.
+
+## Features
+
+- Zeigt aktuellen Namen, Beschreibung, Gerät und Typ
+- Gerät und Typ auswählbar via `react-select`
+- Unterstützt Löschen und Speichern von POIs
+- Eingebundene Sicherheitsabfrage bei Löschen
+
+## Props
+
+| Prop | Typ | Beschreibung |
+|------------|-----------|---------------------------------------|
+| `onClose` | `function`| Schließt das Modal |
+| `poiData` | `object` | Bestehende POI-Daten zur Bearbeitung |
+
+## Redux
+
+- `updatePoiThunk`, `deletePoiThunk`
+- `fetchLocationDevicesThunk`, `fetchPoiTypThunk`
+
+## Technisches
+
+- Dynamische Gerätegruppenfilterung basierend auf `mapLayersVisibility`
+- Formfelder mit `react-select` für bessere UX
diff --git a/docs/docs/components/uiWidgets/CoordinateInput.md b/docs/docs/components/uiWidgets/CoordinateInput.md
new file mode 100644
index 000000000..ebbb81513
--- /dev/null
+++ b/docs/docs/components/uiWidgets/CoordinateInput.md
@@ -0,0 +1,101 @@
+
+
+# 📍 CoordinateInput.js
+
+Die Komponente `CoordinateInput` stellt ein einfaches Eingabefeld für geografische Koordinaten (Latitude, Longitude) bereit.
+Sie dient typischerweise dazu, einen bestimmten Punkt auf der Karte zu fokussieren bzw. zu markieren.
+
+---
+
+## 🔧 Pfad
+
+```bash
+/components/uiWidgets/CoordinateInput.js
+```
+
+---
+
+## 🎯 Zweck
+
+- Eingabe von Koordinaten (z. B. `53.2,8.1`)
+- Übergabe dieser Koordinaten an eine Callback-Funktion zur weiteren Verarbeitung
+- Positioniert sich dauerhaft in der linken oberen Ecke der Seite (z. B. zur schnellen Navigation)
+
+---
+
+## ⚙️ Props
+
+| Prop | Typ | Beschreibung |
+| --------------------- | ---------- | ------------------------------------------------------------------------------------- |
+| `onCoordinatesSubmit` | `function` | Wird beim Abschicken des Formulars mit dem eingegebenen Koordinaten-String aufgerufen |
+
+---
+
+## 🧩 Interne Logik
+
+```js
+const [coordinates, setCoordinates] = useState("");
+```
+
+- Der Eingabewert wird im lokalen State gespeichert
+- Beim Submit (`onSubmit`) wird `onCoordinatesSubmit(coordinates)` aufgerufen, wenn gesetzt
+
+---
+
+## 🧰 UI-Aufbau
+
+- Eingabefeld für Text: Erwartet `lat,lng`
+- Button: „Zu Marker zoomen“
+- Position: `fixed top-5 left-5` → dauerhaft sichtbar
+
+---
+
+## 🎨 Gestaltung (Tailwind CSS)
+
+| Element | Klassen |
+| --------- | ---------------------------------------------------------------- |
+| Container | `fixed top-5 left-5 z-50 bg-white shadow-lg rounded-lg p-4 w-72` |
+| Input | `border p-2 rounded w-full mb-2` |
+| Button | `bg-blue-500 text-white p-2 rounded w-full hover:bg-blue-600` |
+
+---
+
+## 🧪 Testfälle
+
+| Eingabe | Erwartung |
+| -------------------------- | --------------------------------------------------------- |
+| `53.2,8.1` | Callback `onCoordinatesSubmit("53.2,8.1")` wird ausgelöst |
+| Leer | Callback wird ausgelöst mit leerem String |
+| Buttonklick | Löst `handleSubmit()` aus |
+| Enter-Taste im Eingabefeld | Löst ebenfalls Submit aus |
+
+---
+
+## 💡 Erweiterungsideen
+
+- Validierung des Formats (`lat,lng`) vor dem Absenden
+- Automatisches Zentrieren der Leaflet-Karte in der Callback-Funktion
+- Optionale Markierung des Punkts auf der Karte
+
+---
+
+## 📄 Verwendung
+
+Beispiel in einer Map-Komponente:
+
+```jsx
+
{
+ const [lat, lng] = coords.split(",").map(Number);
+ map.setView([lat, lng], 16); // Leaflet
+ }}
+/>
+```
+
+---
+
+## 📦 Verwandte Komponenten
+
+- `MapComponent.js` – kann die übergebenen Koordinaten zur Zentrierung oder Marker-Erstellung nutzen
+
+---
diff --git a/docs/docs/components/uiWidgets/VersionInfoModal.md b/docs/docs/components/uiWidgets/VersionInfoModal.md
new file mode 100644
index 000000000..e211afb8e
--- /dev/null
+++ b/docs/docs/components/uiWidgets/VersionInfoModal.md
@@ -0,0 +1,92 @@
+
+
+# 🪪 VersionInfoModal.js
+
+Das `VersionInfoModal` ist ein modales Fenster zur Anzeige von Unternehmensinformationen und der aktuellen App-Version.
+Es wird meist im Footer oder als Info-Schaltfläche in der Benutzeroberfläche eingeblendet.
+
+---
+
+## 🔧 Pfad
+
+```bash
+/components/uiWidgets/VersionInfoModal.js
+```
+
+---
+
+## 🎯 Zweck
+
+Die Komponente informiert Nutzer über:
+
+- Die **aktuelle TALAS.Map Version**
+- Die **Firmenadresse und Kontaktdaten** der Littwin Systemtechnik GmbH & Co. KG
+- Eine zentral platzierte Grafik mit dem TALAS-Logo
+- Eine Schaltfläche zum Schließen des Modals
+
+---
+
+## ⚙️ Props
+
+| Prop | Typ | Beschreibung |
+| ----------------------- | ---------- | -------------------------------------------------------------- |
+| `showVersionInfoModal` | `boolean` | Steuert, ob das Modal angezeigt wird |
+| `closeVersionInfoModal` | `function` | Callback zum Schließen des Modals |
+| `APP_VERSION` | `string` | Versionstext (z. B. `1.1.188`), meist aus `.env.local` geladen |
+
+---
+
+## 💡 Verhalten
+
+- Wird `showVersionInfoModal` auf `true` gesetzt, erscheint das Modal zentriert über einem halbtransparenten Overlay
+- Klick auf den Hintergrund (schwarzes Overlay) oder auf „Schließen“ führt `closeVersionInfoModal()` aus
+
+---
+
+## 🧩 Inhalt im Modal
+
+```plaintext
++--------------------------+
+| [Logo_TALAS.png] |
+| Littwin GmbH Adresse |
+| Telefon & E-Mail |
+| Version: 1.1.188 |
+| [Schließen] Button |
++--------------------------+
+```
+
+---
+
+## 🎨 Gestaltung
+
+- Modal-Layout mit Tailwind CSS (`fixed`, `z-50`, `bg-white`, `rounded`, `shadow`)
+- Schaltfläche `Schließen` reagiert auf Hover mit Farbwechsel (`hover:bg-blue-700`)
+- Design folgt der UI-Ästhetik von TALAS.web
+
+---
+
+## 🧪 Testfälle
+
+| Bedingung | Erwartung |
+| ------------------------------- | ----------------------------------------- |
+| `showVersionInfoModal = true` | Modal wird angezeigt |
+| Klick auf Hintergrund | Modal wird geschlossen |
+| Klick auf „Schließen“-Button | Modal wird geschlossen |
+| Version `APP_VERSION = 1.1.188` | Text „TALAS.Map Version 1.1.188“ sichtbar |
+
+---
+
+## 📦 Verknüpfte Dateien
+
+- `.env.local` enthält z. B. `NEXT_PUBLIC_APP_VERSION=1.1.188`
+- Aufruf in `Footer` oder `Layout` zur Anzeige bei Klick auf „Version“
+
+---
+
+## 🛠 Verbesserungsideen
+
+- ESC-Taste als Schließen-Funktion ergänzen
+- Option für dynamische Anzeige von Changelog-Link
+- Automatischer Import von Version via `process.env.NEXT_PUBLIC_APP_VERSION`
+
+---
diff --git a/docs/docs/components/uiWidgets/mapLayersControlPanel/EditModeToggle.md b/docs/docs/components/uiWidgets/mapLayersControlPanel/EditModeToggle.md
new file mode 100644
index 000000000..237bf2d8c
--- /dev/null
+++ b/docs/docs/components/uiWidgets/mapLayersControlPanel/EditModeToggle.md
@@ -0,0 +1,85 @@
+
+
+# ✏️ EditModeToggle.js
+
+Die Komponente `EditModeToggle` stellt einen interaktiven Umschalter für den Bearbeitungsmodus bereit.
+Sie ermöglicht das Ein- und Ausschalten des Modus, in dem POIs, Polylines (Strecken) und Bereiche bearbeitet werden können.
+
+---
+
+## 📦 Pfad
+
+```bash
+/components/uiWidgets/mapLayersControlPanel/EditModeToggle.js
+```
+
+---
+
+## 🧩 Zweck
+
+Der Bearbeitungsmodus wirkt sich auf die Interaktivität der Map aus:
+
+- Wenn **aktiv**:
+ - Checkboxen für Layer sind deaktiviert
+ - POI-Funktionen (Hinzufügen, Verschieben, Löschen) werden ermöglicht
+- Wenn **inaktiv**:
+ - Keine Bearbeitung möglich
+ - UI ist auf Betrachtung beschränkt
+
+---
+
+## 🖱 Verhalten
+
+Beim Klick auf das Icon:
+
+1. Wird der lokale Zustand `editMode` umgeschaltet
+2. `localStorage` speichert den neuen Status (`true` oder `false`)
+3. Die Seite wird neu geladen (`window.location.reload()`), um globale Effekte zu aktivieren
+
+---
+
+## 🧠 Interner Zustand
+
+```js
+const [editMode, setEditMode] = useState(() => localStorage.getItem("editMode") === "true");
+```
+
+- Initialisiert aus `localStorage`
+- Persistente Speicherung des Zustands browserseitig
+- Aufruf in anderen Komponenten (z. B. `MapLayersControlPanel.js`) basiert ebenfalls auf diesem Wert
+
+---
+
+## 🧰 UI-Darstellung
+
+- Verwendet **Material-UI-Icons**:
+ - 🟢 `ModeEditIcon`: Bearbeitungsmodus **aus** → wird angeboten zum **Aktivieren**
+ - 🔴 `EditOffIcon`: Bearbeitungsmodus **ein** → wird angeboten zum **Deaktivieren**
+- Tooltip informiert den Nutzer über die jeweilige Aktion
+
+---
+
+## 🧪 Testfälle
+
+| Zustand | Erwartetes Verhalten |
+| ------------------ | ------------------------------------------------------ |
+| `editMode = false` | Icon: ✏️ → Tooltip: „Bearbeitungsmodus aktivieren“ |
+| `editMode = true` | Icon: 🚫✏️ → Tooltip: „Bearbeitungsmodus deaktivieren“ |
+| Klick auf Icon | Status umschalten, Seite neu laden |
+
+---
+
+## 💡 Erweiterungsideen
+
+- 🔄 Statt `window.location.reload()` → globalen Zustand über Redux-Dispatch steuern
+- 📢 Feedback-Toast nach Umschalten anzeigen (z. B. „Bearbeitungsmodus aktiviert“)
+- 🧩 Integration in Redux-Store zur globalen Synchronisierung ohne Reload
+
+---
+
+## 📄 Verwandte Komponenten
+
+- `MapLayersControlPanel.js`: liest `localStorage.editMode` und deaktiviert Layer-Checkboxen im aktiven Modus
+- `PoiUpdateModal`, `AddPOIModal`: nutzen den Bearbeitungsmodus für UI-Freigabe
+
+---
diff --git a/docs/docs/components/uiWidgets/mapLayersControlPanel/MapLayersControlPanel.md b/docs/docs/components/uiWidgets/mapLayersControlPanel/MapLayersControlPanel.md
new file mode 100644
index 000000000..8f47f7b7e
--- /dev/null
+++ b/docs/docs/components/uiWidgets/mapLayersControlPanel/MapLayersControlPanel.md
@@ -0,0 +1,150 @@
+
+
+# 🧭 MapLayersControlPanel.js
+
+Dieses UI-Widget zeigt eine interaktive Steuereinheit für Layer, POIs und Stationsbereiche auf der rechten Seite der Karte.
+Es ist vollständig an den Redux-Store angebunden und reagiert auf Änderungen der Layer-Sichtbarkeit, Bearbeitungsmodus und Stationsauswahl.
+
+---
+
+## 🔧 Pfad
+
+```bash
+/components/uiWidgets/mapLayersControlPanel/MapLayersControlPanel.js
+```
+
+---
+
+## 📌 Zweck
+
+Das `MapLayersControlPanel` ermöglicht Nutzern:
+
+- Die Auswahl eines Stationsbereichs (Dropdown)
+- Das Aktivieren/Deaktivieren einzelner GIS-Systeme (Checkboxen)
+- Das Anzeigen von POIs oder Kabelstrecken (TALAS-spezifisch)
+- Das Ein-/Ausschalten des Bearbeitungsmodus
+- Die Steuerung der Karten-Zentrierung über ein Icon
+
+---
+
+## 🧠 Verwendete Redux-Slices
+
+| Slice | Zweck |
+| -------------------------------- | ----------------------------------------------------------- |
+| `gisStationsStaticDistrictSlice` | Enthält die Gerätebereiche (mit `.Points`) |
+| `gisSystemStaticSlice` | Enthält die konfigurierten GIS-Systeme mit Anzeigeerlaubnis |
+| `mapLayersSlice` | Speichert die Sichtbarkeit aller Layer |
+| `poiLayerVisibleSlice` | Steuert Sichtbarkeit der POIs |
+| `polylineLayerVisibleSlice` | Steuert Sichtbarkeit der Kabelstrecken (TALAS) |
+| `zoomTriggerSlice` | Löst Neuzentrierung der Karte aus |
+| `selectedAreaSlice` | Speichert den gewählten Bereich/Station |
+
+---
+
+## 🔄 Logikübersicht
+
+- **Dropdown Stationsauswahl:**
+ Wird dynamisch aus `GisStationsStaticDistrict.Points` befüllt
+ Nur eindeutige `Area_Name`, wenn `System` erlaubt ist
+
+- **Checkboxen für Layer:**
+ Zeigen alle Systeme aus `GisSystemStatic`, bei denen `Allow === 1`
+ Sonderfall: `TALAS` erhält ein Untermenü für „Kabelstrecken“
+
+- **Lokale Speicherung:**
+ Sichtbarkeiten, Bearbeitungsmodus und POI-Zustand werden in `localStorage` geschrieben und bei Initialisierung geladen
+
+- **Bearbeitungsmodus:**
+ Wenn aktiv (`editMode === true`), sind Layer-Checkboxen deaktiviert
+
+---
+
+## 📥 Wichtige Funktionen
+
+| Funktion | Zweck |
+| -------------------------------- | ---------------------------------------- |
+| `handleAreaChange()` | Setzt `selectedArea` im Redux Store |
+| `handleCheckboxChange()` | Schaltet Sichtbarkeit einzelner Layer |
+| `handlePolylineCheckboxChange()` | Aktiviert Sichtbarkeit von Kabelstrecken |
+| `handlePoiCheckboxChange()` | Aktiviert Sichtbarkeit von POIs |
+| `handleIconClick()` | Setzt Station zurück und triggert Zoom |
+
+---
+
+## 🧩 UI-Struktur
+
+```plaintext
+[Dropdown: Station wählen]
+[🟩 EditModeToggle] [🔍 Expand-Icon]
+
+[ ] GIS-System 1
+[ ] GIS-System 2
+ └─ [ ] Kabelstrecken (falls "TALAS")
+
+[ ] POIs
+```
+
+---
+
+## 🐞 Debug-Hinweise
+
+- Debug-Logs:
+ `console.log("🔍 GisStationsStaticDistrict Inhalt:", ...)`
+ werden ausgegeben, um sicherzustellen, dass Daten korrekt geladen wurden
+
+- Warnungen:
+ Falls `.Points` nicht vorhanden ist, wird dies in der Konsole gewarnt
+
+---
+
+## 🛠 ToDos / Erweiterungsideen
+
+- Checkboxen für Bereiche („Bereiche“, „Standorte“) sind bereits vorbereitet, aber auskommentiert
+- Möglichkeit, Tooltips zu aktivieren/deaktivieren?
+- Gruppierung von Layern nach Typ (z. B. Linien, Geräte, POIs)
+
+---
+
+## 📄 Verwendete Komponenten
+
+- `EditModeToggle` – Schaltfläche für Umschalten des Bearbeitungsmodus
+
+---
+
+## ✅ Zustand: Lokal & Global
+
+- **Global:** `useSelector(...)` aus Redux
+- **Lokal:** `useState(...)` für editMode, stationListing, systemListing
+
+---
+
+## 📦 LokaleStorage-Keys
+
+| Key | Beschreibung |
+| --------------------- | ------------------------------------------ |
+| `poiVisible` | Sichtbarkeit der POI-Marker |
+| `polylineVisible` | Sichtbarkeit der Kabelstrecken |
+| `mapLayersVisibility` | Sichtbarkeiten der einzelnen Systeme |
+| `editMode` | Zustand des Bearbeitungsmodus (true/false) |
+
+---
+
+## 🧪 Testempfehlung
+
+- Dropdown zeigt erwartete `Area_Name`-Werte?
+- Layer-Checkboxen werden korrekt gespeichert?
+- Bei `TALAS` erscheint zusätzlich: „Kabelstrecken“?
+- Bei Wechsel der Station wird `setSelectedArea` ausgelöst?
+
+---
+
+## 🧩 Verknüpfte Dateien
+
+- `redux/slices/webservice/gisStationsStaticDistrictSlice.js`
+- `redux/slices/webservice/gisSystemStaticSlice.js`
+- `redux/slices/mapLayersSlice.js`
+- `redux/slices/selectedAreaSlice.js`
+- `redux/slices/database/polylines/polylineLayerVisibleSlice.js`
+- `redux/slices/database/pois/poiLayerVisibleSlice.js`
+
+---
diff --git a/docs/docs/config/README.md b/docs/docs/config/README.md
new file mode 100644
index 000000000..92b772c2f
--- /dev/null
+++ b/docs/docs/config/README.md
@@ -0,0 +1,38 @@
+
+
+# ⚙️ Konfigurationsübersicht (/config)
+
+Dieses Verzeichnis enthält zentrale Konfigurationsdateien, die das Verhalten der gesamten App steuern.
+Hier sind die wichtigsten Dateien, ihre Aufgaben und Verlinkungen zur Dokumentation:
+
+---
+
+## 📦 [`appVersion.js`](./appVersion.md)
+
+- Definiert die aktuelle Version der App (`APP_VERSION`)
+- Wird z. B. im `VersionInfoModal` angezeigt
+
+---
+
+## 🗺️ [`layers.js`](./layers.md)
+
+- Enthält alle Leaflet-Layergruppen für die Kartenanzeige
+- Zentrale Steuerung der aktiven Layer: TALAS, GMA, Cisco, etc.
+
+---
+
+## 📁 [`paths.js`](./paths.md)
+
+- Berechnet den Basis-Pfad aus `.env.local`
+- Liefert `BASE_URL`, z. B. `/talas5`
+
+---
+
+## 🌐 [`urls.js`](./urls.md)
+
+- Erzeugt dynamisch API- und Tile-URLs
+- Verwendet `window.location.origin` → keine statischen Ports notwendig
+
+---
+
+Diese Konfiguration macht das Projekt flexibel für mehrere Hosting-Umgebungen.
diff --git a/docs/docs/config/appVersion.md b/docs/docs/config/appVersion.md
new file mode 100644
index 000000000..092947d6f
--- /dev/null
+++ b/docs/docs/config/appVersion.md
@@ -0,0 +1,16 @@
+
+
+# 📦 appVersion.js
+
+Diese Datei exportiert die aktuelle App-Version, die an mehreren Stellen in der UI angezeigt werden kann – z. B. im `VersionInfoModal`.
+
+## Inhalt
+
+```js
+export const APP_VERSION = "1.1.193";
+```
+
+## Verwendung
+
+- Im Footer oder Info-Fenster
+- Vergleich von Client- vs. Serverversion
diff --git a/docs/docs/config/config.md b/docs/docs/config/config.md
new file mode 100644
index 000000000..ca279618f
--- /dev/null
+++ b/docs/docs/config/config.md
@@ -0,0 +1,60 @@
+
+
+# ⚙️ config.js – zentrale Konfiguration und Umgebungssteuerung
+
+## Zweck
+
+Diese Datei enthält zentrale Konfigurationswerte, die abhängig von der Umgebung
+(Entwicklung oder Produktion) dynamisch erzeugt werden.
+
+---
+
+## Ersetzungen von Umgebungsvariablen
+
+Vorher wurden folgende `.env.local` Variablen verwendet:
+
+- `NEXT_PUBLIC_BASE_URL`
+- `NEXT_PUBLIC_SERVER_URL`
+
+Diese wurden ersetzt durch dynamische Berechnung anhand von:
+
+```env
+NEXT_PUBLIC_API_PORT_MODE=dev
+```
+
+---
+
+## Dynamische Berechnung von `serverURL`
+
+Die Konfiguration entscheidet anhand des Modus:
+
+```js
+const mode = process.env.NEXT_PUBLIC_API_PORT_MODE;
+
+const serverURL = mode === "dev" ? `${window.location.protocol}//${window.location.hostname}:80` : `${window.location.origin}`;
+```
+
+→ Dadurch funktioniert der Code ohne Anpassung bei IP-/Server-Wechseln oder Portunterschieden.
+
+---
+
+## Konfigurationswerte
+
+- `USE_MOCK_API`: aktiviert lokale Mock-Daten
+- `serverURL`: Basis für Webservice-Aufrufe (`/talas5/...`)
+- `mapGisStationsStaticDistrictUrl`: komplette zusammengesetzte URL
+- `useMockStationData`: true/false aus `.env.local`
+
+---
+
+## Vorteile
+
+| Punkt | Vorteil |
+| ------------------------------- | ---------------------------------------- |
+| Keine festen IPs oder Ports | ✅ Weniger Fehler, einfacher Umzug |
+| Einheitlich mit anderen Dateien | ✅ Gleiche Struktur wie Webservice-Setup |
+| Lesbar & leicht anpassbar | ✅ Auch ohne Doku sofort verständlich |
+
+---
+
+📄 Pfad: `/docs/frontend/config/config.md`
diff --git a/docs/docs/config/layers.md b/docs/docs/config/layers.md
new file mode 100644
index 000000000..dca2328a3
--- /dev/null
+++ b/docs/docs/config/layers.md
@@ -0,0 +1,21 @@
+
+
+# 🗺️ layers.js
+
+Diese Datei definiert alle verfügbaren Leaflet-Layergruppen im Projekt.
+Sie werden global als `MAP_LAYERS` exportiert und enthalten alle Systemtypen (TALAS, GMA, OTDR etc.).
+
+## Struktur
+
+```js
+export const MAP_LAYERS = {
+ TALAS: new L.layerGroup(),
+ ...
+ lineLayer: new L.LayerGroup(),
+};
+```
+
+## Verwendung
+
+- Initialisierung der Leaflet-Karte
+- Zuweisung von Markern und Linien
diff --git a/docs/docs/config/paths.md b/docs/docs/config/paths.md
new file mode 100644
index 000000000..39dfd3ba7
--- /dev/null
+++ b/docs/docs/config/paths.md
@@ -0,0 +1,19 @@
+
+
+# 📁 paths.js
+
+Berechnet den sauberen `BASE_URL`-Pfad basierend auf `.env.local → NEXT_PUBLIC_BASE_PATH`.
+Entfernt führende und abschließende Slashes.
+
+## Beispiel
+
+Wenn `NEXT_PUBLIC_BASE_PATH = "/talas5/"`, wird `BASE_URL = "/talas5"` gesetzt.
+
+```js
+const BASE_PATH = basePathRaw.replace(/^\/|\/$/g, "");
+export const BASE_URL = BASE_PATH ? `/${BASE_PATH}` : "";
+```
+
+## Nutzung
+
+- Für konsistente Pfadangaben im gesamten Projekt
diff --git a/docs/docs/config/urls.md b/docs/docs/config/urls.md
new file mode 100644
index 000000000..ec94784eb
--- /dev/null
+++ b/docs/docs/config/urls.md
@@ -0,0 +1,18 @@
+
+
+# 🌐 urls.js
+
+Diese Datei berechnet dynamisch URLs basierend auf `window.location.origin`.
+Alle Endpunkte (API, Tiles, Server) werden ohne Port oder Hardcoding erzeugt.
+
+## Exportierte Konstanten
+
+- `BASE_URL` → `/api`
+- `SERVER_URL` → Hostname ohne Port (für Links)
+- `PROXY_TARGET` → z. B. `http://hostname:4000`
+- `OFFLINE_TILE_LAYER` → Offline-Kachelpfad
+- `MAP_TILES_LAYER` → Alias für `OFFLINE_TILE_LAYER`
+
+## Hinweis
+
+Alle Berechnungen erfolgen nur **clientseitig** (`typeof window !== "undefined"`).
diff --git a/docs/docs/env.local..md b/docs/docs/env.local..md
new file mode 100644
index 000000000..8cff0f562
--- /dev/null
+++ b/docs/docs/env.local..md
@@ -0,0 +1,7 @@
+
+
+### /docs/env.local.schema.md
+
+- `NEXT_PUBLIC_API_HOST` → Webservice-DNS oder IP
+- `NEXT_PUBLIC_API_BASE_PATH` → z. B. `talas5`, per Deployment steuerbar
+- `DB_NAME` → hängt vom Kundenprojekt ab
diff --git a/docs/docs/hooks/layers/useAreaMarkersLayer.md b/docs/docs/hooks/layers/useAreaMarkersLayer.md
new file mode 100644
index 000000000..6b8d698fc
--- /dev/null
+++ b/docs/docs/hooks/layers/useAreaMarkersLayer.md
@@ -0,0 +1,13 @@
+
+
+# 🗺️ useAreaMarkersLayer.js
+
+Lädt Bereichs-/Stationsmarker aus einer API und rendert sie auf der Karte.
+
+## Features
+
+- Marker mit Tooltip für Standort & Bereich
+- Draggable Marker (verschiebbar)
+- Automatischer API-Fetch mit `fetch(...)`
+- Dynamisches Layer-Handling via localStorage ("mapLayersVisibility")
+- Automatisches Speichern neuer Koordinaten per `updateAreaThunk()`
diff --git a/docs/docs/hooks/layers/useCiscoRouterMarkersLayer.md b/docs/docs/hooks/layers/useCiscoRouterMarkersLayer.md
new file mode 100644
index 000000000..18947c16c
--- /dev/null
+++ b/docs/docs/hooks/layers/useCiscoRouterMarkersLayer.md
@@ -0,0 +1,11 @@
+
+
+# 🌐 useCiscoRouterMarkersLayer.js
+
+Hook zur Verwaltung aller Cisco-Router-Marker in der Leaflet-Karte.
+
+## Funktionen
+
+- Lädt Geräte per `createAndSetDevices(6, ...)`
+- Fügt Marker hinzu & registriert Popup/Kontextmenü
+- Verwendet `checkOverlappingMarkers(...)`
diff --git a/docs/docs/hooks/layers/useDauzMarkersLayer.md b/docs/docs/hooks/layers/useDauzMarkersLayer.md
new file mode 100644
index 000000000..6cac8ac43
--- /dev/null
+++ b/docs/docs/hooks/layers/useDauzMarkersLayer.md
@@ -0,0 +1,11 @@
+
+
+# 🔧 useDauzMarkersLayer.js
+
+Spezialisierter Hook zur Verwaltung von DAUZ-Gerätemarkern (System-ID: 110)
+
+## Verhalten
+
+- Marker mit Popup & Kontextmenü
+- Nutzung von `createAndSetDevices(...)`
+- Sichtbarkeit direkt über Kartenlayer steuerbar
diff --git a/docs/docs/hooks/layers/useDrawLines.md b/docs/docs/hooks/layers/useDrawLines.md
new file mode 100644
index 000000000..039d75015
--- /dev/null
+++ b/docs/docs/hooks/layers/useDrawLines.md
@@ -0,0 +1,11 @@
+
+
+# 🧬 useDrawLines.js
+
+Hook zur Konvertierung von GIS-Linien in kartentaugliche Koordinatenpaare.
+
+## Schritte
+
+- Lädt Linien mit `fetchGisLinesThunk()`
+- Wandelt `points[x, y]` in Leaflet-Koordinaten `[lat, lng]` um
+- Gibt `setLinePositions([...])` zurück
diff --git a/docs/docs/hooks/layers/useEciMarkersLayer.md b/docs/docs/hooks/layers/useEciMarkersLayer.md
new file mode 100644
index 000000000..b228e4b92
--- /dev/null
+++ b/docs/docs/hooks/layers/useEciMarkersLayer.md
@@ -0,0 +1,11 @@
+
+
+# 🛰️ useEciMarkersLayer.js
+
+Verwaltet die Darstellung und Events für ECI-Marker (System-ID: 2)
+
+## Features
+
+- Kontextmenü & Popup für jeden Marker
+- Erkennung überlappender Marker (`checkOverlappingMarkers`)
+- Nutzung von `createAndSetDevices(...)`
diff --git a/docs/docs/hooks/layers/useGmaMarkersLayer.md b/docs/docs/hooks/layers/useGmaMarkersLayer.md
new file mode 100644
index 000000000..d4dee7f2b
--- /dev/null
+++ b/docs/docs/hooks/layers/useGmaMarkersLayer.md
@@ -0,0 +1,11 @@
+
+
+# 🌡️ useGmaMarkersLayer.js
+
+Spezialhook für GMA-Marker mit Messwertanzeige (LT, FBT, GT, RLF).
+
+## Besonderheiten
+
+- Tooltip enthält Temperatur-/Feuchtigkeitswerte aus Redux
+- Eigenes Kontextmenü mit Zoom/Zentrieren
+- Verwendet `marker.options.areaName` zur Messzuordnung
diff --git a/docs/docs/hooks/layers/useLteModemMarkersLayer.md b/docs/docs/hooks/layers/useLteModemMarkersLayer.md
new file mode 100644
index 000000000..e7f411b27
--- /dev/null
+++ b/docs/docs/hooks/layers/useLteModemMarkersLayer.md
@@ -0,0 +1,10 @@
+
+
+# 📶 useLteModemMarkersLayer.js
+
+Steuert Marker vom Typ LTE-Modem (System-ID: 5)
+
+## Features
+
+- Standard-Kontextmenü + Popup
+- Integration mit OMS und Overlap-Check
diff --git a/docs/docs/hooks/layers/useMessstellenMarkersLayer.md b/docs/docs/hooks/layers/useMessstellenMarkersLayer.md
new file mode 100644
index 000000000..3e3cddb78
--- /dev/null
+++ b/docs/docs/hooks/layers/useMessstellenMarkersLayer.md
@@ -0,0 +1,10 @@
+
+
+# 🧾 useMessstellenMarkersLayer.js
+
+Für Messstellen-Marker (System-ID: 13)
+
+## Verhalten
+
+- Einfache Marker mit Tooltip
+- Nutzung von `createAndSetDevices(...)` + Kontextmenü
diff --git a/docs/docs/hooks/layers/useOtdrMarkersLayer.md b/docs/docs/hooks/layers/useOtdrMarkersLayer.md
new file mode 100644
index 000000000..b7d79ff12
--- /dev/null
+++ b/docs/docs/hooks/layers/useOtdrMarkersLayer.md
@@ -0,0 +1,10 @@
+
+
+# 🔍 useOtdrMarkersLayer.js
+
+Darstellung von OTDR-Messpunkten (System-ID: 9)
+
+## Funktionen
+
+- Popup-Interaktion beim Hover
+- Marker mit Kontextmenü via `addContextMenuToMarker`
diff --git a/docs/docs/hooks/layers/useSiemensMarkersLayer.md b/docs/docs/hooks/layers/useSiemensMarkersLayer.md
new file mode 100644
index 000000000..8dc2c6ae4
--- /dev/null
+++ b/docs/docs/hooks/layers/useSiemensMarkersLayer.md
@@ -0,0 +1,7 @@
+# 🏭 useSiemensMarkersLayer.js
+
+Für Siemens-Geräte (System-ID: 8).
+
+- Marker mit Kontextmenü und Overlap-Prüfung
+- Integration mit OMS
+- Nutzung von `checkOverlappingMarkers(...)`
\ No newline at end of file
diff --git a/docs/docs/hooks/layers/useSmsfunkmodemMarkersLayer.md b/docs/docs/hooks/layers/useSmsfunkmodemMarkersLayer.md
new file mode 100644
index 000000000..be77c5efc
--- /dev/null
+++ b/docs/docs/hooks/layers/useSmsfunkmodemMarkersLayer.md
@@ -0,0 +1,7 @@
+# 📡 useSmsfunkmodemMarkersLayer.js
+
+Filtert `GisSystemStatic` nach SMS Modem (System 111 oder Name).
+
+- Icon: `/img/icons/pois/sms-funkmodem.png`
+- Kontextmenü & Popup
+- Sichtbarkeit über `isVisible` steuerbar
\ No newline at end of file
diff --git a/docs/docs/hooks/layers/useSonstigeMarkersLayer.md b/docs/docs/hooks/layers/useSonstigeMarkersLayer.md
new file mode 100644
index 000000000..cf876ffef
--- /dev/null
+++ b/docs/docs/hooks/layers/useSonstigeMarkersLayer.md
@@ -0,0 +1,7 @@
+# ❔ useSonstigeMarkersLayer.js
+
+Für alle Geräte mit System-ID 200 (Sonstige).
+
+- Klassische Leaflet-Marker
+- Kontextmenü und Popup
+- Nutzung von `createAndSetDevices(...)`
\ No newline at end of file
diff --git a/docs/docs/hooks/layers/useTalasMarkersLayer.md b/docs/docs/hooks/layers/useTalasMarkersLayer.md
new file mode 100644
index 000000000..ce85c4ffc
--- /dev/null
+++ b/docs/docs/hooks/layers/useTalasMarkersLayer.md
@@ -0,0 +1,6 @@
+# 🌐 useTalasMarkersLayer.js
+
+Für TALAS-Systeme (System-ID: 1).
+
+- Popup + Kontextmenü auf Marker
+- Fügt Marker zuerst zu OMS, dann zu Karte hinzu
\ No newline at end of file
diff --git a/docs/docs/hooks/layers/useTalasiclMarkersLayer.md b/docs/docs/hooks/layers/useTalasiclMarkersLayer.md
new file mode 100644
index 000000000..cfd112e60
--- /dev/null
+++ b/docs/docs/hooks/layers/useTalasiclMarkersLayer.md
@@ -0,0 +1,6 @@
+# 🔗 useTalasiclMarkersLayer.js
+
+Spezialhook für Geräte vom Typ TALASICL (System-ID: 100).
+
+- Erstellt Marker mit Standardverhalten
+- Kontextmenü, Popup, Overlap-Prüfung
\ No newline at end of file
diff --git a/docs/docs/hooks/layers/useTkComponentsMarkersLayer.md b/docs/docs/hooks/layers/useTkComponentsMarkersLayer.md
new file mode 100644
index 000000000..cf615a30b
--- /dev/null
+++ b/docs/docs/hooks/layers/useTkComponentsMarkersLayer.md
@@ -0,0 +1,6 @@
+# ⚙️ useTkComponentsMarkersLayer.js
+
+Für TK-Komponenten (System-ID: 30).
+
+- Lädt Marker via `createAndSetDevices`
+- Marker-Koordinaten können debug-geloggt werden
\ No newline at end of file
diff --git a/docs/docs/hooks/layers/useUlafMarkersLayer.md b/docs/docs/hooks/layers/useUlafMarkersLayer.md
new file mode 100644
index 000000000..ee55b88cc
--- /dev/null
+++ b/docs/docs/hooks/layers/useUlafMarkersLayer.md
@@ -0,0 +1,7 @@
+# 💡 useUlafMarkersLayer.js
+
+Spezialhook für ULAF-Systeme (System-ID: 0).
+
+- Marker mit ULAF-Icon
+- Kontextmenü und Popup (statisch)
+- Dynamisch generierter Popupinhalt
\ No newline at end of file
diff --git a/docs/docs/hooks/layers/useWagoMarkersLayer.md b/docs/docs/hooks/layers/useWagoMarkersLayer.md
new file mode 100644
index 000000000..144ce8c83
--- /dev/null
+++ b/docs/docs/hooks/layers/useWagoMarkersLayer.md
@@ -0,0 +1,6 @@
+# 🧰 useWagoMarkersLayer.js
+
+Für WAGO-Systeme (System-ID: 7).
+
+- Kontextmenü, Popup, Overlapping-Support
+- OMS-Integration und Layer-Hinzufügung
\ No newline at end of file
diff --git a/docs/docs/hooks/layers/useWdmMarkersLayer.md b/docs/docs/hooks/layers/useWdmMarkersLayer.md
new file mode 100644
index 000000000..2453e5542
--- /dev/null
+++ b/docs/docs/hooks/layers/useWdmMarkersLayer.md
@@ -0,0 +1,7 @@
+# 🔷 useWdmMarkersLayer.js
+
+Verwaltet WDM-Marker (System-ID: 10) in Leaflet.
+
+- Marker mit Kontextmenü
+- Mouseover-Popup
+- Nutzung von `createAndSetDevices(...)`
\ No newline at end of file
diff --git a/docs/docs/hooks/useCreateAndSetDevices.md b/docs/docs/hooks/useCreateAndSetDevices.md
new file mode 100644
index 000000000..05f0d430a
--- /dev/null
+++ b/docs/docs/hooks/useCreateAndSetDevices.md
@@ -0,0 +1,17 @@
+
+
+# 🛠️ useCreateAndSetDevices.js
+
+Custom Hook zur Initialisierung von Leaflet-Markern für ein bestimmtes System.
+Bindet `createAndSetDevices(...)` automatisch in einen `useEffect`.
+
+## Parameter
+
+- `systemId`: ID des Gerätesystems (z. B. 1 = TALAS)
+- `setMarkersFunction`: Funktion zum Speichern der erzeugten Marker
+- `GisSystemStatic`: Systemdaten aus Redux
+- `priorityConfig`: Konfigurationsobjekt zur Prioritätsbewertung
+
+## Redux
+
+- Bezieht `polylineEventsDisabled` aus Redux zur Steuerung der Interaktivität
diff --git a/docs/docs/hooks/useDynamicMarkerLayers.md b/docs/docs/hooks/useDynamicMarkerLayers.md
new file mode 100644
index 000000000..8035346f6
--- /dev/null
+++ b/docs/docs/hooks/useDynamicMarkerLayers.md
@@ -0,0 +1,17 @@
+
+
+# 🔄 useDynamicMarkerLayers.js
+
+Verwaltet alle Marker-Layergruppen dynamisch und modular in einem zentralen Hook.
+
+## Funktionen
+
+- Initialisiert LayerGroups für 15+ Gerätesysteme
+- Ruft `createAndSetDevices()` pro System-ID auf
+- Führt automatisch Overlap-Check aus (`checkOverlappingMarkers`)
+- Speichert erzeugte Marker in `setMarkerStates`
+
+## Voraussetzungen
+
+- Karte (`map`) muss bereit sein
+- `GisSystemStatic` + `priorityConfig` + Marker-Setter müssen übergeben werden
diff --git a/docs/docs/hooks/useLayerVisibility.md b/docs/docs/hooks/useLayerVisibility.md
new file mode 100644
index 000000000..a76503523
--- /dev/null
+++ b/docs/docs/hooks/useLayerVisibility.md
@@ -0,0 +1,15 @@
+
+
+# 👁️ useLayerVisibility.js
+
+Custom Hook zur dynamischen Steuerung von Layer-Sichtbarkeit basierend auf Redux.
+
+## Features
+
+- Entfernt oder zeigt Marker je nach `mapLayersVisibility`
+- Nutzt `OverlappingMarkerSpiderfier` (`oms`)
+- Normalisiert Layer-Keys (z. B. `"GMA"` → `"gma"`)
+
+## Intern
+
+Verwendet `addContextMenuToMarker()` zur Kontextmenüintegration pro Marker.
diff --git a/docs/docs/hooks/useLineData.md b/docs/docs/hooks/useLineData.md
new file mode 100644
index 000000000..82b42230a
--- /dev/null
+++ b/docs/docs/hooks/useLineData.md
@@ -0,0 +1,19 @@
+
+
+# 📊 useLineData.js
+
+Lädt Linienstatusdaten (Farben, Tooltips) aus zwei Webservices in Redux und bereitet sie auf.
+
+## Rückgabe
+
+- `lineColors`: Farben pro Linie basierend auf Status
+- `tooltipContents`: HTML-Tooltip pro Modul/Station
+
+## Datenquellen
+
+- `fetchGisLinesThunk()` (Struktur)
+- `fetchGisLinesStatusThunk()` (Statusdaten)
+
+## Intern
+
+- Nutzt Map `valueMap`, um Messwert, Schleifenwert, Meldungen zu gruppieren
diff --git a/docs/docs/hooks/useMapComponentState.md b/docs/docs/hooks/useMapComponentState.md
new file mode 100644
index 000000000..e1a3b092b
--- /dev/null
+++ b/docs/docs/hooks/useMapComponentState.md
@@ -0,0 +1,18 @@
+
+
+# 🧠 useMapComponentState.js
+
+Sammelt zentrale UI-Zustände und Redux-Daten für die `MapComponent`.
+
+## Rückgabe
+
+- POI-Typen + Ladezustand
+- `deviceName` (z. B. erstes Gerät)
+- `locationDeviceData`
+- `priorityConfig`
+- `menuItemAdded`, `setMenuItemAdded`
+- Sichtbarkeit des POI-Layers
+
+## Redux
+
+- `fetchPoiTypThunk`, `fetchGisStationsStaticDistrictThunk`, `fetchPriorityConfigThunk`
diff --git a/docs/docs/hooks/useMarkerLayers.md b/docs/docs/hooks/useMarkerLayers.md
new file mode 100644
index 000000000..46c160be0
--- /dev/null
+++ b/docs/docs/hooks/useMarkerLayers.md
@@ -0,0 +1,16 @@
+
+
+# 📍 useMarkerLayers.js
+
+Steuert das Hinzufügen oder Entfernen von Markern in ein Leaflet-Map-Layer.
+
+## Verwendung
+
+```js
+useMarkerLayers(map, gmaMarkers, "GMA");
+```
+
+## Redux
+
+- Liest `mapLayersVisibility` aus dem Store
+- Reagiert automatisch auf Änderungen
diff --git a/docs/docs/hooks/usePolylineTooltipLayer.md b/docs/docs/hooks/usePolylineTooltipLayer.md
new file mode 100644
index 000000000..aa42d0a7d
--- /dev/null
+++ b/docs/docs/hooks/usePolylineTooltipLayer.md
@@ -0,0 +1,15 @@
+
+
+# 💬 usePolylineTooltipLayer.js
+
+Initialisiert und steuert Polylinien + Tooltip-Verhalten für Linienmessdaten.
+
+## Funktion
+
+- Nutzt `setupPolylines(...)` zur Marker- und Linienerstellung
+- Tooltip-Anzeige bei `mouseover`, dynamisch positioniert
+- Entfernt alte Marker und Polylinien automatisch
+
+## Parameter (gekürzt)
+
+- `map`, `markers`, `setMarkers`, `setPolylines`, `linePositions`, `tooltipContents`, `lineColors`, etc.
diff --git a/docs/docs/nssm-exe-installation.md b/docs/docs/nssm-exe-installation.md
new file mode 100644
index 000000000..b03858905
--- /dev/null
+++ b/docs/docs/nssm-exe-installation.md
@@ -0,0 +1,56 @@
+
+
+````markdown
+- Als Administrator Eingabeaufforderung oder PowerShell öffnen
+
+- Navigiere zu dem NodeMap Projekt Verzeichnis:
+ ```shell
+ C:\Users\Administrator>cd C:\inetpub\wwwroot\talas5\nodeMap
+ ```
+````
+
+- Befehl zum Erstellen eines Dienstes:
+ Führen Sie den folgenden Befehl aus, um einen neuen Dienst zu erstellen:
+
+ ```shell
+ nssm.exe install NodeMapService
+ ```
+
+ Nachdem Sie diesen Befehl ausgeführt haben, öffnet sich ein NSSM-Dialogfenster.
+
+ **Dienstkonfiguration:**
+ In dem geöffneten NSSM-Dialogfenster müssen Sie einige Parameter angeben:
+
+ - **Path:** Der Pfad zur ausführbaren Datei, die der Dienst ausführen soll.
+ ```shell
+ C:\inetpub\wwwroot\talas5\nodeMap\StartNodeApp.bat
+ ```
+ - **Startup directory:** Das Verzeichnis, in dem die Anwendung gestartet werden soll.
+ ```shell
+ C:\inetpub\wwwroot\talas5\nodeMap
+ ```
+ - **Arguments:** kann leer gelassen werden.
+
+- Dienst starten:
+ Sobald der Dienst erstellt wurde, können Sie ihn starten.
+ Das können Sie entweder über die Eingabeaufforderung oder über die Diensteverwaltung von Windows tun.
+ Um den Dienst über die Eingabeaufforderung zu starten, verwenden Sie den folgenden Befehl:
+ ```shell
+ nssm.exe start DienstName
+ ```
+
+---
+
+- **Dienst bearbeiten:**
+ ```shell
+ nssm.exe edit NodeMapService
+ ```
+- **Dienst entfernen:**
+ ```shell
+ nssm.exe remove NodeMapService confirm
+ ```
+ dauert bis 1 Minute
+
+```
+
+```
diff --git a/docs/docs/pages/_app.md b/docs/docs/pages/_app.md
new file mode 100644
index 000000000..6e7523f39
--- /dev/null
+++ b/docs/docs/pages/_app.md
@@ -0,0 +1,26 @@
+
+
+# 🌐 _app.js
+
+Diese Datei stellt die Haupt-Wrap-Komponente der Next.js-App dar.
+Sie initialisiert globale Provider wie den Redux Store.
+
+## Features
+
+- Importiert globales CSS (`styles/global.css`)
+- Bindet Redux `Provider` um alle Seiten-Komponenten
+- Ermöglicht Zugriff auf Store in allen Seiten
+
+## Struktur
+
+```jsx
+
+
+
+```
+
+## Pfad
+
+```bash
+/pages/_app.js
+```
\ No newline at end of file
diff --git a/docs/docs/pages/api/[...path].md b/docs/docs/pages/api/[...path].md
new file mode 100644
index 000000000..d76f3bed0
--- /dev/null
+++ b/docs/docs/pages/api/[...path].md
@@ -0,0 +1,45 @@
+
+
+# 🌐 [...path].js
+
+Next.js API-Proxy-Handler mit `http-proxy-middleware`.
+Dient als Middleware zur Weiterleitung von API-Requests an das Backend (z. B. Raspberry Pi oder Entwicklungsserver).
+
+---
+
+## 🔧 Funktion
+
+- Leitet alle Requests von `/api/...` an das definierte `target` weiter
+- Entfernt `/api` aus dem URL-Pfad
+- Erlaubt Cross-Origin Requests mit `changeOrigin: true`
+
+---
+
+## Ziel-Logik
+
+```js
+const mode = process.env.NEXT_PUBLIC_API_PORT_MODE;
+const target = mode === "dev" ? "http://localhost:80" : "http://localhost";
+```
+
+---
+
+## Beispiel
+
+- Frontend-Request: `GET /api/GisStationsStaticDistrict`
+- Weitergeleitet an: `GET http://localhost:80/GisStationsStaticDistrict`
+
+---
+
+## Besonderheiten
+
+- Ermöglicht portunabhängige Proxy-Nutzung über `.env`
+- Setzt `logLevel: "debug"` zur Diagnose
+
+---
+
+## Pfad
+
+```bash
+/pages/api/[...path].js
+```
\ No newline at end of file
diff --git a/docs/docs/pages/api/talas_v5_DB/area/readArea.md b/docs/docs/pages/api/talas_v5_DB/area/readArea.md
new file mode 100644
index 000000000..3d32a3e64
--- /dev/null
+++ b/docs/docs/pages/api/talas_v5_DB/area/readArea.md
@@ -0,0 +1,28 @@
+
+
+# 📥 readArea.js
+
+Liest Bereichskoordinaten (`location_coordinates`) aus der Datenbank basierend auf `idMaps` (und optional `idLocation`).
+
+## Methode
+
+- `GET`
+
+## URL-Parameter
+
+| Name | Beschreibung |
+|-------------|--------------------------------------|
+| `m` | Karten-ID (entspricht `idMaps`) |
+| `idLocation` | (optional) ID eines bestimmten Bereichs |
+
+## Verhalten
+
+- Joint `location`, `location_coordinates` und `area`-Tabelle
+- Gibt strukturierte Daten mit `x`, `y`, `location_name`, `area_name` zurück
+- Nutzt MySQL-Pool (`getPool()`)
+
+## Beispiel
+
+```http
+GET /api/talas_v5_DB/area/readArea?m=3
+```
\ No newline at end of file
diff --git a/docs/docs/pages/api/talas_v5_DB/area/updateArea.md b/docs/docs/pages/api/talas_v5_DB/area/updateArea.md
new file mode 100644
index 000000000..01d7fd46d
--- /dev/null
+++ b/docs/docs/pages/api/talas_v5_DB/area/updateArea.md
@@ -0,0 +1,32 @@
+
+
+# 📤 updateArea.js
+
+Aktualisiert die Koordinaten eines Bereichs (`location_coordinates`) basierend auf `idLocation` und `idMap`.
+
+## Methode
+
+- `PUT`
+
+## Request-Body
+
+```json
+{
+ "idLocation": 12,
+ "idMap": 3,
+ "x": 53.21421,
+ "y": 8.43212
+}
+```
+
+## Verhalten
+
+- Führt `UPDATE location_coordinates SET x=?, y=? WHERE idLocation=? AND idMaps=?`
+- Gibt bei Erfolg `success: true` zurück
+- Nutzt MySQL-Pool und `connection.release()`
+
+## Fehlerbehandlung
+
+- 400: Fehlende Daten
+- 404: Kein Eintrag gefunden
+- 500: Interner Fehler
\ No newline at end of file
diff --git a/docs/docs/pages/api/talas_v5_DB/device/getAllStationsNames.md b/docs/docs/pages/api/talas_v5_DB/device/getAllStationsNames.md
new file mode 100644
index 000000000..66fcda44b
--- /dev/null
+++ b/docs/docs/pages/api/talas_v5_DB/device/getAllStationsNames.md
@@ -0,0 +1,29 @@
+
+
+# 🧾 getAllStationsNames.js
+
+Liefert eine Zuordnungstabelle aller Geräte-IDs (`idLD`) zu ihren Namen (`name`).
+
+## Methode
+
+- `GET`
+
+## Antwortformat
+
+```json
+{
+ "123": "Kue 705",
+ "124": "Basisstation 1"
+}
+```
+
+## Verhalten
+
+- Nutzt Tabelle `location_device`
+- Gibt Fehler bei leerem Ergebnis (404) oder Datenbankfehler (500)
+
+## Pfad
+
+```bash
+/pages/api/talas_v5_DB/device/getAllStationsNames.js
+```
\ No newline at end of file
diff --git a/docs/docs/pages/api/talas_v5_DB/device/getDevices.md b/docs/docs/pages/api/talas_v5_DB/device/getDevices.md
new file mode 100644
index 000000000..6c1387f54
--- /dev/null
+++ b/docs/docs/pages/api/talas_v5_DB/device/getDevices.md
@@ -0,0 +1,34 @@
+
+
+# 🔌 getDevices.js
+
+API-Route zum Abrufen aller Geräteinformationen aus der `devices`-Tabelle.
+
+## Methode
+
+- `POST` (erwartet JSON-Body mit optionalem `activeSystems`-Array)
+
+## Verhalten
+
+- Führt ein einfaches `SELECT * FROM devices` aus
+- Nutzt Singleton-MySQL-Pool für Verbindung
+- Rückgabe: JSON-Array mit allen Geräteobjekten
+
+## Beispielantwort
+
+```json
+[
+ {
+ "id": 1,
+ "name": "Kue705",
+ "idsystem_typ": 1,
+ ...
+ }
+]
+```
+
+## Pfad
+
+```bash
+/pages/api/talas_v5_DB/device/getDevices.js
+```
\ No newline at end of file
diff --git a/docs/docs/pages/api/talas_v5_DB/gisLines/readGisLines.md b/docs/docs/pages/api/talas_v5_DB/gisLines/readGisLines.md
new file mode 100644
index 000000000..fb83233c7
--- /dev/null
+++ b/docs/docs/pages/api/talas_v5_DB/gisLines/readGisLines.md
@@ -0,0 +1,25 @@
+
+
+# 🧭 readGisLines.js
+
+Liefert alle Linien aus der Tabelle `gis_lines`.
+
+## Methode
+
+- `GET`
+
+## Rückgabe
+
+- JSON-Array mit Objekten aus `gis_lines`
+- Leeres Array bei keinen Treffern
+
+## Besonderheiten
+
+- Nutzt Singleton-Pool (`getPool()`)
+- Immer HTTP 200, auch bei leerem Ergebnis
+
+## Beispiel
+
+```http
+GET /api/talas_v5_DB/gisLines/readGisLines
+```
\ No newline at end of file
diff --git a/docs/docs/pages/api/talas_v5_DB/gisLines/updateLineCoordinates.md b/docs/docs/pages/api/talas_v5_DB/gisLines/updateLineCoordinates.md
new file mode 100644
index 000000000..a123286b1
--- /dev/null
+++ b/docs/docs/pages/api/talas_v5_DB/gisLines/updateLineCoordinates.md
@@ -0,0 +1,30 @@
+
+
+# ✏️ updateLineCoordinates.js
+
+Aktualisiert die `points`-Spalte einer Linie in der Tabelle `gis_lines`.
+
+## Methode
+
+- `POST`
+
+## Request-Body
+
+```json
+{
+ "idLD": 7,
+ "idModul": 2,
+ "newCoordinates": [[53.2151, 8.4522], [53.2165, 8.4531]]
+}
+```
+
+## Verhalten
+
+- Erzeugt aus Koordinaten eine `LINESTRING(...)`
+- Nutzt `ST_GeomFromText()` in MySQL
+- Transaktion mit Commit/Rollback
+
+## Fehlerfälle
+
+- 400: Ungültige oder fehlende Felder
+- 500: Datenbankfehler
\ No newline at end of file
diff --git a/docs/docs/pages/api/talas_v5_DB/locationDevice/getDeviceId.md b/docs/docs/pages/api/talas_v5_DB/locationDevice/getDeviceId.md
new file mode 100644
index 000000000..aaaff0a8d
--- /dev/null
+++ b/docs/docs/pages/api/talas_v5_DB/locationDevice/getDeviceId.md
@@ -0,0 +1,26 @@
+
+
+# 🔍 getDeviceId.js
+
+Gibt die Geräte-ID (`idLD`) zu einem übergebenen Gerätenamen zurück.
+
+## Methode
+
+- `GET`
+
+## Parameter
+
+| Name | Beschreibung |
+|-------------|----------------------|
+| `deviceName` | Der Gerätename (z. B. "Kue705") |
+
+## Antwort
+
+```json
+{ "idLD": 27 }
+```
+
+## Fehler
+
+- 400: Wenn `deviceName` fehlt
+- 404: Gerät nicht gefunden
\ No newline at end of file
diff --git a/docs/docs/pages/api/talas_v5_DB/locationDevice/locationDeviceNameById.md b/docs/docs/pages/api/talas_v5_DB/locationDevice/locationDeviceNameById.md
new file mode 100644
index 000000000..fbadfec2d
--- /dev/null
+++ b/docs/docs/pages/api/talas_v5_DB/locationDevice/locationDeviceNameById.md
@@ -0,0 +1,26 @@
+
+
+# 🏷️ locationDeviceNameById.js
+
+Gibt den Namen eines Geräts anhand seiner ID zurück.
+
+## Methode
+
+- `GET`
+
+## Parameter
+
+| Name | Beschreibung |
+|--------|------------------------|
+| `idLD` | Geräte-ID (z. B. 27) |
+
+## Antwort
+
+```json
+{ "name": "Kue705" }
+```
+
+## Fehler
+
+- 400: Fehlender Parameter
+- 404: Gerät mit ID nicht gefunden
\ No newline at end of file
diff --git a/docs/docs/pages/api/talas_v5_DB/locationDevice/locationDevices.md b/docs/docs/pages/api/talas_v5_DB/locationDevice/locationDevices.md
new file mode 100644
index 000000000..3521a8f35
--- /dev/null
+++ b/docs/docs/pages/api/talas_v5_DB/locationDevice/locationDevices.md
@@ -0,0 +1,27 @@
+
+
+# 🗂️ locationDevices.js
+
+Gibt eine vollständige Liste aller Geräte in der Tabelle `location_device` zurück.
+
+## Methode
+
+- `GET`
+
+## Verhalten
+
+- Führt `SELECT * FROM location_device ORDER BY name` aus
+- Gibt vollständige Objekte zurück
+
+## Beispielantwort
+
+```json
+[
+ {
+ "idLD": 27,
+ "name": "Kue705",
+ "description": "...",
+ ...
+ }
+]
+```
\ No newline at end of file
diff --git a/docs/docs/pages/api/talas_v5_DB/poiTyp/readPoiTyp.md b/docs/docs/pages/api/talas_v5_DB/poiTyp/readPoiTyp.md
new file mode 100644
index 000000000..244aa1827
--- /dev/null
+++ b/docs/docs/pages/api/talas_v5_DB/poiTyp/readPoiTyp.md
@@ -0,0 +1,36 @@
+
+
+# 🗂️ readPoiTyp.js
+
+Liefert alle verfügbaren POI-Typen aus der Tabelle `poityp`.
+
+## Methode
+
+- `GET`
+
+## Rückgabe
+
+- JSON-Array mit allen Einträgen in `poityp`
+
+## Besonderheiten
+
+- Gibt bei leerem Ergebnis `200` mit Warnung zurück
+- Verwendet Singleton-Verbindungspool (`getPool()`)
+
+## Beispiel
+
+```http
+GET /api/talas_v5_DB/poiTyp/readPoiTyp
+```
+
+## Antwort
+
+```json
+[
+ {
+ "idPoiTyp": 1,
+ "name": "Messgerät",
+ "icon": 12
+ }
+]
+```
\ No newline at end of file
diff --git a/docs/docs/pages/api/talas_v5_DB/pois/addPoi.md b/docs/docs/pages/api/talas_v5_DB/pois/addPoi.md
new file mode 100644
index 000000000..22c075cd4
--- /dev/null
+++ b/docs/docs/pages/api/talas_v5_DB/pois/addPoi.md
@@ -0,0 +1,25 @@
+
+
+# ➕ addPoi.js
+
+Fügt einen neuen POI (Point of Interest) zur Datenbank hinzu.
+
+## Methode
+
+- `POST`
+
+## Request-Body
+
+```json
+{
+ "name": "POI A",
+ "poiTypeId": 1,
+ "latitude": 53.2,
+ "longitude": 8.1,
+ "idLD": 27
+}
+```
+
+## Besonderheiten
+
+- Position wird als `POINT(longitude latitude)` gespeichert
\ No newline at end of file
diff --git a/docs/docs/pages/api/talas_v5_DB/pois/deletePoi.md b/docs/docs/pages/api/talas_v5_DB/pois/deletePoi.md
new file mode 100644
index 000000000..f09c740d0
--- /dev/null
+++ b/docs/docs/pages/api/talas_v5_DB/pois/deletePoi.md
@@ -0,0 +1,20 @@
+
+
+# ❌ deletePoi.js
+
+Löscht einen POI anhand seiner ID.
+
+## Methode
+
+- `DELETE`
+
+## Query-Parameter
+
+| Parameter | Beschreibung |
+|-----------|---------------------|
+| `id` | ID des POI (`idPoi`) |
+
+## Antwort
+
+- 200: Erfolgreich gelöscht
+- 404: POI nicht gefunden
\ No newline at end of file
diff --git a/docs/docs/pages/api/talas_v5_DB/pois/getPoiById.md b/docs/docs/pages/api/talas_v5_DB/pois/getPoiById.md
new file mode 100644
index 000000000..ececf24d0
--- /dev/null
+++ b/docs/docs/pages/api/talas_v5_DB/pois/getPoiById.md
@@ -0,0 +1,21 @@
+
+
+# 🔎 getPoiById.js
+
+Gibt die Beschreibung eines POIs zurück.
+
+## Methode
+
+- `GET`
+
+## Query-Parameter
+
+| Parameter | Beschreibung |
+|-----------|--------------|
+| `idPoi` | POI-ID |
+
+## Antwort
+
+```json
+{ "description": "POI A" }
+```
\ No newline at end of file
diff --git a/docs/docs/pages/api/talas_v5_DB/pois/poi-icons.md b/docs/docs/pages/api/talas_v5_DB/pois/poi-icons.md
new file mode 100644
index 000000000..26a63d1b7
--- /dev/null
+++ b/docs/docs/pages/api/talas_v5_DB/pois/poi-icons.md
@@ -0,0 +1,21 @@
+
+
+# 🖼️ poi-icons.js
+
+Gibt eine Liste aller POIs und ihrer zugehörigen Icon-Pfade zurück.
+
+## Methode
+
+- `GET`
+
+## Datenquelle
+
+- `poi` → `poiTyp` → `poiicons`
+
+## Antwort
+
+```json
+[
+ { "idPoi": 12, "path": "/icons/kue.svg" }
+]
+```
\ No newline at end of file
diff --git a/docs/docs/pages/api/talas_v5_DB/pois/readAllPOIs.md b/docs/docs/pages/api/talas_v5_DB/pois/readAllPOIs.md
new file mode 100644
index 000000000..dcd1fda01
--- /dev/null
+++ b/docs/docs/pages/api/talas_v5_DB/pois/readAllPOIs.md
@@ -0,0 +1,17 @@
+
+
+# 📋 readAllPOIs.js
+
+Gibt alle POIs mit Positionen zurück.
+
+## Methode
+
+- `GET`
+
+## Rückgabe
+
+- JSON-Array mit `idPoi`, `description`, `idPoiTyp`, `idLD`, `position`
+
+## Besonderheiten
+
+- Position wird per `ST_AsText(...)` als String geliefert
\ No newline at end of file
diff --git a/docs/docs/pages/api/talas_v5_DB/pois/updateLocation.md b/docs/docs/pages/api/talas_v5_DB/pois/updateLocation.md
new file mode 100644
index 000000000..f995a3aad
--- /dev/null
+++ b/docs/docs/pages/api/talas_v5_DB/pois/updateLocation.md
@@ -0,0 +1,23 @@
+
+
+# 🧭 updateLocation.js
+
+Aktualisiert die Position (`POINT`) eines POIs.
+
+## Methode
+
+- `POST`
+
+## Request-Body
+
+```json
+{
+ "id": 12,
+ "latitude": 53.2,
+ "longitude": 8.1
+}
+```
+
+## Antwort
+
+- 200: `{ success: true }`
\ No newline at end of file
diff --git a/docs/docs/pages/api/talas_v5_DB/pois/updatePoi.md b/docs/docs/pages/api/talas_v5_DB/pois/updatePoi.md
new file mode 100644
index 000000000..2e5088db2
--- /dev/null
+++ b/docs/docs/pages/api/talas_v5_DB/pois/updatePoi.md
@@ -0,0 +1,25 @@
+
+
+# 📝 updatePoi.js
+
+Aktualisiert Beschreibung, Typ und Gerät eines POIs.
+
+## Methode
+
+- `POST`
+
+## Request-Body
+
+```json
+{
+ "idPoi": 12,
+ "description": "POI A",
+ "idPoiTyp": 2,
+ "idLD": 27
+}
+```
+
+## Antwort
+
+- 200: Erfolgreich aktualisiert
+- 404: POI nicht gefunden
\ No newline at end of file
diff --git a/docs/docs/pages/api/talas_v5_DB/priorityConfig.md b/docs/docs/pages/api/talas_v5_DB/priorityConfig.md
new file mode 100644
index 000000000..9cc9d196d
--- /dev/null
+++ b/docs/docs/pages/api/talas_v5_DB/priorityConfig.md
@@ -0,0 +1,83 @@
+
+
+# 📊 API: /api/talas_v5_DB/priorityConfig
+
+Diese API liefert die Konfigurationsdaten für Prioritäten (z. B. „critical“, „minor“) aus der Tabelle `prio`.
+Sie wird u. a. für Meldungsanzeigen, Filter und Leaflet-Marker-Priorisierung verwendet.
+
+---
+
+## 📍 Anwendung in Leaflet – Marker-Priorität bei Überlappung
+
+Die `level`-Werte dieser Konfiguration steuern die **Darstellungsreihenfolge überlappender Marker** in Leaflet:
+
+- Marker mit **höherer Priorität** (`level = 1`, z. B. `critical`) werden **oben** dargestellt
+- Marker mit **niedriger Priorität** (`level = 100`, `101`) werden **weiter hinten** gezeichnet
+- Dadurch bleiben wichtige Meldungen stets sichtbar, selbst bei POI-Überlagerung
+
+Diese Sortierung wird z. B. bei OverlappingMarkerSpiderfier oder Clustern angewendet.
+
+---
+
+## 🔗 Route
+
+- **Pfad:** `/api/talas_v5_DB/priorityConfig`
+- **Methode:** `GET`
+- **Beschreibung:** Gibt alle aktiven Prioritätsstufen inkl. Farbcodes zurück
+
+---
+
+## 🧾 Beispielantwort
+
+**Test-URL:** [`/api/talas_v5_DB/priorityConfig`](http://10.10.0.70:3000/api/talas_v5_DB/priorityConfig)
+
+```json
+[
+ { "idprio": 0, "level": 100, "name": "kein", "color": "#ffffff" },
+ { "idprio": 1, "level": 101, "name": "gut", "color": "#99CC00" },
+ { "idprio": 5, "level": 1, "name": "critical", "color": "#FF0000" },
+ { "idprio": 7, "level": 2, "name": "major", "color": "#FF9900" },
+ { "idprio": 9, "level": 3, "name": "minor", "color": "#FFFF00" },
+ { "idprio": 10, "level": 4, "name": "system", "color": "#FF00FF" },
+ { "idprio": 12, "level": 0, "name": "Stationsausfall", "color": "#FF6600" }
+]
+```
+
+📦 Datenstruktur
+Feld Typ Beschreibung
+idprio number Eindeutige ID der Priorität
+level number Prioritätsstufe (1 = hoch, 100 = niedrig)
+name string Bezeichnung (z. B. "minor", "system", "Stationsausfall")
+color string HEX-Farbcode (z. B. #FF0000) zur visuellen Darstellung
+
+⚙️ Datenquelle
+Tabelle: prio
+
+SQL-Abfrage:
+
+sql
+
+SELECT idprio, level, name, color FROM prio;
+
+Backend: verwendet getPool() aus utils/mysqlPool.js
+
+## 🔗 Verwendet in
+
+| Datei | Zweck |
+| ----------------------------- | ------------------------------------------------------------------- |
+| `fetchPriorityConfigThunk.js` | Holt Prioritätsdaten über API und reicht sie an Redux weiter |
+| `priorityConfigSlice.js` | Speichert die geladenen Prioritätsdaten im Redux-Store |
+| `MapComponent.js` | Dispatcht Thunk zum Laden der Daten beim Start |
+| `useMapComponentState.js` | Liest `priorityConfig` aus Redux und gibt es an Marker-Setup weiter |
+| `createAndSetDevices.js` | Erzeugt Marker mit `zIndexOffset` basierend auf Priorität |
+| `useCreateAndSetDevices.js` | Hook zur Initialisierung von Geräten auf der Karte |
+| `useDynamicMarkerLayers.js` | Verwaltet Marker-Layer dynamisch (inkl. Z-Priorität) |
+
+❌ Fehlerbehandlung
+Bei DB- oder Verbindungsfehlern:
+
+json
+Copy
+Edit
+{ "error": "Fehler bei der Abfrage" }
+HTTP-Statuscode: 500
diff --git a/docs/docs/pages/api/talas_v5_DB/station/getAllStationsNames.md b/docs/docs/pages/api/talas_v5_DB/station/getAllStationsNames.md
new file mode 100644
index 000000000..ff1a7c698
--- /dev/null
+++ b/docs/docs/pages/api/talas_v5_DB/station/getAllStationsNames.md
@@ -0,0 +1,29 @@
+
+
+# 🏷️ getAllStationsNames.js
+
+Liefert eine Mapping-Tabelle aus `idLD` → `name` aller Einträge in `location_device`.
+
+## Methode
+
+- `GET`
+
+## Rückgabe
+
+```json
+{
+ "12": "Hauptstation",
+ "13": "Unterstation"
+}
+```
+
+## Verhalten
+
+- Antwort ist ein Key-Value-Objekt
+- Nutzt `reduce()` zur Map-Erstellung
+- Verwendet MySQL-Singleton-Pool
+
+## Fehler
+
+- 404: Wenn keine Daten vorhanden
+- 500: Datenbankfehler
\ No newline at end of file
diff --git a/docs/docs/pages/api/talas_v5_DB/station/getDevices.md b/docs/docs/pages/api/talas_v5_DB/station/getDevices.md
new file mode 100644
index 000000000..da765d1d8
--- /dev/null
+++ b/docs/docs/pages/api/talas_v5_DB/station/getDevices.md
@@ -0,0 +1,40 @@
+
+
+# 📦 getDevices.js
+
+Gibt alle Geräte aus der `devices`-Tabelle zurück.
+
+## Methode
+
+- `POST`
+
+## Request-Body
+
+```json
+{
+ "activeSystems": [1, 2, 3]
+}
+```
+
+⚠️ Hinweis: Im aktuellen Code wird der Parameter `activeSystems` nicht verwendet!
+
+## Rückgabe
+
+- JSON-Array mit Geräteobjekten
+
+## Beispielantwort
+
+```json
+[
+ {
+ "id": 1,
+ "name": "CPL V4.0",
+ "idsystem_typ": 1
+ }
+]
+```
+
+## Fehler
+
+- 404: Keine Ergebnisse
+- 500: Datenbankfehler
\ No newline at end of file
diff --git a/docs/docs/pages/index.md b/docs/docs/pages/index.md
new file mode 100644
index 000000000..d7da48530
--- /dev/null
+++ b/docs/docs/pages/index.md
@@ -0,0 +1,32 @@
+
+
+# 🏠 index.js (Home-Seite)
+
+Die Hauptseite der Anwendung.
+Bindet dynamisch die Leaflet-Karte (`MapComponent`) und ein Testscripting-Tool (`TestScript`).
+
+## Features
+
+- `MapComponent` ohne SSR eingebunden
+- `TestScript` prüft per Konsole Logik/Strukturen
+- Lädt POI-Daten per `fetchPoiMarkersThunk()`
+- Liest URL-Parameter `m` und `u`
+- Unterstützt POI-Hinzufügen über `addPoiThunk(...)`
+
+## Redux-Slices
+
+- `poiMarkersSlice`
+- `addPoiSlice`
+- `poiReadFromDbTrigger`
+
+## Struktur
+
+```jsx
+
+
+```
+
+## Besonderheiten
+
+- Dynamisches Nachladen der POIs bei Triggeränderung
+- Fehleranzeige über `addPoiStatus` + `addPoiError`
\ No newline at end of file
diff --git a/docs/docs/redux/slices/database/area/updateAreaSlice.md b/docs/docs/redux/slices/database/area/updateAreaSlice.md
new file mode 100644
index 000000000..4c46aefd1
--- /dev/null
+++ b/docs/docs/redux/slices/database/area/updateAreaSlice.md
@@ -0,0 +1,40 @@
+
+
+# 🧩 updateAreaSlice.js
+
+Redux-Slice zur Verwaltung des Update-Zustands beim Aktualisieren eines Bereichs (Area).
+
+---
+
+## Zustand
+
+```js
+{
+ status: "idle" | "loading" | "succeeded" | "failed",
+ error: string | null
+}
+```
+
+---
+
+## Thunk
+
+- `updateAreaThunk`: Führt den API-Call zum Speichern von `x`, `y` für `idLocation` & `idMaps` durch.
+
+---
+
+## Aktionen
+
+- `resetUpdateAreaStatus()`: Setzt Status auf `"idle"` und entfernt Fehler
+
+---
+
+## Verwendung
+
+In der Komponente `useAreaMarkersLayer.js` beim Ziehen und Speichern von Stationsmarkern.
+
+---
+
+## Fehlerbehandlung
+
+- Fehlernachricht wird in `error` gespeichert, falls `updateAreaThunk` fehlschlägt.
\ No newline at end of file
diff --git a/docs/docs/redux/slices/database/locationDevice/locationDevicesSlice.md b/docs/docs/redux/slices/database/locationDevice/locationDevicesSlice.md
new file mode 100644
index 000000000..cf58c3de0
--- /dev/null
+++ b/docs/docs/redux/slices/database/locationDevice/locationDevicesSlice.md
@@ -0,0 +1,45 @@
+
+
+# 🧩 locationDevicesSlice.js
+
+Redux-Slice zur Verwaltung von Standortgeräten (Devices) aus der Tabelle `location_device`.
+
+---
+
+## Zustand
+
+```js
+{
+ data: [],
+ status: "idle" | "loading" | "succeeded" | "failed",
+ error: string | null
+}
+```
+
+---
+
+## Thunks
+
+- `fetchLocationDevicesThunk`: Lädt Geräte aus der API
+
+---
+
+## Aktionen
+
+- `clearLocationDevices()`: Löscht Geräte-Array und setzt Status zurück
+
+---
+
+## Selektoren
+
+```js
+selectLocationDevices = (state) => state.locationDevices.data;
+selectLocationDeviceStatus = (state) => state.locationDevices.status;
+```
+
+---
+
+## Besonderheiten
+
+- Zustand wird bei `pending`, `fulfilled` und `rejected` aktualisiert
+- Fehlernachricht wird in `error` gespeichert
\ No newline at end of file
diff --git a/docs/docs/redux/slices/database/locationDevicesFromDBSlice.md b/docs/docs/redux/slices/database/locationDevicesFromDBSlice.md
new file mode 100644
index 000000000..3eedc3fba
--- /dev/null
+++ b/docs/docs/redux/slices/database/locationDevicesFromDBSlice.md
@@ -0,0 +1,25 @@
+
+
+# 🧩 locationDevicesFromDBSlice.js
+
+Redux-Slice für das Laden von Geräten aus der Datenbank-Tabelle `location_device`.
+
+## Zustand
+
+```js
+{
+ devices: [],
+ status: "idle" | "loading" | "succeeded" | "failed",
+ error: string | null
+}
+```
+
+## Thunk
+
+- `fetchLocationDevicesThunk` (async)
+
+## Selector
+
+```js
+selectLocationDevices = (state) => state.locationDevicesFromDB.devices
+```
\ No newline at end of file
diff --git a/docs/docs/redux/slices/database/locationDevicesSlice.md b/docs/docs/redux/slices/database/locationDevicesSlice.md
new file mode 100644
index 000000000..1030038a8
--- /dev/null
+++ b/docs/docs/redux/slices/database/locationDevicesSlice.md
@@ -0,0 +1,23 @@
+
+
+# 🧩 locationDevicesSlice.js
+
+Zweite Variante des Slices für Geräte (veraltet oder parallel verwendet).
+
+## Zustand
+
+```js
+{
+ data: [],
+ status: "idle" | "loading" | "succeeded" | "failed",
+ error: string | null
+}
+```
+
+## Selector
+
+```js
+selectLocationDevices = (state) => state.locationDevices.data
+```
+
+⚠️ Beachte: Duplikat zu `locationDevicesFromDBSlice.js`
\ No newline at end of file
diff --git a/docs/docs/redux/slices/database/pois/addPoiOnPolylineSlice.md b/docs/docs/redux/slices/database/pois/addPoiOnPolylineSlice.md
new file mode 100644
index 000000000..8d16ada73
--- /dev/null
+++ b/docs/docs/redux/slices/database/pois/addPoiOnPolylineSlice.md
@@ -0,0 +1,3 @@
+# 🧩 addPoiOnPolylineSlice.js
+
+Redux-Slice zur Verwaltung von addPoiOnPolyline.
\ No newline at end of file
diff --git a/docs/docs/redux/slices/database/pois/addPoiSlice.md b/docs/docs/redux/slices/database/pois/addPoiSlice.md
new file mode 100644
index 000000000..31f99a654
--- /dev/null
+++ b/docs/docs/redux/slices/database/pois/addPoiSlice.md
@@ -0,0 +1,3 @@
+# 🧩 addPoiSlice.js
+
+Redux-Slice zur Verwaltung von addPoi.
\ No newline at end of file
diff --git a/docs/docs/redux/slices/database/pois/currentPoiSlice.md b/docs/docs/redux/slices/database/pois/currentPoiSlice.md
new file mode 100644
index 000000000..0c1b4e7fe
--- /dev/null
+++ b/docs/docs/redux/slices/database/pois/currentPoiSlice.md
@@ -0,0 +1,3 @@
+# 🧩 currentPoiSlice.js
+
+Redux-Slice zur Verwaltung von currentPoi.
\ No newline at end of file
diff --git a/docs/docs/redux/slices/database/pois/poiIconsDataSlice.md b/docs/docs/redux/slices/database/pois/poiIconsDataSlice.md
new file mode 100644
index 000000000..80f57f38d
--- /dev/null
+++ b/docs/docs/redux/slices/database/pois/poiIconsDataSlice.md
@@ -0,0 +1,3 @@
+# 🧩 poiIconsDataSlice.js
+
+Redux-Slice zur Verwaltung von POIIconsData.
\ No newline at end of file
diff --git a/docs/docs/redux/slices/database/pois/poiLayerVisibleSlice.md b/docs/docs/redux/slices/database/pois/poiLayerVisibleSlice.md
new file mode 100644
index 000000000..ef4aa5c8e
--- /dev/null
+++ b/docs/docs/redux/slices/database/pois/poiLayerVisibleSlice.md
@@ -0,0 +1,3 @@
+# 🧩 poiLayerVisibleSlice.js
+
+Redux-Slice zur Verwaltung von POILayerVisible.
\ No newline at end of file
diff --git a/docs/docs/redux/slices/database/pois/poiMarkersSlice.md b/docs/docs/redux/slices/database/pois/poiMarkersSlice.md
new file mode 100644
index 000000000..94563967d
--- /dev/null
+++ b/docs/docs/redux/slices/database/pois/poiMarkersSlice.md
@@ -0,0 +1,3 @@
+# 🧩 poiMarkersSlice.js
+
+Redux-Slice zur Verwaltung von POIMarkers.
\ No newline at end of file
diff --git a/docs/docs/redux/slices/database/pois/poiReadFromDbTriggerSlice.md b/docs/docs/redux/slices/database/pois/poiReadFromDbTriggerSlice.md
new file mode 100644
index 000000000..fd3270b7f
--- /dev/null
+++ b/docs/docs/redux/slices/database/pois/poiReadFromDbTriggerSlice.md
@@ -0,0 +1,3 @@
+# 🧩 poiReadFromDbTriggerSlice.js
+
+Redux-Slice zur Verwaltung von POIReadFromDbTrigger.
\ No newline at end of file
diff --git a/docs/docs/redux/slices/database/pois/poiTypSlice.md b/docs/docs/redux/slices/database/pois/poiTypSlice.md
new file mode 100644
index 000000000..edf0ff581
--- /dev/null
+++ b/docs/docs/redux/slices/database/pois/poiTypSlice.md
@@ -0,0 +1,3 @@
+# 🧩 poiTypSlice.js
+
+Redux-Slice zur Verwaltung von POITyp.
\ No newline at end of file
diff --git a/docs/docs/redux/slices/database/pois/poiTypesSlice.md b/docs/docs/redux/slices/database/pois/poiTypesSlice.md
new file mode 100644
index 000000000..24366914c
--- /dev/null
+++ b/docs/docs/redux/slices/database/pois/poiTypesSlice.md
@@ -0,0 +1,3 @@
+# 🧩 poiTypesSlice.js
+
+Redux-Slice zur Verwaltung von POITypes.
\ No newline at end of file
diff --git a/docs/docs/redux/slices/database/pois/readPoiMarkersStoreSlice.md b/docs/docs/redux/slices/database/pois/readPoiMarkersStoreSlice.md
new file mode 100644
index 000000000..5cd8b478c
--- /dev/null
+++ b/docs/docs/redux/slices/database/pois/readPoiMarkersStoreSlice.md
@@ -0,0 +1,3 @@
+# 🧩 readPoiMarkersStoreSlice.js
+
+Redux-Slice zur Verwaltung von readPoiMarkersStore.
\ No newline at end of file
diff --git a/docs/docs/redux/slices/database/pois/selectedPoiSlice.md b/docs/docs/redux/slices/database/pois/selectedPoiSlice.md
new file mode 100644
index 000000000..20bceb7eb
--- /dev/null
+++ b/docs/docs/redux/slices/database/pois/selectedPoiSlice.md
@@ -0,0 +1,3 @@
+# 🧩 selectedPoiSlice.js
+
+Redux-Slice zur Verwaltung von selectedPoi.
\ No newline at end of file
diff --git a/docs/docs/redux/slices/database/polylines/gisLinesSlice.md b/docs/docs/redux/slices/database/polylines/gisLinesSlice.md
new file mode 100644
index 000000000..580f15c4f
--- /dev/null
+++ b/docs/docs/redux/slices/database/polylines/gisLinesSlice.md
@@ -0,0 +1,25 @@
+
+
+# 🧩 gisLinesSlice.js
+
+Verwaltet alle Linienobjekte, die aus der Datenbank (`gis_lines`) gelesen wurden.
+
+## Zustand
+
+```js
+{
+ data: [],
+ status: "idle" | "loading" | "succeeded" | "failed",
+ error: string | null
+}
+```
+
+## Thunk
+
+- `fetchGisLinesThunk()`
+
+## Selector
+
+```js
+selectGisLines = (state) => state.gisLines.data
+```
\ No newline at end of file
diff --git a/docs/docs/redux/slices/database/polylines/polylineContextMenuSlice.md b/docs/docs/redux/slices/database/polylines/polylineContextMenuSlice.md
new file mode 100644
index 000000000..9258beada
--- /dev/null
+++ b/docs/docs/redux/slices/database/polylines/polylineContextMenuSlice.md
@@ -0,0 +1,25 @@
+
+
+# 🧩 polylineContextMenuSlice.js
+
+Verwaltet den Zustand des Kontextmenüs bei Polylinien (z. B. Stützpunkt hinzufügen/entfernen).
+
+## Zustand
+
+```js
+{
+ isOpen: false,
+ position: { lat, lng } | null,
+ forceClose: false,
+ timerStart: number | null,
+ countdown: number,
+ countdownActive: boolean
+}
+```
+
+## Aktionen
+
+- `openPolylineContextMenu(payload)`
+- `closePolylineContextMenu()`
+- `updateCountdown()`
+- `forceCloseContextMenu()`
\ No newline at end of file
diff --git a/docs/docs/redux/slices/database/polylines/polylineEventsDisabledSlice.md b/docs/docs/redux/slices/database/polylines/polylineEventsDisabledSlice.md
new file mode 100644
index 000000000..92fc70c85
--- /dev/null
+++ b/docs/docs/redux/slices/database/polylines/polylineEventsDisabledSlice.md
@@ -0,0 +1,16 @@
+
+
+# 🧩 polylineEventsDisabledSlice.js
+
+Steuert, ob Interaktionen mit Polylinien (z. B. Ziehen, Klicks) temporär deaktiviert sind.
+
+## Zustand
+
+```js
+{ disabled: boolean }
+```
+
+## Aktionen
+
+- `setDisabled(boolean)`
+- `toggleDisabled()`
\ No newline at end of file
diff --git a/docs/docs/redux/slices/database/polylines/polylineLayerVisibleSlice.md b/docs/docs/redux/slices/database/polylines/polylineLayerVisibleSlice.md
new file mode 100644
index 000000000..6b440aad9
--- /dev/null
+++ b/docs/docs/redux/slices/database/polylines/polylineLayerVisibleSlice.md
@@ -0,0 +1,21 @@
+
+
+# 🧩 polylineLayerVisibleSlice.js
+
+Steuert die Sichtbarkeit des Polylinienlayers auf der Karte.
+
+## Zustand
+
+```js
+{ visible: boolean }
+```
+
+## Aktion
+
+- `setPolylineVisible(boolean)`
+
+## Selector
+
+```js
+selectPolylineVisible = (state) => state.polylineLayerVisible.visible
+```
\ No newline at end of file
diff --git a/docs/docs/redux/slices/database/polylines/updatePolylineCoordinatesSlice.md b/docs/docs/redux/slices/database/polylines/updatePolylineCoordinatesSlice.md
new file mode 100644
index 000000000..eae91b396
--- /dev/null
+++ b/docs/docs/redux/slices/database/polylines/updatePolylineCoordinatesSlice.md
@@ -0,0 +1,22 @@
+
+
+# 🧩 updatePolylineCoordinatesSlice.js
+
+Redux-Slice zur Überwachung des Lade-/Fehlerstatus bei der Aktualisierung von Linienkoordinaten.
+
+## Zustand
+
+```js
+{
+ status: "idle" | "loading" | "succeeded" | "failed",
+ error: string | null
+}
+```
+
+## Thunk
+
+- `updatePolylineCoordinatesThunk()`
+
+## Aktion
+
+- `resetUpdateStatus()`
\ No newline at end of file
diff --git a/docs/docs/redux/slices/database/priorityConfigSlice.md b/docs/docs/redux/slices/database/priorityConfigSlice.md
new file mode 100644
index 000000000..e3a040089
--- /dev/null
+++ b/docs/docs/redux/slices/database/priorityConfigSlice.md
@@ -0,0 +1,24 @@
+
+
+# 🧩 priorityConfigSlice.js
+
+Lädt die Prioritätskonfiguration für Marker (z. B. zur farblichen Darstellung).
+
+## Zustand
+
+```js
+{
+ data: [],
+ status: "idle" | "succeeded"
+}
+```
+
+## Thunk
+
+- `fetchPriorityConfigThunk`
+
+## Selector
+
+```js
+selectPriorityConfig = (state) => state.priorityConfig.data
+```
\ No newline at end of file
diff --git a/docs/docs/redux/slices/lineVisibilitySlice.md b/docs/docs/redux/slices/lineVisibilitySlice.md
new file mode 100644
index 000000000..41d22c21a
--- /dev/null
+++ b/docs/docs/redux/slices/lineVisibilitySlice.md
@@ -0,0 +1,24 @@
+
+
+# 📶 lineVisibilitySlice.js
+
+Redux-Slice zur Steuerung der Sichtbarkeit aktiver Linien auf der Karte.
+
+## Zustand
+
+```js
+{
+ activeLines: {
+ [idLD]: true | false
+ }
+}
+```
+
+## Aktionen
+
+- `updateLineStatus({ idLD, active })`: Einzelne Linie sichtbar/unsichtbar
+- `setActiveLines({ ... })`: Ganze Objektzuweisung
+
+## Anwendung
+
+Wird verwendet z. B. in `useLineData.js`, `MapComponent.js`
\ No newline at end of file
diff --git a/docs/docs/redux/slices/mapLayersSlice.md b/docs/docs/redux/slices/mapLayersSlice.md
new file mode 100644
index 000000000..f2847e83d
--- /dev/null
+++ b/docs/docs/redux/slices/mapLayersSlice.md
@@ -0,0 +1,27 @@
+
+
+# 🗺️ mapLayersSlice.js
+
+Verwaltet die Sichtbarkeit einzelner Layergruppen (z. B. GMA, ECI, Siemens).
+
+## Zustand
+
+```js
+{
+ TALAS: true,
+ ECI: true,
+ ULAF: true,
+ ...
+}
+```
+
+## Aktionen
+
+- `toggleLayer(layer)`: Sichtbarkeit toggeln
+- `setLayerVisibility({ layer, visibility })`: Sichtbarkeit explizit setzen
+
+## Selector
+
+```js
+selectMapLayersState = (state) => state.mapLayers
+```
\ No newline at end of file
diff --git a/docs/docs/redux/slices/selectedAreaSlice.md b/docs/docs/redux/slices/selectedAreaSlice.md
new file mode 100644
index 000000000..d1eb2e999
--- /dev/null
+++ b/docs/docs/redux/slices/selectedAreaSlice.md
@@ -0,0 +1,16 @@
+
+
+# 📍 selectedAreaSlice.js
+
+Steuert die aktuell selektierte Station/Bereich in der Karte.
+
+## Zustand
+
+```js
+{ area: null | object }
+```
+
+## Aktionen
+
+- `setSelectedArea(area)`
+- `clearSelectedArea()`
\ No newline at end of file
diff --git a/docs/docs/redux/slices/selectedDeviceSlice.md b/docs/docs/redux/slices/selectedDeviceSlice.md
new file mode 100644
index 000000000..ef20a935a
--- /dev/null
+++ b/docs/docs/redux/slices/selectedDeviceSlice.md
@@ -0,0 +1,16 @@
+
+
+# 🖥️ selectedDeviceSlice.js
+
+Speichert das aktuell ausgewählte Gerät aus der Karte.
+
+## Zustand
+
+```js
+null | { ...Gerät }
+```
+
+## Aktionen
+
+- `setSelectedDevice(device)`
+- `clearSelectedDevice()`
\ No newline at end of file
diff --git a/docs/docs/redux/slices/urlParameterSlice.md b/docs/docs/redux/slices/urlParameterSlice.md
new file mode 100644
index 000000000..1a2c68801
--- /dev/null
+++ b/docs/docs/redux/slices/urlParameterSlice.md
@@ -0,0 +1,20 @@
+
+
+# 🔗 urlParameterSlice.js
+
+Verwaltet die URL-Parameter `m` (mapId) und `u` (userId).
+
+## Zustand
+
+```js
+{
+ mapId: number | null,
+ userId: number | null
+}
+```
+
+## Aktionen
+
+- `setMapId(id)`
+- `setUserId(id)`
+- `setFromURL({ m, u })`
\ No newline at end of file
diff --git a/docs/docs/redux/slices/webService/gisLinesStatusSlice.md b/docs/docs/redux/slices/webService/gisLinesStatusSlice.md
new file mode 100644
index 000000000..b6a0ba93d
--- /dev/null
+++ b/docs/docs/redux/slices/webService/gisLinesStatusSlice.md
@@ -0,0 +1,25 @@
+
+
+# 🧩 gisLinesStatusSlice.js
+
+Lädt und speichert Statusdaten von Linien (z. B. Spannungswerte, Betriebszustand) aus dem Webservice.
+
+## Zustand
+
+```js
+{
+ data: [],
+ status: "idle" | "loading" | "succeeded" | "failed",
+ error: string | null
+}
+```
+
+## Thunk
+
+- `fetchGisLinesStatusThunk()`
+
+## Selector
+
+```js
+selectGisLinesStatusFromWebservice = (state) => state.gisLinesStatusFromWebservice
+```
\ No newline at end of file
diff --git a/docs/docs/redux/slices/webService/gisStationsMeasurementsSlice.md b/docs/docs/redux/slices/webService/gisStationsMeasurementsSlice.md
new file mode 100644
index 000000000..3f1308bf5
--- /dev/null
+++ b/docs/docs/redux/slices/webService/gisStationsMeasurementsSlice.md
@@ -0,0 +1,25 @@
+
+
+# 🧩 gisStationsMeasurementsSlice.js
+
+Verwaltet Messwerte einzelner Stationen (z. B. Schleifenwiderstand, Isolation) aus Webservice-Antworten.
+
+## Zustand
+
+```js
+{
+ data: [],
+ status: "idle" | "loading" | "succeeded" | "failed",
+ error: string | null
+}
+```
+
+## Thunk
+
+- `fetchGisStationsMeasurementsThunk()`
+
+## Selector
+
+```js
+selectGisStationsMeasurements = (state) => state.gisStationsMeasurements.data
+```
\ No newline at end of file
diff --git a/docs/docs/redux/slices/webService/gisStationsStaticDistrictSlice.md b/docs/docs/redux/slices/webService/gisStationsStaticDistrictSlice.md
new file mode 100644
index 000000000..faf67e4b2
--- /dev/null
+++ b/docs/docs/redux/slices/webService/gisStationsStaticDistrictSlice.md
@@ -0,0 +1,25 @@
+
+
+# 🧩 gisStationsStaticDistrictSlice.js
+
+Lädt und speichert statische Standortdaten (z. B. Koordinaten) der Stationen im aktuellen Bezirk.
+
+## Zustand
+
+```js
+{
+ data: { Points: [] },
+ status: "idle" | "loading" | "succeeded" | "failed",
+ error: string | null
+}
+```
+
+## Thunk
+
+- `fetchGisStationsStaticDistrictThunk()`
+
+## Selector
+
+```js
+selectGisStationsStaticDistrict = (state) => state.gisStationsStaticDistrict.data
+```
\ No newline at end of file
diff --git a/docs/docs/redux/slices/webService/gisStationsStatusDistrictSlice.md b/docs/docs/redux/slices/webService/gisStationsStatusDistrictSlice.md
new file mode 100644
index 000000000..e538fc9c2
--- /dev/null
+++ b/docs/docs/redux/slices/webService/gisStationsStatusDistrictSlice.md
@@ -0,0 +1,25 @@
+
+
+# 🧩 gisStationsStatusDistrictSlice.js
+
+Verwaltet den Status aller Stationen im aktuellen Bezirk aus Webservice-Daten.
+
+## Zustand
+
+```js
+{
+ data: [],
+ status: "idle" | "loading" | "succeeded" | "failed",
+ error: string | null
+}
+```
+
+## Thunk
+
+- `fetchGisStationsStatusDistrictThunk()`
+
+## Selector
+
+```js
+selectGisStationsStatusDistrict = (state) => state.gisStationsStatusDistrict.data
+```
\ No newline at end of file
diff --git a/docs/docs/redux/slices/webService/gisSystemStaticSlice.md b/docs/docs/redux/slices/webService/gisSystemStaticSlice.md
new file mode 100644
index 000000000..ecf688b02
--- /dev/null
+++ b/docs/docs/redux/slices/webService/gisSystemStaticSlice.md
@@ -0,0 +1,25 @@
+
+
+# 🧩 gisSystemStaticSlice.js
+
+Verwaltet statische Gerätedaten aller Systeme, die vom Webservice zurückgegeben werden.
+
+## Zustand
+
+```js
+{
+ data: [],
+ status: "idle" | "loading" | "succeeded" | "failed",
+ error: string | null
+}
+```
+
+## Thunk
+
+- `fetchGisSystemStaticThunk()`
+
+## Selector
+
+```js
+selectGisSystemStatic = (state) => state.gisSystemStatic.data
+```
\ No newline at end of file
diff --git a/docs/docs/redux/slices/webService/userRightsSlice.md b/docs/docs/redux/slices/webService/userRightsSlice.md
new file mode 100644
index 000000000..a40453d15
--- /dev/null
+++ b/docs/docs/redux/slices/webService/userRightsSlice.md
@@ -0,0 +1,26 @@
+
+
+# 🧩 userRightsSlice.js
+
+Verwaltet die Benutzerrechte, die vom Webservice für den angemeldeten Nutzer bereitgestellt werden.
+
+## Zustand
+
+```js
+{
+ rights: [],
+ status: "idle" | "loading" | "succeeded" | "failed",
+ error: string | null
+}
+```
+
+## Thunk
+
+- `fetchUserRightsThunk()`
+
+## Selector
+
+```js
+selectGisUserRightsFromWebservice = (state) => state.gisUserRightsFromWebservice.rights
+selectGisUserRightsStatus = (state) => state.gisUserRightsFromWebservice.status
+```
\ No newline at end of file
diff --git a/docs/docs/redux/slices/zoomTriggerSlice.md b/docs/docs/redux/slices/zoomTriggerSlice.md
new file mode 100644
index 000000000..e5aeb3226
--- /dev/null
+++ b/docs/docs/redux/slices/zoomTriggerSlice.md
@@ -0,0 +1,16 @@
+
+
+# 🔍 zoomTriggerSlice.js
+
+Ein Redux-Trigger, der die Karte zur Neuberechnung des Zoom-Zustands veranlasst.
+
+## Zustand
+
+```js
+{ trigger: number }
+```
+
+## Aktionen
+
+- `incrementZoomTrigger()`: Erhöht den Trigger
+- `resetZoomTrigger()`: Setzt auf 0 zurück
\ No newline at end of file
diff --git a/docs/docs/redux/store.md b/docs/docs/redux/store.md
new file mode 100644
index 000000000..95664ef63
--- /dev/null
+++ b/docs/docs/redux/store.md
@@ -0,0 +1,64 @@
+
+
+# 🧠 Redux Store (store.js)
+
+Zentrale Konfiguration des globalen Redux-Stores für die Anwendung.
+Er verwaltet Zustand für Daten aus Webservices, der Datenbank und UI-Status.
+
+---
+
+## 🔌 Verwendung
+
+```js
+import { Provider } from "react-redux";
+import { store } from "../redux/store";
+
+
+
+
+```
+
+---
+
+## 🔁 Struktur
+
+Der Store besteht aus drei Bereichen:
+
+### 1. `database`
+
+- `poiMarkers`, `addPoi`, `poiLayerVisible`
+- `gisLinesFromDatabase`, `polylineLayerVisible`
+- `readPoiMarkersStore`, `priorityConfig`, `locationDevicesFromDB`
+
+### 2. `webservice`
+
+- `gisStationsStaticDistrict`, `gisStationsStatusDistrict`, `gisSystemStatic`
+- `gisStationsMeasurements`, `gisLinesStatusFromWebservice`, `userRights`
+
+### 3. `ui / interaktiv`
+
+- `mapLayers`, `selectedDevice`, `selectedPoi`, `selectedArea`
+- `lineVisibility`, `zoomTrigger`, `urlParameter`, `polylineContextMenu`
+- `polylineEventsDisabled`, `addPoiOnPolyline`
+
+---
+
+## ⚙️ Einrichtung
+
+```js
+export const store = configureStore({
+ reducer: {
+ selectedDevice: selectedDeviceReducer,
+ poiMarkers: poiMarkersReducer,
+ ...
+ }
+});
+```
+
+---
+
+## 📁 Pfad
+
+```bash
+/redux/store.js
+```
\ No newline at end of file
diff --git a/docs/docs/redux/thunks/database/area/updateAreaThunk.md b/docs/docs/redux/thunks/database/area/updateAreaThunk.md
new file mode 100644
index 000000000..24d8dcec5
--- /dev/null
+++ b/docs/docs/redux/thunks/database/area/updateAreaThunk.md
@@ -0,0 +1,25 @@
+
+
+# ✏️ updateAreaThunk.js
+
+Async-Thunk zum Aktualisieren der Koordinaten eines Bereichs (Area).
+
+## Verwendung
+
+```js
+dispatch(updateAreaThunk({
+ idLocation: 5,
+ idMap: 2,
+ x: 53.215,
+ y: 8.45
+}));
+```
+
+## Quelle
+
+- Ruft `updateAreaService(payload)` auf
+
+## Verhalten
+
+- Gibt `await`-Ergebnis direkt zurück
+- Fehlerbehandlung wird vom aufrufenden Slice übernommen
\ No newline at end of file
diff --git a/docs/docs/redux/thunks/database/fetchLocationDevicesThunk.md b/docs/docs/redux/thunks/database/fetchLocationDevicesThunk.md
new file mode 100644
index 000000000..2d62cde1b
--- /dev/null
+++ b/docs/docs/redux/thunks/database/fetchLocationDevicesThunk.md
@@ -0,0 +1,15 @@
+
+
+# 🚚 fetchLocationDevicesThunk.js
+
+Async-Thunk zum Laden aller Geräte aus der Tabelle `location_device`.
+
+## Verwendung
+
+```js
+dispatch(fetchLocationDevicesThunk());
+```
+
+## Quelle
+
+- Ruft `fetchLocationDevicesService()` auf
\ No newline at end of file
diff --git a/docs/docs/redux/thunks/database/fetchPriorityConfigThunk.md b/docs/docs/redux/thunks/database/fetchPriorityConfigThunk.md
new file mode 100644
index 000000000..53895c2f7
--- /dev/null
+++ b/docs/docs/redux/thunks/database/fetchPriorityConfigThunk.md
@@ -0,0 +1,15 @@
+
+
+# 🎯 fetchPriorityConfigThunk.js
+
+Async-Thunk zum Abrufen der Prioritätskonfiguration für Marker.
+
+## Verwendung
+
+```js
+dispatch(fetchPriorityConfigThunk());
+```
+
+## Quelle
+
+- Ruft `fetchPriorityConfigService()` auf
\ No newline at end of file
diff --git a/docs/docs/redux/thunks/database/getDeviceIdByNameThunk.md b/docs/docs/redux/thunks/database/getDeviceIdByNameThunk.md
new file mode 100644
index 000000000..4e0848f27
--- /dev/null
+++ b/docs/docs/redux/thunks/database/getDeviceIdByNameThunk.md
@@ -0,0 +1,16 @@
+
+
+# 🆔 getDeviceIdByNameThunk.js
+
+Async-Thunk zur Ermittlung der ID eines Geräts anhand des Gerätenamens.
+
+## Verwendung
+
+```js
+dispatch(getDeviceIdByNameThunk("Kue705"));
+```
+
+## Verhalten
+
+- Ruft `getDeviceIdByNameService(deviceName)` auf
+- Fehler werden mit `rejectWithValue(error.message)` behandelt
\ No newline at end of file
diff --git a/docs/docs/redux/thunks/database/locationDevice/fetchLocationDevicesThunk (1).md b/docs/docs/redux/thunks/database/locationDevice/fetchLocationDevicesThunk (1).md
new file mode 100644
index 000000000..66ee57295
--- /dev/null
+++ b/docs/docs/redux/thunks/database/locationDevice/fetchLocationDevicesThunk (1).md
@@ -0,0 +1,37 @@
+
+
+# 🚚 fetchLocationDevicesThunk.js
+
+Redux-AsyncThunk zum Abrufen aller Einträge aus der Tabelle `location_device`.
+
+---
+
+## 🔄 Zweck
+
+Dieser Thunk ruft die Servicefunktion `fetchLocationDevicesService()` auf und liefert deren Ergebnis an den Redux-Slice `locationDevicesSlice`.
+
+---
+
+## 🧠 Intern
+
+```ts
+createAsyncThunk("locationDevices/fetchAll", async () => {
+ return await fetchLocationDevicesService();
+});
+```
+
+---
+
+## ✅ Verwendung
+
+```ts
+dispatch(fetchLocationDevicesThunk());
+```
+
+---
+
+## 📁 Pfad
+
+```
+/redux/thunks/database/locationDevice/fetchLocationDevicesThunk.js
+```
\ No newline at end of file
diff --git a/docs/docs/redux/thunks/database/pois/addPoiThunk.md b/docs/docs/redux/thunks/database/pois/addPoiThunk.md
new file mode 100644
index 000000000..c53771de6
--- /dev/null
+++ b/docs/docs/redux/thunks/database/pois/addPoiThunk.md
@@ -0,0 +1,21 @@
+
+
+# ➕ addPoiThunk.js
+
+Async-Thunk zur Erstellung eines neuen POIs.
+
+## Verwendung
+
+```js
+dispatch(addPoiThunk({
+ name: "Messstelle 1",
+ poiTypeId: 2,
+ latitude: 53.21,
+ longitude: 8.43,
+ idLD: 12
+}));
+```
+
+## Intern
+
+Ruft `addPoiService(formData)` auf und gibt das Ergebnis zurück.
\ No newline at end of file
diff --git a/docs/docs/redux/thunks/database/pois/deletePoiThunk.md b/docs/docs/redux/thunks/database/pois/deletePoiThunk.md
new file mode 100644
index 000000000..2e6ea1625
--- /dev/null
+++ b/docs/docs/redux/thunks/database/pois/deletePoiThunk.md
@@ -0,0 +1,16 @@
+
+
+# ❌ deletePoiThunk.js
+
+Async-Thunk zum Löschen eines POIs anhand seiner ID.
+
+## Verwendung
+
+```js
+dispatch(deletePoiThunk(15));
+```
+
+## Verhalten
+
+- Ruft `deletePoiService(id)` auf
+- Gibt die ID im Erfolgsfall zurück
\ No newline at end of file
diff --git a/docs/docs/redux/thunks/database/pois/fetchPoiIconsDataThunk.md b/docs/docs/redux/thunks/database/pois/fetchPoiIconsDataThunk.md
new file mode 100644
index 000000000..76931f618
--- /dev/null
+++ b/docs/docs/redux/thunks/database/pois/fetchPoiIconsDataThunk.md
@@ -0,0 +1,15 @@
+
+
+# 🖼️ fetchPoiIconsDataThunk.js
+
+Lädt alle verfügbaren POI-Icons aus dem Backend.
+
+## Verwendung
+
+```js
+dispatch(fetchPoiIconsDataThunk());
+```
+
+## Intern
+
+- Ruft `fetchPoiIconsDataService()` auf
\ No newline at end of file
diff --git a/docs/docs/redux/thunks/database/pois/fetchPoiMarkersThunk.md b/docs/docs/redux/thunks/database/pois/fetchPoiMarkersThunk.md
new file mode 100644
index 000000000..e1cbc961d
--- /dev/null
+++ b/docs/docs/redux/thunks/database/pois/fetchPoiMarkersThunk.md
@@ -0,0 +1,15 @@
+
+
+# 📍 fetchPoiMarkersThunk.js
+
+Lädt alle POI-Marker (Positionsdaten) aus dem Backend.
+
+## Verwendung
+
+```js
+dispatch(fetchPoiMarkersThunk());
+```
+
+## Intern
+
+- Ruft `fetchPoiMarkersService()` auf
\ No newline at end of file
diff --git a/docs/docs/redux/thunks/database/pois/fetchPoiTypThunk.md b/docs/docs/redux/thunks/database/pois/fetchPoiTypThunk.md
new file mode 100644
index 000000000..2aae375b4
--- /dev/null
+++ b/docs/docs/redux/thunks/database/pois/fetchPoiTypThunk.md
@@ -0,0 +1,15 @@
+
+
+# 🗂️ fetchPoiTypThunk.js
+
+Lädt alle verfügbaren POI-Typen aus der Datenbank.
+
+## Verwendung
+
+```js
+dispatch(fetchPoiTypThunk());
+```
+
+## Intern
+
+- Ruft `fetchPoiTypService()` auf
\ No newline at end of file
diff --git a/docs/docs/redux/thunks/database/pois/updatePoiThunk.md b/docs/docs/redux/thunks/database/pois/updatePoiThunk.md
new file mode 100644
index 000000000..3a4dec185
--- /dev/null
+++ b/docs/docs/redux/thunks/database/pois/updatePoiThunk.md
@@ -0,0 +1,20 @@
+
+
+# 📝 updatePoiThunk.js
+
+Aktualisiert einen bestehenden POI mit neuen Daten.
+
+## Verwendung
+
+```js
+dispatch(updatePoiThunk({
+ idPoi: 15,
+ description: "Neue Beschreibung",
+ idPoiTyp: 3,
+ idLD: 8
+}));
+```
+
+## Intern
+
+- Ruft `updatePoiService(poi)` auf
\ No newline at end of file
diff --git a/docs/docs/redux/thunks/database/polylines/fetchGisLinesThunk.md b/docs/docs/redux/thunks/database/polylines/fetchGisLinesThunk.md
new file mode 100644
index 000000000..9bfbdec01
--- /dev/null
+++ b/docs/docs/redux/thunks/database/polylines/fetchGisLinesThunk.md
@@ -0,0 +1,16 @@
+
+
+# 📡 fetchGisLinesThunk.js
+
+Async-Thunk zum Laden aller Linien aus der Datenbanktabelle `gis_lines`.
+
+## Verwendung
+
+```js
+dispatch(fetchGisLinesThunk());
+```
+
+## Intern
+
+- Ruft `fetchGisLinesService()` auf
+- Liefert alle Linien mit Koordinaten zur Anzeige auf der Karte
\ No newline at end of file
diff --git a/docs/docs/redux/thunks/database/polylines/updatePolylineCoordinatesThunk.md b/docs/docs/redux/thunks/database/polylines/updatePolylineCoordinatesThunk.md
new file mode 100644
index 000000000..19c68ce6f
--- /dev/null
+++ b/docs/docs/redux/thunks/database/polylines/updatePolylineCoordinatesThunk.md
@@ -0,0 +1,20 @@
+
+
+# 🧭 updatePolylineCoordinatesThunk.js
+
+Async-Thunk zur Aktualisierung von Linienkoordinaten in der Datenbank.
+
+## Verwendung
+
+```js
+dispatch(updatePolylineCoordinatesThunk({
+ idLD: 7,
+ idModul: 2,
+ newCoordinates: [[53.2, 8.4], [53.21, 8.45]]
+}));
+```
+
+## Intern
+
+- Ruft `updatePolylineCoordinatesService(requestData)` auf
+- Wandelt Koordinaten in MySQL LINESTRING um
\ No newline at end of file
diff --git a/docs/docs/redux/thunks/webservice/fetchGisLinesStatusThunk.md b/docs/docs/redux/thunks/webservice/fetchGisLinesStatusThunk.md
new file mode 100644
index 000000000..82e04ab66
--- /dev/null
+++ b/docs/docs/redux/thunks/webservice/fetchGisLinesStatusThunk.md
@@ -0,0 +1,16 @@
+
+
+# 📡 fetchGisLinesStatusThunk.js
+
+Async-Thunk zum Laden des Status aller Linien aus dem Webservice.
+
+## Verwendung
+
+```js
+dispatch(fetchGisLinesStatusThunk());
+```
+
+## Intern
+
+- Ruft `fetchGisLinesStatusService()` auf
+- Fehlerbehandlung per `rejectWithValue(error.message)`
\ No newline at end of file
diff --git a/docs/docs/redux/thunks/webservice/fetchGisStationsMeasurementsThunk.md b/docs/docs/redux/thunks/webservice/fetchGisStationsMeasurementsThunk.md
new file mode 100644
index 000000000..94cfe884f
--- /dev/null
+++ b/docs/docs/redux/thunks/webservice/fetchGisStationsMeasurementsThunk.md
@@ -0,0 +1,15 @@
+
+
+# 📈 fetchGisStationsMeasurementsThunk.js
+
+Lädt Messwerte aller Stationen (z. B. Schleifenwiderstand, Isolation).
+
+## Verwendung
+
+```js
+dispatch(fetchGisStationsMeasurementsThunk());
+```
+
+## Intern
+
+- Ruft `fetchGisStationsMeasurementsService()` auf
\ No newline at end of file
diff --git a/docs/docs/redux/thunks/webservice/fetchGisStationsStaticDistrictThunk.md b/docs/docs/redux/thunks/webservice/fetchGisStationsStaticDistrictThunk.md
new file mode 100644
index 000000000..d69b6dfb4
--- /dev/null
+++ b/docs/docs/redux/thunks/webservice/fetchGisStationsStaticDistrictThunk.md
@@ -0,0 +1,15 @@
+
+
+# 🧭 fetchGisStationsStaticDistrictThunk.js
+
+Lädt statische Standortdaten (z. B. Koordinaten) für den aktuellen Bezirk.
+
+## Verwendung
+
+```js
+dispatch(fetchGisStationsStaticDistrictThunk());
+```
+
+## Intern
+
+- Ruft `fetchGisStationsStaticDistrictService()` auf
\ No newline at end of file
diff --git a/docs/docs/redux/thunks/webservice/fetchGisStationsStatusDistrictThunk.md b/docs/docs/redux/thunks/webservice/fetchGisStationsStatusDistrictThunk.md
new file mode 100644
index 000000000..587db68b1
--- /dev/null
+++ b/docs/docs/redux/thunks/webservice/fetchGisStationsStatusDistrictThunk.md
@@ -0,0 +1,15 @@
+
+
+# 🚦 fetchGisStationsStatusDistrictThunk.js
+
+Lädt Statusdaten (aktiv/inaktiv) aller Stationen im Bezirk.
+
+## Verwendung
+
+```js
+dispatch(fetchGisStationsStatusDistrictThunk());
+```
+
+## Intern
+
+- Ruft `fetchGisStationsStatusDistrictService()` auf
\ No newline at end of file
diff --git a/docs/docs/redux/thunks/webservice/fetchGisSystemStaticThunk.md b/docs/docs/redux/thunks/webservice/fetchGisSystemStaticThunk.md
new file mode 100644
index 000000000..9211be3d9
--- /dev/null
+++ b/docs/docs/redux/thunks/webservice/fetchGisSystemStaticThunk.md
@@ -0,0 +1,15 @@
+
+
+# 🧱 fetchGisSystemStaticThunk.js
+
+Lädt Geräte-/Systemdaten für alle Module aus dem Webservice.
+
+## Verwendung
+
+```js
+dispatch(fetchGisSystemStaticThunk());
+```
+
+## Intern
+
+- Ruft `fetchGisSystemStaticService()` auf
\ No newline at end of file
diff --git a/docs/docs/redux/thunks/webservice/fetchUserRightsThunk.md b/docs/docs/redux/thunks/webservice/fetchUserRightsThunk.md
new file mode 100644
index 000000000..fe1d96508
--- /dev/null
+++ b/docs/docs/redux/thunks/webservice/fetchUserRightsThunk.md
@@ -0,0 +1,16 @@
+
+
+# 🔐 fetchUserRightsThunk.js
+
+Lädt Rechte des angemeldeten Nutzers vom Webservice.
+
+## Verwendung
+
+```js
+dispatch(fetchUserRightsThunk());
+```
+
+## Intern
+
+- Ruft `fetchUserRightsService()` auf
+- Fehlerbehandlung per `rejectWithValue(error.message)`
\ No newline at end of file
diff --git a/docs/docs/services/database/area/updateAreaService.md b/docs/docs/services/database/area/updateAreaService.md
new file mode 100644
index 000000000..fa7520cd2
--- /dev/null
+++ b/docs/docs/services/database/area/updateAreaService.md
@@ -0,0 +1,37 @@
+
+
+# 🗺️ updateAreaService.js
+
+Service zur Aktualisierung der Koordinaten eines Bereichs (Area) in der Datenbank.
+
+## Verwendung
+
+```js
+await updateAreaService({
+ idLocation: 4,
+ idMap: 1,
+ newCoords: { x: 53.219, y: 8.435 }
+});
+```
+
+## API-Route
+
+```
+PUT /api/talas_v5_DB/area/updateArea
+```
+
+## Payload
+
+```json
+{
+ "idLocation": 4,
+ "idMap": 1,
+ "x": 53.219,
+ "y": 8.435
+}
+```
+
+## Rückgabe
+
+- Erfolgreich: JSON mit Erfolgsmeldung
+- Fehler: `throw new Error(...)` bei nicht OK
\ No newline at end of file
diff --git a/docs/docs/services/database/fetchDeviceNameByIdService.md b/docs/docs/services/database/fetchDeviceNameByIdService.md
new file mode 100644
index 000000000..95b5880b6
--- /dev/null
+++ b/docs/docs/services/database/fetchDeviceNameByIdService.md
@@ -0,0 +1,22 @@
+
+
+# 🆔 fetchDeviceNameByIdService.js
+
+Lädt den Gerätenamen (`name`) anhand der ID (`idLD`) von der API.
+
+## Verwendung
+
+```js
+const name = await fetchDeviceNameById(idLD);
+```
+
+## API-Route
+
+```
+/api/talas_v5_DB/locationDevice/locationDeviceNameById?idLD=...
+```
+
+## Rückgabe
+
+- Erfolgreich: Gerätebezeichnung als `string`
+- Fehler: `"Unbekannt"`
\ No newline at end of file
diff --git a/docs/docs/services/database/fetchLocationDevicesService.md b/docs/docs/services/database/fetchLocationDevicesService.md
new file mode 100644
index 000000000..f40447bab
--- /dev/null
+++ b/docs/docs/services/database/fetchLocationDevicesService.md
@@ -0,0 +1,21 @@
+
+
+# 🧰 fetchLocationDevicesService.js
+
+Service zum Abrufen aller Einträge aus der `location_device` Tabelle.
+
+## Verwendung
+
+```js
+const result = await fetchLocationDevicesService();
+```
+
+## API-Route
+
+```
+/api/talas_v5_DB/locationDevice/locationDevices
+```
+
+## Rückgabe
+
+- JSON-Array aller Geräte
\ No newline at end of file
diff --git a/docs/docs/services/database/fetchPriorityConfigService.md b/docs/docs/services/database/fetchPriorityConfigService.md
new file mode 100644
index 000000000..7dce4c026
--- /dev/null
+++ b/docs/docs/services/database/fetchPriorityConfigService.md
@@ -0,0 +1,17 @@
+
+
+# 🎯 fetchPriorityConfigService.js
+
+Service zum Abrufen der Prioritätskonfiguration für POIs oder Marker.
+
+## Verwendung
+
+```js
+const result = await fetchPriorityConfigService();
+```
+
+## API-Route
+
+```
+/api/talas_v5_DB/priorityConfig
+```
\ No newline at end of file
diff --git a/docs/docs/services/database/getDeviceIdByNameService.md b/docs/docs/services/database/getDeviceIdByNameService.md
new file mode 100644
index 000000000..cc0903403
--- /dev/null
+++ b/docs/docs/services/database/getDeviceIdByNameService.md
@@ -0,0 +1,22 @@
+
+
+# 🆔 getDeviceIdByNameService.js
+
+Service zur Ermittlung der Geräte-ID (`idLD`) anhand eines Gerätenamens.
+
+## Verwendung
+
+```js
+const id = await getDeviceIdByNameService("CPL-V4");
+```
+
+## API-Route
+
+```
+/api/talas_v5_DB/locationDevice/getDeviceId?deviceName=...
+```
+
+## Rückgabe
+
+- Erfolgreich: `idLD` (number)
+- Fehler: Exception
\ No newline at end of file
diff --git a/docs/docs/services/database/locationDevice/fetchLocationDevicesService.md b/docs/docs/services/database/locationDevice/fetchLocationDevicesService.md
new file mode 100644
index 000000000..f40447bab
--- /dev/null
+++ b/docs/docs/services/database/locationDevice/fetchLocationDevicesService.md
@@ -0,0 +1,21 @@
+
+
+# 🧰 fetchLocationDevicesService.js
+
+Service zum Abrufen aller Einträge aus der `location_device` Tabelle.
+
+## Verwendung
+
+```js
+const result = await fetchLocationDevicesService();
+```
+
+## API-Route
+
+```
+/api/talas_v5_DB/locationDevice/locationDevices
+```
+
+## Rückgabe
+
+- JSON-Array aller Geräte
\ No newline at end of file
diff --git a/docs/docs/services/database/pois/addPoiService.md b/docs/docs/services/database/pois/addPoiService.md
new file mode 100644
index 000000000..16d80616d
--- /dev/null
+++ b/docs/docs/services/database/pois/addPoiService.md
@@ -0,0 +1,22 @@
+
+
+# ➕ addPoiService.js
+
+Service zum Hinzufügen eines neuen POIs in der Datenbank.
+
+## Verwendung
+
+```js
+await addPoiService({
+ name: "Beispiel",
+ poiTypeId: 1,
+ idLD: 12,
+ latitude: 53.21,
+ longitude: 8.43
+});
+```
+
+## API
+
+- Endpoint: `POST /api/talas_v5_DB/pois/addPoi`
+- Headers: `"Content-Type": "application/json"`
\ No newline at end of file
diff --git a/docs/docs/services/database/pois/deletePoiService.md b/docs/docs/services/database/pois/deletePoiService.md
new file mode 100644
index 000000000..62569ca9a
--- /dev/null
+++ b/docs/docs/services/database/pois/deletePoiService.md
@@ -0,0 +1,15 @@
+
+
+# ❌ deletePoiService.js
+
+Service zum Löschen eines POIs aus der Datenbank per ID.
+
+## Verwendung
+
+```js
+await deletePoiService(id);
+```
+
+## API
+
+- Endpoint: `DELETE /api/talas_v5_DB/pois/deletePoi?id=ID`
\ No newline at end of file
diff --git a/docs/docs/services/database/pois/fetchPoiDataByIdService.md b/docs/docs/services/database/pois/fetchPoiDataByIdService.md
new file mode 100644
index 000000000..fbbb86acc
--- /dev/null
+++ b/docs/docs/services/database/pois/fetchPoiDataByIdService.md
@@ -0,0 +1,15 @@
+
+
+# 🔍 fetchPoiDataByIdService.js
+
+Service zum Abrufen der POI-Daten anhand einer POI-ID.
+
+## Verwendung
+
+```js
+const poi = await fetchPoiDataService(idPoi);
+```
+
+## API
+
+- Endpoint: `GET /api/talas_v5_DB/pois/getPoiById?idPoi=ID`
\ No newline at end of file
diff --git a/docs/docs/services/database/pois/fetchPoiDataService.md b/docs/docs/services/database/pois/fetchPoiDataService.md
new file mode 100644
index 000000000..797a8a658
--- /dev/null
+++ b/docs/docs/services/database/pois/fetchPoiDataService.md
@@ -0,0 +1,15 @@
+
+
+# 📄 fetchPoiDataService.js
+
+Lädt POI-Icons (alias `poiData`) aus dem Serververzeichnis.
+
+## Verwendung
+
+```js
+const data = await fetchPoiDataService();
+```
+
+## API
+
+- Endpoint: `GET /api/talas_v5_DB/pois/poi-icons`
\ No newline at end of file
diff --git a/docs/docs/services/database/pois/fetchPoiIconsDataService.md b/docs/docs/services/database/pois/fetchPoiIconsDataService.md
new file mode 100644
index 000000000..8e1ff22a0
--- /dev/null
+++ b/docs/docs/services/database/pois/fetchPoiIconsDataService.md
@@ -0,0 +1,15 @@
+
+
+# 🖼️ fetchPoiIconsDataService.js
+
+Service zum Abrufen der POI-Icon-Metadaten.
+
+## Verwendung
+
+```js
+const icons = await fetchPoiIconsDataService();
+```
+
+## API
+
+- Endpoint: `GET /api/talas_v5_DB/pois/poi-icons`
\ No newline at end of file
diff --git a/docs/docs/services/database/pois/fetchPoiMarkersService.md b/docs/docs/services/database/pois/fetchPoiMarkersService.md
new file mode 100644
index 000000000..de209ebdf
--- /dev/null
+++ b/docs/docs/services/database/pois/fetchPoiMarkersService.md
@@ -0,0 +1,15 @@
+
+
+# 📍 fetchPoiMarkersService.js
+
+Service zum Abrufen aller gespeicherten POI-Marker (Positionen).
+
+## Verwendung
+
+```js
+const pois = await fetchPoiMarkersService();
+```
+
+## API
+
+- Endpoint: `GET /api/talas_v5_DB/pois/readAllPOIs`
\ No newline at end of file
diff --git a/docs/docs/services/database/pois/fetchPoiTypService.md b/docs/docs/services/database/pois/fetchPoiTypService.md
new file mode 100644
index 000000000..360d035fe
--- /dev/null
+++ b/docs/docs/services/database/pois/fetchPoiTypService.md
@@ -0,0 +1,15 @@
+
+
+# 🗂️ fetchPoiTypService.js
+
+Service zum Abrufen aller verfügbaren POI-Typen aus der Datenbank.
+
+## Verwendung
+
+```js
+const types = await fetchPoiTypService();
+```
+
+## API
+
+- Endpoint: `GET /api/talas_v5_DB/poiTyp/readPoiTyp`
\ No newline at end of file
diff --git a/docs/docs/services/database/pois/updatePoiService.md b/docs/docs/services/database/pois/updatePoiService.md
new file mode 100644
index 000000000..07f78d478
--- /dev/null
+++ b/docs/docs/services/database/pois/updatePoiService.md
@@ -0,0 +1,21 @@
+
+
+# 📝 updatePoiService.js
+
+Service zur Aktualisierung eines POIs mit neuen Informationen.
+
+## Verwendung
+
+```js
+await updatePoiService({
+ idPoi: 5,
+ description: "Neuer Text",
+ idLD: 3,
+ idPoiTyp: 1
+});
+```
+
+## API
+
+- Endpoint: `POST /api/talas_v5_DB/pois/updatePoi`
+- Body: JSON mit den zu aktualisierenden Feldern
\ No newline at end of file
diff --git a/docs/docs/services/database/polylines/fetchGisLinesService.md b/docs/docs/services/database/polylines/fetchGisLinesService.md
new file mode 100644
index 000000000..13cecfeca
--- /dev/null
+++ b/docs/docs/services/database/polylines/fetchGisLinesService.md
@@ -0,0 +1,19 @@
+
+
+# 📡 fetchGisLinesService.js
+
+Service zum Abrufen aller Linien aus der `gisLines`-Tabelle der Datenbank.
+
+## Verwendung
+
+```js
+const lines = await fetchGisLinesService();
+```
+
+## API
+
+- Endpoint: `GET /api/talas_v5_DB/gisLines/readGisLines`
+
+## Rückgabe
+
+- JSON-Array mit allen Linien und ihren Koordinaten
\ No newline at end of file
diff --git a/docs/docs/services/database/polylines/updatePolylineCoordinatesService.md b/docs/docs/services/database/polylines/updatePolylineCoordinatesService.md
new file mode 100644
index 000000000..2cf961735
--- /dev/null
+++ b/docs/docs/services/database/polylines/updatePolylineCoordinatesService.md
@@ -0,0 +1,24 @@
+
+
+# 🧭 updatePolylineCoordinatesService.js
+
+Service zum Aktualisieren der Koordinaten einer Linie in der Datenbank.
+
+## Verwendung
+
+```js
+await updatePolylineCoordinatesService({
+ idLD: 5,
+ idModul: 1,
+ newCoordinates: [[53.2, 8.4], [53.21, 8.45]]
+});
+```
+
+## API
+
+- Endpoint: `POST /api/talas_v5_DB/gisLines/updateLineCoordinates`
+- Headers: `{ "Content-Type": "application/json" }`
+
+## Fehlerbehandlung
+
+- Bei Fehler: `throw new Error(...)` mit Backend-Meldung
\ No newline at end of file
diff --git a/docs/docs/services/database/updateLocationInDatabaseService.md b/docs/docs/services/database/updateLocationInDatabaseService.md
new file mode 100644
index 000000000..e5561d0fe
--- /dev/null
+++ b/docs/docs/services/database/updateLocationInDatabaseService.md
@@ -0,0 +1,21 @@
+
+
+# 📍 updateLocationInDatabaseService.js
+
+Service zur Aktualisierung der Geokoordinaten eines POIs in der Datenbank.
+
+## Verwendung
+
+```js
+await updateLocationInDatabaseService(id, lat, lng);
+```
+
+## API-Route
+
+```
+/api/talas_v5_DB/pois/updateLocation
+```
+
+## Methode
+
+- `POST` mit JSON-Body: `{ id, latitude, longitude }`
\ No newline at end of file
diff --git a/docs/docs/services/utils/fetchWithTimeout.md b/docs/docs/services/utils/fetchWithTimeout.md
new file mode 100644
index 000000000..c57084bb4
--- /dev/null
+++ b/docs/docs/services/utils/fetchWithTimeout.md
@@ -0,0 +1,46 @@
+
+
+# ⏱️ fetchWithTimeout.js
+
+Hilfsfunktion zur Durchführung eines `fetch`-Requests mit einem Timeout.
+
+---
+
+## 💡 Zweck
+
+Manche Serveranfragen können hängen bleiben. Diese Funktion sorgt dafür, dass eine Anfrage nach einer bestimmten Zeit abgebrochen wird, um UI-Blockierungen oder lange Wartezeiten zu vermeiden.
+
+---
+
+## 🧩 Funktion
+
+```js
+fetchWithTimeout(url, options, timeout);
+```
+
+- `url`: Ziel-URL
+- `options`: Fetch-Optionen (Headers, Methode etc.)
+- `timeout`: Zeit in Millisekunden (Standard: 5000 ms)
+
+---
+
+## Beispiel
+
+```js
+const response = await fetchWithTimeout("/api/data", {}, 3000);
+```
+
+---
+
+## Verhalten
+
+- Verwendet `AbortController` zur Abbruchsteuerung
+- Gibt den `fetch`-Response oder einen Fehler zurück
+
+---
+
+## Pfad
+
+```
+/services/utils/fetchWithTimeout.js
+```
\ No newline at end of file
diff --git a/docs/docs/services/webservice/fetchGisLinesStatusService.md b/docs/docs/services/webservice/fetchGisLinesStatusService.md
new file mode 100644
index 000000000..da7745114
--- /dev/null
+++ b/docs/docs/services/webservice/fetchGisLinesStatusService.md
@@ -0,0 +1,60 @@
+
+
+# fetchGisLinesStatusService
+
+Lädt Linienstatus-Daten über den TALAS WebService.
+
+---
+
+## 📁 URL-Aufbau
+
+```
+/ClientData/WebServiceMap.asmx/GisLinesStatus?idMap={idMap}
+```
+
+- Die `idMap` wird automatisch aus der URL (`?m=...`) gelesen.
+- Diese WebService-Antwort enthält ein Objekt mit dem Feld `Statis[]`.
+
+---
+
+## ✅ Rückgabe
+
+```json
+{
+ "Name": "...",
+ "Statis": [ ... ]
+}
+```
+
+- `Statis[]` enthält Statusinformationen zu Linien (Farben, Meldungen, Werte).
+- Diese Daten sind **nicht identisch** mit `gisLines.data` aus der Datenbank.
+
+---
+
+## ❗ Unterschied zu `gisLinesSlice` (aus der Datenbank)
+
+| Eigenschaft | `gisLines` (DB) | `gisLinesStatus` (WebService) |
+| ----------- | --------------------------- | ----------------------------------- |
+| Quelle | `api/talas_v5_DB/gisLines` | `WebServiceMap.asmx/GisLinesStatus` |
+| Daten | Liniengeometrien (`points`) | Status, Meldungen, Farben, Werte |
+| Typ | `PolyLine-Daten` | `Statusanzeige` für Linien |
+| Nutzung | Layer-Rendering | Farbliche Darstellung / Tooltip |
+
+---
+
+## 🧠 Verwendung im Frontend
+
+- Die Daten werden über `fetchGisLinesStatusThunk` geladen.
+- Sie landen im Redux Slice `gisLinesStatusSlice`.
+- Zugriff über: `selectGisLinesStatus(state)` → enthält `.data`, `.status`, `.error`
+
+---
+
+## 📁 Zugehörige Dateien
+
+| Datei | Zweck |
+| ------------------------------- | ---------------------- |
+| `fetchGisLinesStatusService.js` | WebService-Aufruf |
+| `fetchGisLinesStatusThunk.js` | Redux Thunk |
+| `gisLinesStatusSlice.js` | Redux Slice |
+| `store.js` | Integration des Slices |
diff --git a/docs/docs/services/webservice/fetchGisStationsMeasurementsService.md b/docs/docs/services/webservice/fetchGisStationsMeasurementsService.md
new file mode 100644
index 000000000..f10c4b708
--- /dev/null
+++ b/docs/docs/services/webservice/fetchGisStationsMeasurementsService.md
@@ -0,0 +1,16 @@
+
+
+# 📈 fetchGisStationsMeasurementsService.js
+
+Lädt Schleifen- und Isolationswerte für Stationen.
+
+## Verwendung
+
+```js
+const messwerte = await fetchGisStationsMeasurementsService();
+```
+
+## API-Aufruf
+
+- Endpoint: `/ClientData/WebServiceMap.asmx/GisStationsMeasurements?idMap=...&idUser=...`
+- Rückgabe: `Statis[]`
\ No newline at end of file
diff --git a/docs/docs/services/webservice/fetchGisStationsStaticDistrictService.md b/docs/docs/services/webservice/fetchGisStationsStaticDistrictService.md
new file mode 100644
index 000000000..5ab0812b3
--- /dev/null
+++ b/docs/docs/services/webservice/fetchGisStationsStaticDistrictService.md
@@ -0,0 +1,16 @@
+
+
+# 🧭 fetchGisStationsStaticDistrictService.js
+
+Lädt Koordinateninformationen (`Points[]`) aller Stationen im aktuellen Bezirk.
+
+## Verwendung
+
+```js
+const points = await fetchGisStationsStaticDistrictService();
+```
+
+## API-Aufruf
+
+- Endpoint: `/ClientData/WebServiceMap.asmx/GisStationsStaticDistrict?idMap=...&idUser=...`
+- Rückgabe: `Points[]`
\ No newline at end of file
diff --git a/docs/docs/services/webservice/fetchGisStationsStatusDistrictService.md b/docs/docs/services/webservice/fetchGisStationsStatusDistrictService.md
new file mode 100644
index 000000000..c5d217c08
--- /dev/null
+++ b/docs/docs/services/webservice/fetchGisStationsStatusDistrictService.md
@@ -0,0 +1,16 @@
+
+
+# 🚦 fetchGisStationsStatusDistrictService.js
+
+Service zum Abrufen des Status aller Stationen im aktuellen Bezirk.
+
+## Verwendung
+
+```js
+const result = await fetchGisStationsStatusDistrictService();
+```
+
+## API-Aufruf
+
+- Endpoint: `/ClientData/WebServiceMap.asmx/GisStationsStatusDistrict?idMap=...&idUser=...`
+- Rückgabe: `Statis[]`
\ No newline at end of file
diff --git a/docs/docs/services/webservice/fetchGisSystemStaticService.md b/docs/docs/services/webservice/fetchGisSystemStaticService.md
new file mode 100644
index 000000000..1a7da718f
--- /dev/null
+++ b/docs/docs/services/webservice/fetchGisSystemStaticService.md
@@ -0,0 +1,16 @@
+
+
+# 🧱 fetchGisSystemStaticService.js
+
+Service zur Abfrage von Systemdaten aller Module aus dem Webservice.
+
+## Verwendung
+
+```js
+const systems = await fetchGisSystemStaticService();
+```
+
+## API-Aufruf
+
+- Endpoint: `/ClientData/WebServiceMap.asmx/GisSystemStatic?idMap=...&idUser=...`
+- Rückgabe: `Systems[]`
\ No newline at end of file
diff --git a/docs/docs/services/webservice/fetchUserRightsService.md b/docs/docs/services/webservice/fetchUserRightsService.md
new file mode 100644
index 000000000..ed0b170cb
--- /dev/null
+++ b/docs/docs/services/webservice/fetchUserRightsService.md
@@ -0,0 +1,16 @@
+
+
+# 🔐 fetchUserRightsService.js
+
+Lädt die Benutzerrechte über den TALAS WebService.
+
+## Verwendung
+
+```js
+const rights = await fetchUserRightsService();
+```
+
+## API-Aufruf
+
+- Endpoint: `/ClientData/WebServiceMap.asmx/GisSystemStatic?idMap=...&idUser=...`
+- Rückgabe: `Rights[]` (Fallback: `[]`)
\ No newline at end of file
diff --git a/docs/docs/utils/addContextMenuToMarker.md b/docs/docs/utils/addContextMenuToMarker.md
new file mode 100644
index 000000000..beaf58578
--- /dev/null
+++ b/docs/docs/utils/addContextMenuToMarker.md
@@ -0,0 +1,28 @@
+
+
+# 🧭 addContextMenuToMarker.js
+
+Fügt einem Leaflet-Marker ein individuelles Kontextmenü hinzu.
+
+## Zweck
+
+- Erlaubt dem Nutzer über Rechtsklick oder Interaktion den Zugriff auf Funktionen wie:
+ - „Station öffnen (Tab)“
+ - „Details anzeigen“
+ - „Bearbeiten starten“
+
+## Verwendung
+
+```js
+addContextMenuToMarker(marker, idLD, name);
+```
+
+## Parameter
+
+- `marker`: Leaflet-Marker
+- `idLD`: Geräte-ID
+- `name`: Anzeigename
+
+## Kontext
+
+- Wird z. B. in `createAndSetDevices.js` verwendet
diff --git a/docs/docs/utils/contextMenuUtils.md b/docs/docs/utils/contextMenuUtils.md
new file mode 100644
index 000000000..753c40008
--- /dev/null
+++ b/docs/docs/utils/contextMenuUtils.md
@@ -0,0 +1,14 @@
+
+
+# 📋 contextMenuUtils.js
+
+Hilfsfunktionen zur Verwaltung des Kontextmenüs auf Kartenmarkern und Polylinien.
+
+## Exportierte Funktionen
+
+- `getPoiContextMenuOptions(marker)`
+- `getPolylineContextMenuOptions(line)`
+
+## Zweck
+
+- Menüeinträge je nach Zustand und Marker-Art dynamisch generieren
diff --git a/docs/docs/utils/devices/createAndSetDevices.md b/docs/docs/utils/devices/createAndSetDevices.md
new file mode 100644
index 000000000..62dece85a
--- /dev/null
+++ b/docs/docs/utils/devices/createAndSetDevices.md
@@ -0,0 +1,107 @@
+
+
+# 🧭 createAndSetDevices.js – Geräte setzen und verwalten
+
+## Zweck
+
+Diese Datei erstellt Leaflet-Marker für aktive Geräte basierend auf Webservice-Daten
+und konfiguriert Kontexteinträge für Interaktionen wie:
+
+- Geräte-Popup anzeigen
+- Station/Gerät per Klick in neue Tab öffnen -> Kontextmenü ->Item "Station öffnen (Tab)"
+- Statusinformationen einblenden
+- Redux-Aktionen für ausgewähltes Gerät auslösen
+
+Die erzeugten Marker werden über `setMarkersFunction(markersData)` an die aufrufende Komponente übergeben.
+
+---
+
+## Datenquellen
+
+Die Daten stammen aus:
+
+- `GisStationsStaticDistrict` (statische Stationsinfos)
+- `GisStationsStatusDistrict` (Statusinformationen)
+
+Sie werden entweder über echte Webservices oder Mock-Daten geladen.
+
+---
+
+## Besonderheiten
+
+- Marker werden mit Prioritätsicons gerendert
+- Redux-Slices:
+ - `selectedDeviceSlice` wird bei Hover gesetzt
+ - `lineVisibilitySlice` aktualisiert Linienstatus
+- Leaflet-Kontextmenü (nur Marker) mit Menüeintrag:
+ „Station öffnen (Tab)“
+
+---
+
+## Dynamische URL mit Port-Logik
+
+Die Station-Links im Kontextmenü nutzen keine feste URL mehr.
+Stattdessen wird dynamisch unterschieden:
+
+```js
+const mode = process.env.NEXT_PUBLIC_API_PORT_MODE;
+
+const baseUrl =
+ mode === "dev"
+ ? \`\${window.location.protocol}//\${window.location.hostname}:80/talas5/\`
+ : \`\${window.location.origin}/talas5/\`;
+```
+
+➡ Dadurch wird verhindert, dass bei jeder Server-IP `.env.local` oder ein Build nötig ist.
+
+---
+
+## Kontextmenüaktion
+
+```js
+window.open(`${baseUrl}cpl.aspx?ver=35&kue=24&id=${station.IdLD}`, "_blank");
+```
+
+---
+
+## Schutz vor doppelten Kontextmenüs
+
+Ein `contextMenuCreated`-Flag stellt sicher, dass pro Marker nur **ein** Kontextmenü erzeugt wird:
+
+```js
+if (!contextMenuCreated) {
+ contextMenuCreated = true;
+ marker.bindContextMenu({ ... });
+}
+```
+
+➡ Verhindert Duplikate bei wiederholten Rechtsklicks
+
+---
+
+## Weitere Funktionen
+
+- Popup-HTML enthält Statusanzeigen (Name, Farbe, Meldung)
+- Marker werden auf Klick animiert (bounce-Effekt)
+- Kontextmenüeinträge werden sauber entfernt bei Klick außerhalb
+
+---
+
+## Tests
+
+- Marker wird bei gültigen Daten erzeugt
+- Kontextmenü enthält nur **einen** Eintrag „Station öffnen“
+- Popup zeigt korrekte Statusinformationen (Farben, Texte)
+- Redux `setSelectedDevice(...)` wird korrekt aufgerufen
+
+---
+
+## Siehe auch
+
+- `setupPolylines.js`
+- `redux/slices/selectedDeviceSlice.js`
+- Webservices: `fetchGisStationsStaticDistrict.js`, `fetchGisStationsStatusDistrict.js`
+
+---
+
+📄 Pfad: `/docs/frontend/utils/devices/createAndSetDevices.md`
diff --git a/docs/docs/utils/geometryUtils.md b/docs/docs/utils/geometryUtils.md
new file mode 100644
index 000000000..4dd2920f1
--- /dev/null
+++ b/docs/docs/utils/geometryUtils.md
@@ -0,0 +1,14 @@
+
+
+# 📐 geometryUtils.js
+
+Mathematische Funktionen zur Berechnung geometrischer Werte auf der Karte.
+
+## Funktionen
+
+- `calculateDistance(latlng1, latlng2)`
+- `getMidpoint(coords)`
+
+## Zweck
+
+- Interne Hilfsfunktionen für Strecken, Tooltip-Positionen etc.
diff --git a/docs/docs/utils/initializeMap.md b/docs/docs/utils/initializeMap.md
new file mode 100644
index 000000000..738b33a9f
--- /dev/null
+++ b/docs/docs/utils/initializeMap.md
@@ -0,0 +1,15 @@
+
+
+# 🗺️ initializeMap.js
+
+Initialisiert die Leaflet-Karte mit Basislayern, Gruppen und globalen Events.
+
+## Funktionen
+
+- `initializeMap(mapElementId)`
+
+## Verhalten
+
+- Erstellt LayerGroups (Devices, POIs, Linien)
+- Bindet Kontextmenü
+- Stellt Default-Zoom und Position ein
diff --git a/docs/docs/utils/mapUtils.md b/docs/docs/utils/mapUtils.md
new file mode 100644
index 000000000..4db6069a7
--- /dev/null
+++ b/docs/docs/utils/mapUtils.md
@@ -0,0 +1,10 @@
+
+
+# 🧰 mapUtils.js
+
+Allgemeine Hilfsfunktionen für Leaflet (z. B. Zoom, Marker-Checks, Layer-Findung).
+
+## Funktionen
+
+- `zoomToBounds(layerGroup)`
+- `findLayerById(map, id)`
diff --git a/docs/docs/utils/markerUtils.md b/docs/docs/utils/markerUtils.md
new file mode 100644
index 000000000..0df242dce
--- /dev/null
+++ b/docs/docs/utils/markerUtils.md
@@ -0,0 +1,14 @@
+
+
+# 📍 markerUtils.js
+
+Hilfsfunktionen zur Erstellung und Konfiguration von Leaflet-Markern.
+
+## Exportierte Funktionen
+
+- `createIconByType(type)`
+- `createMarker(position, icon)`
+
+## Kontext
+
+- Wird in `setupDevices.js` und `setupPOIs.js` verwendet
diff --git a/docs/docs/utils/mysqlPool.md b/docs/docs/utils/mysqlPool.md
new file mode 100644
index 000000000..847f12ae7
--- /dev/null
+++ b/docs/docs/utils/mysqlPool.md
@@ -0,0 +1,16 @@
+
+
+# 💾 mysqlPool.js
+
+MySQL-Verbindungspool für effiziente Datenbankabfragen (z. B. mit `promise-mysql`).
+
+## Verwendung
+
+```js
+const connection = await pool.getConnection();
+```
+
+## Zweck
+
+- Reuse von Verbindungen
+- Fehlervermeidung bei vielen gleichzeitigen Abfragen
diff --git a/docs/docs/utils/openInNewTab.md b/docs/docs/utils/openInNewTab.md
new file mode 100644
index 000000000..d883d4f63
--- /dev/null
+++ b/docs/docs/utils/openInNewTab.md
@@ -0,0 +1,15 @@
+
+
+# 🪟 openInNewTab.js
+
+Öffnet eine URL in einem neuen Tab und schützt vor Referrer-Leaks.
+
+## Verwendung
+
+```js
+openInNewTab(url);
+```
+
+## Intern
+
+- nutzt `window.open` mit `noopener,noreferrer`
diff --git a/docs/docs/utils/openInSameWindow.md b/docs/docs/utils/openInSameWindow.md
new file mode 100644
index 000000000..c778e2c18
--- /dev/null
+++ b/docs/docs/utils/openInSameWindow.md
@@ -0,0 +1,15 @@
+
+
+# 🚪 openInSameWindow.js
+
+Öffnet eine URL im aktuellen Tab.
+
+## Verwendung
+
+```js
+openInSameWindow("/target");
+```
+
+## Verhalten
+
+- `window.location.href = url`
diff --git a/docs/docs/utils/poiUtils.md b/docs/docs/utils/poiUtils.md
new file mode 100644
index 000000000..aa67c8922
--- /dev/null
+++ b/docs/docs/utils/poiUtils.md
@@ -0,0 +1,14 @@
+
+
+# 🧭 poiUtils.js
+
+Hilfsfunktionen zur Handhabung von POIs (z. B. Icons, Typzuordnung, Interaktion).
+
+## Funktionen
+
+- `getIconForPoiType(type)`
+- `groupPOIsByType(list)`
+
+## Verwendung
+
+- In `setupPOIs.js` und Thunks für POI-Handling
diff --git a/docs/docs/utils/polylines/contextMenu.md b/docs/docs/utils/polylines/contextMenu.md
new file mode 100644
index 000000000..df9114129
--- /dev/null
+++ b/docs/docs/utils/polylines/contextMenu.md
@@ -0,0 +1,10 @@
+
+
+# 📋 contextMenu.js
+
+Funktionen zum Steuern des Polyline-Kontextmenüs (Schließen, Zurücksetzen, etc.).
+
+## exportierte Funktionen
+
+- `closePolylineSelectionAndContextMenu(map)`: Setzt Polyline-Auswahl zurück und schließt das Kontextmenü
+- `monitorContextMenu(map)`: Überwacht via `localStorage`, ob das Menü automatisch geschlossen werden soll
\ No newline at end of file
diff --git a/docs/docs/utils/polylines/eventHandlers.md b/docs/docs/utils/polylines/eventHandlers.md
new file mode 100644
index 000000000..e28deb95a
--- /dev/null
+++ b/docs/docs/utils/polylines/eventHandlers.md
@@ -0,0 +1,10 @@
+
+
+# 🖱️ eventHandlers.js
+
+Bindet Maus-Events an Polylinien (z. B. Hover-Effekte).
+
+## exportierte Funktionen
+
+- `enablePolylineEvents(polylines, lineColors)`
+- `disablePolylineEvents(polylines)`
\ No newline at end of file
diff --git a/docs/docs/utils/polylines/monitorContextMenu.md b/docs/docs/utils/polylines/monitorContextMenu.md
new file mode 100644
index 000000000..5e72ebb20
--- /dev/null
+++ b/docs/docs/utils/polylines/monitorContextMenu.md
@@ -0,0 +1,10 @@
+
+
+# 🔄 monitorContextMenu.js
+
+Erweiterte Überwachung des Kontextmenüs über `localStorage`.
+
+## Funktion
+
+- Importiert `closePolylineSelectionAndContextMenu`
+- Ruft regelmäßig `setTimeout` auf, um `contextMenuExpired` zu prüfen
\ No newline at end of file
diff --git a/docs/docs/utils/polylines/polylineSubscription.md b/docs/docs/utils/polylines/polylineSubscription.md
new file mode 100644
index 000000000..a7374f798
--- /dev/null
+++ b/docs/docs/utils/polylines/polylineSubscription.md
@@ -0,0 +1,10 @@
+
+
+# 🧭 polylineSubscription.js
+
+Abonnement auf den Redux-Store, um auf `forceClose` im Kontextmenü zu reagieren.
+
+## Verhalten
+
+- Erkennt `polylineContextMenu.forceClose`
+- Ruft `contextmenu.hide()` auf und resetet Redux-Status
\ No newline at end of file
diff --git a/docs/docs/utils/polylines/redrawPolyline.md b/docs/docs/utils/polylines/redrawPolyline.md
new file mode 100644
index 000000000..e7ae9d31f
--- /dev/null
+++ b/docs/docs/utils/polylines/redrawPolyline.md
@@ -0,0 +1,14 @@
+
+
+# 🔁 redrawPolyline.js
+
+Zeichnet eine Polyline mit neuen Koordinaten und Tooltip neu.
+
+## Funktion
+
+```js
+redrawPolyline(lineData, lineColors, tooltipContents, map)
+```
+
+- Entfernt vorherige Polyline
+- Erstellt neue mit Tooltip und Hover-Effekten
\ No newline at end of file
diff --git a/docs/docs/utils/polylines/setupPolylines.md b/docs/docs/utils/polylines/setupPolylines.md
new file mode 100644
index 000000000..1f3c20246
--- /dev/null
+++ b/docs/docs/utils/polylines/setupPolylines.md
@@ -0,0 +1,76 @@
+
+
+# 🧭 setupPolylines.js – Polylinien zeichnen und verwalten
+
+## Zweck
+
+Diese Datei enthält die zentrale Funktion `setupPolylines`, die in der Kartenkomponente (Leaflet) Polylinien sowie Marker basierend auf Gerätekonfigurationen zeichnet und verwaltet.
+
+Sie wird verwendet, um:
+
+- Polylinien basierend auf Koordinaten zu zeichnen
+- Stützpunkte visuell als Marker anzuzeigen
+- Marker kontextsensitiv mit Optionen (z. B. „Stützpunkt entfernen“, „Koordinaten anzeigen“) auszustatten
+- Linien aktualisieren und neue Koordinaten in die Datenbank schreiben
+- Kontextmenü-Interaktionen zu ermöglichen
+
+---
+
+## Besonderheiten
+
+- Marker mit speziellen Icons (Start, Ende, Zwischenpunkt)
+- Interaktivität abhängig vom Bearbeitungsmodus (editMode aus `localStorage`)
+- Kontextmenü pro Marker und Linie individuell steuerbar
+- API-Aufrufe zur Koordinaten-Aktualisierung:
+ `POST /api/talas_v5_DB/gisLines/updateLineCoordinates`
+
+---
+
+## Dynamische URL mit Port-Steuerung
+
+Die Datei verwendet **keine feste API-Basis-URL** mehr aus `.env.local`.
+Stattdessen wird `NEXT_PUBLIC_API_PORT_MODE` genutzt, um zwischen Entwicklungs- und Produktionsumgebung zu unterscheiden:
+
+```env
+NEXT_PUBLIC_API_PORT_MODE=dev
+```
+
+### Beispiel im Code:
+
+```js
+const mode = process.env.NEXT_PUBLIC_API_PORT_MODE;
+
+const baseUrl = mode === "dev" ? `${window.location.protocol}//${window.location.hostname}:80/talas5/` : `${window.location.origin}/talas5/`;
+```
+
+---
+
+## Kontextmenüaktionen
+
+- Station öffnen (neuer Tab)
+- Koordinaten anzeigen
+- Zoom in/out
+- Karte zentrieren
+- Stützpunkt hinzufügen/entfernen (wenn editMode)
+
+---
+
+## Speicherorte
+
+- Polylinien und LineColors werden unter `window.polylines` und `window.lineColors` global gespeichert
+- Aktive Redux-Slices:
+ - `polylineContextMenuSlice`
+ - `addPoiOnPolylineSlice`
+ - `polylineLayerVisibleSlice`
+
+---
+
+## Siehe auch
+
+- API-Aufruf: `/api/talas_v5_DB/gisLines/updateLineCoordinates`
+- `utils/geometryUtils.js`, `poiUtils.js`, `eventHandlers.js`
+- `redux/slices/polylineContextMenuSlice.js`
+
+---
+
+📄 Pfad: `/docs/frontend/utils/polylines/setupPolylines.md`
diff --git a/docs/docs/utils/setupDevices.md b/docs/docs/utils/setupDevices.md
new file mode 100644
index 000000000..3297a5cf7
--- /dev/null
+++ b/docs/docs/utils/setupDevices.md
@@ -0,0 +1,15 @@
+
+
+# 🔌 setupDevices.js
+
+Fügt alle Geräte (Devices) zur Karte hinzu.
+
+## Funktionen
+
+- `setupDevices(map, deviceList)`
+
+## Verhalten
+
+- Marker-Erstellung
+- Eventbindung
+- Layer-Zuweisung
diff --git a/docs/docs/utils/setupPOIs.md b/docs/docs/utils/setupPOIs.md
new file mode 100644
index 000000000..c84e09202
--- /dev/null
+++ b/docs/docs/utils/setupPOIs.md
@@ -0,0 +1,32 @@
+
+
+# 🧭 `setupPOIs.js`
+
+## Zweck
+
+Zeichnet alle POI-Marker auf die Leaflet-Karte basierend auf Datenbankeinträgen. Bindet Popup, Kontextmenü, Drag'n'Drop und Redux-Zustand ein.
+
+## Parameter
+
+| Name | Beschreibung |
+| ----------------- | ---------------------------------------------------- |
+| `map` | Leaflet-Instanz |
+| `pois` | Array mit POI-Objekten aus der Datenbank |
+| `poiData` | Array mit Iconpfaden: `{ idPoi, path }` |
+| `poiTypMap` | Map-Objekt: `idPoiTyp → Name` |
+| `poiLayerVisible` | Gibt an, ob Layer überhaupt gezeichnet werden sollen |
+
+## Besonderheiten
+
+- Icon wird über `iconMap.get(idPoi)` bezogen
+- Fallback bei unbekanntem Icon (`default-icon.png`)
+- Rechteprüfung für Drag & Kontextmenü (`userRights.some(...)`)
+- Marker können bearbeitet, verschoben, gelöscht werden
+- Bei `mouseover` → Redux: `setSelectedPoi(poi)`
+
+## Beispiel für Testdaten
+
+```js
+const poi = { idPoi: 7, idPoiTyp: 2, position: "POINT(8.5 53.1)", description: "Mast", idLD: 123 };
+const poiData = [{ idPoi: 7, path: "poi-marker-icon-2.png" }];
+```
diff --git a/docs/docs/utils/zoomAndCenterUtils.md b/docs/docs/utils/zoomAndCenterUtils.md
new file mode 100644
index 000000000..a2bb75dca
--- /dev/null
+++ b/docs/docs/utils/zoomAndCenterUtils.md
@@ -0,0 +1,10 @@
+
+
+# 🔍 zoomAndCenterUtils.js
+
+Hilfsfunktionen zum Zoomen auf Marker oder Linien.
+
+## Funktionen
+
+- `zoomToMarker(map, marker)`
+- `centerOnCoordinates(map, coords)`