# IT Nexus – Systemdokumentation

**Version:** 2.0 | **Stand:** Mai 2026 | **Entwickelt von:** Simon Grüßing, Cereda Systems GmbH

---

## Inhaltsverzeichnis

1. [Systemübersicht](#1-systemübersicht)
2. [Zugang & Benutzerrollen](#2-zugang--benutzerrollen)
3. [Ticketsystem – Übersicht](#3-ticketsystem--übersicht)
4. [Ticket erstellen](#4-ticket-erstellen)
5. [Ticket-Ansichten](#5-ticket-ansichten)
6. [Ticket-Detail & Bearbeitung](#6-ticket-detail--bearbeitung)
7. [Kommentare & Kommunikation](#7-kommentare--kommunikation)
8. [KI-Integration](#8-ki-integration)
9. [User-Portal (Benutzer)](#9-user-portal-benutzer)
10. [E-Mail-Integration](#10-e-mail-integration)
11. [Benachrichtigungen](#11-benachrichtigungen)
12. [Admin-Einstellungen](#12-admin-einstellungen)
13. [Weitere Module](#13-weitere-module)
14. [IT Nexus Scanner App (Android)](#14-it-nexus-scanner-app-android)
15. [Rollen-Berechtigungsmatrix](#15-rollen-berechtigungsmatrix)
16. [ISO 27001 Zertifizierungsplanung](#16-iso-27001-zertifizierungsplanung)
17. [Risikoanalyse](#17-risikoanalyse)
18. [Entra ID Rechteverwaltung](#18-entra-id-rechteverwaltung)
19. [Agent Monitoring](#19-agent-monitoring)
20. [Externe Monitoring-Alerts](#20-externe-monitoring-alerts)
21. [Patch Management](#21-patch-management)
22. [Ankündigungen](#22-ankündigungen)

---

## 1. Systemübersicht

IT Nexus ist ein internes IT-Ticketsystem und Verwaltungsportal der Cereda Systems GmbH. Es ermöglicht Mitarbeitern, IT-Probleme zu melden, und dem IT-Support-Team, diese effizient zu bearbeiten.

**Erreichbar unter:** `https://it-nexus.cereda-systems.de`

### Kernfunktionen

| Modul | Beschreibung |
|---|---|
| **Ticketsystem** | Erstellen, Bearbeiten und Verwalten von IT-Supportanfragen |
| **User-Portal** | Vereinfachte Oberfläche für Endnutzer zur Anfragenstellung |
| **KI-Assistent** | Claude-basierte Analysen, Lösungsvorschläge und Chat-Hilfe |
| **E-Mail-Integration** | Eingehende Mails werden automatisch zu Tickets |
| **Asset-Verwaltung** | Hardware und Software-Inventar |
| **FIDO-Keys** | Verwaltung von Sicherheitsschlüsseln |
| **Lifecycle** | On- und Offboarding-Prozesse |
| **IT Übersicht** | Strategische IT-Themen für monatliche GF-Meetings (JF IT) |
| **Wissensdatenbank** | Dokumentierte Lösungen für häufige Probleme |
| **ISO 27001 Planung** | Fortschrittsverfolgung der ISO-Zertifizierungsaufgaben |
| **Risikoanalyse** | Manuelle und automatische IT-Risikoerfassung mit M365-Sync |
| **Entra ID Rechte** | Übersicht und Verwaltung von Benutzerrechten in Microsoft Entra ID |
| **Agent Monitoring** | Echtzeit-Überwachung aller Windows-Geräte via C# .NET Agent (v2.0.0) |
| **Patch Management** | Staged Rollout von Windows Updates mit Gruppen, Policies und Befehlen |
| **Ankündigungen** | Desktop-Benachrichtigungen auf verwalteten Geräten via Agent |

---

## 2. Zugang & Benutzerrollen

### Login

1. `https://it-nexus.cereda-systems.de/login` aufrufen
2. Benutzername und Passwort eingeben
3. Bei erstem Login: Passwort-Änderung erforderlich

### Benutzerrollen

Das System kennt 8 Rollen mit unterschiedlichen Berechtigungen:

| Rolle | Bezeichnung | Zugang |
|---|---|---|
| **super_admin** | 👑 Super Administrator | Vollzugriff auf alle Funktionen inkl. Systemeinstellungen |
| **admin** | 🛡️ Administrator | Vollzugriff, außer einige Super-Admin-Funktionen |
| **support** | 🎧 IT-Support | Tickets bearbeiten, kommentieren, zuweisen; sieht IT-Aufgaben im Onboarding |
| **bearbeiter** | 🔧 Bearbeiter | Assets und FIDO-Keys verwalten, Tickets einsehen |
| **techniker** | 🏭 Techniker / Produktion | Assets (Maschinen, Werkzeuge) anlegen und Prüfprotokoll führen; vereinfachter Wizard |
| **benutzer** | 👤 Endnutzer | Nur User-Portal – eigene Anfragen stellen und einsehen |
| **hr_personal** | 🧑‍💼 HR / Personal | Sieht und bearbeitet HR-Aufgaben im Onboarding-Protokoll |
| **buchhaltung** | 💶 Buchhaltung / Lohn | Sieht und bearbeitet Buchhaltungs-Aufgaben im Onboarding-Protokoll |

> **Hinweis:** Endnutzer sehen nach dem Login automatisch das User-Portal (`/portal`) statt das Dashboard.

### Passwort-Anforderungen

- Mindestens 8 Zeichen
- Mindestens 1 Großbuchstabe, 1 Kleinbuchstabe, 1 Zahl, 1 Sonderzeichen

---

## 3. Ticketsystem – Übersicht

### Ticket-Status

Jedes Ticket durchläuft folgende Status-Stufen:

```
Offen → In Bearbeitung → Warten auf Mitarbeiter ⟺ Warten auf Support → Geschlossen
```

| Status | Beschreibung | Farbe |
|---|---|---|
| **Offen** | Neu eingegangen, noch nicht bearbeitet | Grau |
| **In Bearbeitung** | Support hat das Ticket übernommen | Blau |
| **Warten auf Mitarbeiter** | Support hat geantwortet, wartet auf Rückmeldung | Orange |
| **Warten auf Support** | Nutzer hat geantwortet, Support ist dran | Gelb |
| **Geschlossen** | Problem gelöst | Grün |

#### Automatische Status-Änderungen beim Kommentieren

- **Support schreibt** öffentlichen Kommentar → Status wechselt zu „Warten auf Mitarbeiter"
- **Nutzer/Bearbeiter schreibt** → Status wechselt zu „Warten auf Support"
- **Nutzer schreibt** auf geschlossenes Ticket → Ticket wird automatisch **wieder geöffnet**

### Prioritäten

| Priorität | Symbol | Einsatz |
|---|---|---|
| 🟢 Niedrig | Grün | Keine Dringlichkeit, kein Produktionsausfall |
| 🔵 Mittel | Blau | Standard-Anfragen |
| 🟠 Hoch | Orange | Wichtige Systeme betroffen |
| 🔴 Kritisch | Rot | Produktionsausfall, sofortiger Handlungsbedarf |

### SLA-Überwachung

Das System überwacht automatisch die Bearbeitungszeit:
- **> 24 Stunden** ohne Reaktion → orangefarbene SLA-Warnung auf der Ticket-Karte
- **> 48 Stunden** → rote SLA-Warnung

---

## 4. Ticket erstellen

### Über die Tickets-Seite (Staff)

1. **Tickets** in der Sidebar anklicken
2. **+ Neues Ticket** Button klicken
3. Formular ausfüllen:

| Feld | Pflicht | Beschreibung |
|---|---|---|
| **Vorlage** | Nein | Vorausgefüllte Vorlage wählen (z.B. Passwort-Reset) |
| **Titel** | Ja | Kurze Beschreibung des Problems |
| **Beschreibung** | Nein | Detaillierte Schilderung |
| **Kategorie** | Ja | Themenbereich (konfigurierbar in Einstellungen) |
| **Priorität** | Ja | Dringlichkeit (Standard: Mittel) |
| **Betroffenes Asset** | Nein | Verknüpfung mit einem Gerät/Asset |
| **Anfragender Name** | Nein | Wird automatisch aus dem Login befüllt |
| **Anfragender E-Mail** | Nein | Für externe Benachrichtigungen |

4. **Ticket erstellen** klicken

### Über das User-Portal (Endnutzer)

Endnutzer können Anfragen über das vereinfachte Portal stellen:
1. **Neue Anfrage stellen** klicken
2. Thema wählen (Assistent führt durch häufige Probleme)
3. Geführte Fragen beantworten → Ticket wird automatisch ausgefüllt
4. Alternativ: Freies Formular für individuelle Anfragen

### Ticket-Vorlagen

Standard-Vorlagen erleichtern das Erstellen wiederkehrender Anfragen:
- Passwort-Reset
- VPN-Probleme
- Drucker defekt
- Neues Gerät einrichten
- Software-Installation
- SelectLine Fehler
- E-Mail Problem
- Netzwerk-Ausfall

> Vorlagen können unter **⚙️ → System → Einstellungen** angepasst werden.

### Ticket-Nummer

Jedes Ticket erhält automatisch eine eindeutige Nummer im Format **TK-XXXX** (z.B. `TK-0042`).

---

## 5. Ticket-Ansichten

### Tabellen-Ansicht

Standardansicht mit allen Tickets als Liste:
- Spalten: Ticket-Nr., Titel, Status, Priorität, Kategorie, Zugewiesen an, Erstellt
- Klick auf eine Zeile öffnet die Detail-Ansicht

### Kanban-Board

Visuelles Board mit 4 Spalten (eine pro Status, ohne „Geschlossen"):

```
[ Offen ] [ In Bearbeitung ] [ Warten auf Mitarbeiter ] [ Warten auf Support ]
```

- Tickets können per **Drag & Drop** zwischen Spalten verschoben werden
- Schnell-Status-Buttons direkt auf der Karte
- Ticket schließen über „✓ Schließen" mit optionalem Abschluss-Kommentar

### Metriken-Ansicht

Dashboard mit Kennzahlen:
- Gesamt / Offen / In Bearbeitung / Kritisch
- Klick auf Kacheln filtert die Ticket-Liste

### Suche & Filter

- **Freitextsuche**: Sucht in Titel, Beschreibung, Ticket-Nr., Anfragender
- **Status-Filter**: Schnellfilter per Klick auf Status-Badge
- **Priorität**: Dropdown-Filter
- **Kategorie**: Dropdown-Filter

### Bulk-Aktionen

Mehrere Tickets gleichzeitig bearbeiten:
1. Checkboxen aktivieren
2. Aktion wählen: Status setzen, Priorität setzen, Zuweisen, Schließen, Löschen
3. Ausführen klicken

---

## 6. Ticket-Detail & Bearbeitung

Die Detail-Seite eines Tickets (`/tickets/:id`) zeigt:

### Kopfbereich
- Ticket-Nummer, Titel, Status-Badge, Priorität
- Erstellt von / Erstellt am / Zugewiesen an
- Anfragender (Name + E-Mail)
- Betroffenes Asset (falls verknüpft)

### Bearbeitungsbereich (Staff)

**Status ändern:** Dropdown direkt im Header
**Priorität ändern:** Dropdown direkt im Header
**Zuweisen:** Mitarbeiter aus der Dropdown-Liste auswählen → Benachrichtigung geht automatisch raus
**Kategorie:** Änderbar im Bearbeitungsmodus

### KI-Analyse

Neue Tickets werden automatisch von Claude analysiert. Im Detail werden angezeigt:
- **Erkannte Kategorie** (automatisch)
- **Empfohlene Priorität**
- **Lösungsvorschlag** basierend auf dem Problem und der Wissensdatenbank

### Ticket-Verknüpfungen

Tickets können miteinander verknüpft werden (z.B. „Verwandt mit TK-0023").

### PDF-Export

Ticket als PDF exportieren über den **PDF**-Button (inkl. Kommentarverlauf).

### Ticket schließen

- Über **Schließen**-Button oder Status-Änderung
- Optionaler Abschluss-Kommentar
- Geschlossene Tickets erscheinen nur noch in der Wissensdatenbank

---

## 7. Kommentare & Kommunikation

### Öffentliche Kommentare

Sichtbar für alle (inkl. Anfragenden via E-Mail-Benachrichtigung):
- Werden als E-Mail an den Anfragenden gesendet
- Lösen Auto-Status-Änderungen aus

### Interne Notizen

Nur für Staff-Rollen sichtbar, erkennbar an grauem Hintergrund:
- Kein E-Mail-Versand
- Für interne Abstimmung

### Markdown-Unterstützung

Kommentare unterstützen einfaches Markdown:
- `**fett**`, `*kursiv*`
- `` `code` ``
- Zeilenumbrüche

### Live-Updates (SSE)

Die Kommentar-Sektion aktualisiert sich in Echtzeit ohne Browser-Reload (Server-Sent Events). Neue Kommentare erscheinen sofort.

### KI-Antwort

**KI-Antwort vorschlagen** Button generiert eine vorformulierte Antwort an den Nutzer basierend auf dem Ticket-Inhalt und der Wissensdatenbank. Text kann vor dem Absenden bearbeitet werden.

---

## 8. KI-Integration

IT Nexus integriert Claude (claude-sonnet-4-6) von Anthropic für intelligente Ticket-Unterstützung.

### Automatische Ticket-Analyse

Bei jedem neuen Ticket analysiert die KI automatisch (im Hintergrund):
- Passendes Themengebiet / Kategorie
- Empfohlene Priorität
- Ersten Lösungsvorschlag

Das Ergebnis erscheint als **„KI-Vorschlag"** im Ticket-Detail.

### KI-Assistent Chat (`/ai`)

Interaktive Chat-Seite für Staff-Rollen:
- Freie Fragen zum IT-Support stellen
- KI hat Zugriff auf die Wissensdatenbank
- Konversationsverlauf im Browser-Tab

### Wissensdatenbank

Unter **Wissensdatenbank** können Admins Artikel verwalten und per KI-Import befüllen. Die KI nutzt alle Einträge als Kontext bei Ticket-Analysen und Chat-Antworten.

#### Import-Funktionen
| Methode | Beschreibung |
|---|---|
| **Text einfügen** | Direkt Text/Dokumentation einfügen → KI erstellt Artikel |
| **Datei hochladen** | PDF, DOCX, EML, TXT → KI extrahiert Artikel |
| **URL importieren** | Einzelne Webseite abrufen und importieren |
| **Website crawlen** | BFS-Crawler folgt Links auf gleicher Domain (bis 100 Seiten) |

Bereits importiert: **SelectLine Online-Hilfe** (Wawi, Rewe, Produktion, CRM, Kasse, Artikelmanager, Mobile) → 335 Artikel.

### Floating Chat-Widget

Kleines Chat-Icon unten rechts (nur für Staff):
- Schneller KI-Zugriff ohne Seitenwechsel
- Nicht sichtbar auf öffentlichen Seiten (/health, /login)

---

## 9. User-Portal (Benutzer)

Endnutzer gelangen nach dem Login direkt zum Portal unter `/portal`.

### Übersicht (Header-Kacheln)

| Kachel | Inhalt |
|---|---|
| **Anfragen** | Anzahl aller eigenen Tickets |
| **Aktiv** | Offene / in Bearbeitung befindliche Tickets |
| **Geräte** | Zugewiesene Unternehmensgeräte |
| **FIDO-Keys** | Eigene Sicherheitsschlüssel |

### Schnellzugriff

- **Neue Anfrage stellen** – Öffnet Ticket-Erstellungsassistent
- **KI-Hilfe** – Öffnet KI-Chat-Tab direkt im Portal

### Tab-Navigation

**Anfragen-Tab:**
- Alle eigenen Tickets mit Status und Datum
- Filter: Aktiv / Alle
- Klick auf Anfrage öffnet die Detail-Seite

**Geräte-Tab:**
- Zugewiesene Assets/Geräte

**FIDO-Keys-Tab:**
- Eigene Sicherheitsschlüssel einsehen

**KI-Hilfe-Tab:**
- Direkter KI-Chat integriert im Portal

**Einstellungen-Tab:**
- E-Mail-Benachrichtigungen aktivieren/deaktivieren (globaler Toggle)
- Bei aktivierten Benachrichtigungen erhält der Nutzer E-Mails bei: Ticket-Bestätigung, neuen Kommentaren, Statusänderungen und Zufriedenheits-Umfragen

> **Hinweis:** Staff-Benutzer (admin, support, bearbeiter) verwalten ihre Benachrichtigungen unter **Mein Konto** (Hover auf Benutzername → Mein Konto).

### Ticket-Assistent (Wizard)

Der Assistent führt Nutzer durch häufige Probleme:

1. **Thema wählen**: Passwort, E-Mail, VPN, Drucker, Software, Hardware, Netzwerk, Sonstiges
2. **Geführte Fragen**: Konkrete Fragen zum gewählten Thema (z.B. „Welche Fehlermeldung erscheint?")
3. **Ticket wird automatisch ausgefüllt** und kann vor dem Absenden noch bearbeitet werden

Bei Auswahl „Defektes Gerät" wird direkt ein Foto-Upload-Formular angeboten.

---

## 10. E-Mail-Integration

### Eingehende E-Mails → Tickets

Das System überwacht ein E-Mail-Postfach alle 30 Sekunden und erstellt aus eingehenden Mails automatisch Tickets:

- **Betreff** → Ticket-Titel
- **Absender** → Anfragender
- **Nachrichtentext** → Beschreibung
- **Anhänge** → werden gespeichert und verknüpft

Antwortet ein Nutzer später per E-Mail auf eine Ticket-Benachrichtigung, wird die Antwort automatisch als Kommentar hinzugefügt.

**Bounce-Schutz:** Automatische Antworten und Bounce-Mails werden erkannt und ignoriert.

### Ausgehende Benachrichtigungen

Das System sendet automatisch E-Mails bei:

| Ereignis | Empfänger |
|---|---|
| Ticket erstellt | Anfragender (Bestätigung mit TK-Nummer) |
| Ticket erstellt | Staff mit aktiviertem „Neues Ticket"-Toggle |
| Ticket zugewiesen | Zugewiesener Mitarbeiter (wenn Toggle aktiv) |
| Öffentlicher Kommentar von Support | Anfragender |
| Antwort des Anfragenden | Zugewiesener Staff (wenn Toggle aktiv) |
| Ticket geschlossen | Anfragender |
| Ticket eskaliert (SLA überschritten) | Admin-Team |

### Wöchentlicher Bericht

Jeden Montag um 08:00 Uhr wird ein Wochen-Zusammenfassungsbericht an Staff-Mitglieder mit aktiviertem Wochenbericht-Toggle versendet.

---

## 11. Benachrichtigungen

### Browser-Benachrichtigungen (Staff)

Das System überprüft alle 15 Sekunden auf neue Tickets und Aktivitäten:
- **Glocken-Icon** in der Topbar zeigt Anzahl neuer Ereignisse (roter Badge)
- Klick öffnet Benachrichtigungs-Dropdown
- Browser-Benachrichtigungen (falls Berechtigung erteilt)

Benachrichtigungen erscheinen bei:
- Neuen Tickets
- Status-Änderungen
- Neuen Kommentaren

### E-Mail-Benachrichtigungen (Staff – Mein Konto)

Staff-Benutzer können ihre E-Mail-Benachrichtigungen granular steuern unter **Mein Konto** (Hover auf Benutzername oben rechts → 👤 Mein Konto):

| Benachrichtigung | Standard | Beschreibung |
|---|---|---|
| Neues Ticket eingegangen | Aus | Wenn ein neues Ticket erstellt wird |
| Ticket zugewiesen | Ein | Wenn dir ein Ticket zugewiesen wird |
| Neue Antwort auf Ticket | Ein | Wenn ein Mitarbeiter auf ein zugewiesenes Ticket antwortet |
| Wöchentlicher Report | Ein | Montags: Zusammenfassung offener/geschlossener Tickets |

---

## 12. Admin-Einstellungen

Erreichbar über: **⚙️ (Zahnrad) → System → Einstellungen**
Zugang: nur `super_admin` und `admin`

### Tab: Kategorien

Ticket-Kategorien verwalten:

| Aktion | Beschreibung |
|---|---|
| **+ Kategorie hinzufügen** | Name + Emoji-Icon festlegen |
| **Bearbeiten** | Name oder Icon ändern |
| **Löschen** | Kategorie entfernen (bestehende Tickets behalten die Kategorie als Text) |

**Standard-Kategorien:** Allgemein, Software, Hardware, Netzwerk, SelectLine

### Tab: Vorlagen

Ticket-Vorlagen für häufige Anfragen verwalten:

| Feld | Beschreibung |
|---|---|
| **Anzeige-Name** | Text im Dropdown „Vorlage wählen" |
| **Ticket-Titel** | Wird als Titel vorausgefüllt |
| **Beschreibung** | Vorlagentext mit Lücken für den Nutzer |
| **Kategorie** | Automatisch zugewiesene Kategorie |
| **Priorität** | Standard-Priorität für diesen Typ |

---

## 13. Weitere Module

### System-Übersicht (`/system`)

Hub für Admin-Funktionen:
- **Server Health**: Echtzeit-Status aller Services (API, Datenbank, Antwortzeit)
- **Wartungskalender**: Überfällige Asset-Prüfungen
- **Einstellungen**: Kategorien & Vorlagen
- **API Dokumentation**: Alle 78 API-Endpunkte mit Beschreibung und Beispielen

### Asset-Verwaltung (`/assets`)

Die Asset-Verwaltung deckt Hardware-Inventar für IT und Produktion ab. Admins und Bearbeiter sehen alle Assets; die Rolle `techniker` sieht und verwaltet nur Produktions-/Techniker-Assets über einen vereinfachten Wizard.

#### Asset-Typen

| Bereich | Typen |
|---|---|
| **IT** | Notebook, Monitor, Headset, Other |
| **Produktion / Techniker** | Maschine ⚙️, Werkzeug 🔧, Sonstiges 📦 |

#### Abteilungen (Bereich)

Assets werden einem Bereich zugeordnet: **IT**, **Produktion** oder **Techniker**.

#### Asset anlegen – IT-Rolle

Standardformular mit: Typ, Name, Bereich, Seriennummer (Pflicht), Modell, Status, Kaufdatum, Beschreibung, TeamViewer-ID sowie Wartungsdaten.

#### Asset anlegen – Techniker/Produktion-Rolle (Wizard)

Für die Rolle `techniker` öffnet sich ein 3-stufiger Wizard statt des Standardformulars:

| Schritt | Inhalt |
|---|---|
| **1. Vorlage** | Vorlage wählen: Maschine ⚙️, Werkzeug 🔧, Sonstiges 📦 |
| **2. Details** | Typ, Name*, Bereich (Produktion/Techniker), Modell, Seriennummer (optional – wird automatisch vergeben wenn leer), Status, Kaufdatum, Beschreibung |
| **3. Wartung** | Letzte Wartung, Nächste Prüfung (auto-berechnet), Intervall (Monate), Wartungsnotizen |

> **Seriennummer:** Wenn leer, wird automatisch eine eindeutige Seriennummer im Format `AUTO-{Timestamp}-{Zufallszahl}` vergeben.

> **Bearbeitung:** Beim Bearbeiten eines bestehenden Assets startet der Wizard direkt bei Schritt 2 (Vorlage-Schritt wird übersprungen).

#### Automatische Berechnung der nächsten Prüfung

Sobald **Letzte Wartung** und **Intervall (Monate)** gesetzt sind, berechnet das System automatisch das nächste Fälligkeitsdatum:

```
Nächste Prüfung = Letzte Wartung + Intervall (Monate)
```

Die Berechnung erfolgt sowohl im Wizard (clientseitig) als auch im Backend (serverseitig) als Fallback.

#### Wartungs-E-Mail-Benachrichtigung

Das System sendet täglich um **08:00 Uhr** eine E-Mail-Benachrichtigung an alle aktiven Benutzer mit der Rolle `techniker`, wenn für Assets (Bereich: Produktion oder Techniker) die nächste Prüfung **heute fällig** ist.

Die E-Mail enthält eine Liste aller fälligen Assets mit Name, Typ und Seriennummer.

#### Prüfprotokoll

Jedes Asset verfügt über ein Prüfprotokoll (erreichbar über das **⋮ Menü → 🔍 Prüfprotokoll**):

- **Prüfungshistorie**: Alle vergangenen Prüfungen chronologisch sortiert (neueste zuerst)
- **Farbcodierung**: Grüner Rand = bestanden, roter Rand = nicht bestanden
- **Neue Prüfung erfassen** (Toggle-Formular):

| Feld | Beschreibung |
|---|---|
| **Prüfdatum** | Datum der Prüfung (Standard: heute) |
| **Ergebnis** | Bestanden / Nicht bestanden |
| **Nächste Fälligkeit** | Optionales Datum der nächsten Prüfung (überschreibt Asset-Feld) |
| **Notizen** | Prüfer, Befunde, VDE-/UVV-Prüfung etc. |

Nach dem Speichern einer Prüfung wird das Feld `next_maintenance_date` des Assets automatisch aktualisiert, sofern eine nächste Fälligkeit angegeben wurde.

#### Aktionen-Menü (⋮)

Alle Aktionen pro Asset sind in einem **⋮ Dropdown-Menü** zusammengefasst:

| Aktion | Symbol | Beschreibung |
|---|---|---|
| Asset bearbeiten | ✏️ | Bearbeitungsformular/-Wizard öffnen |
| Übergabeprotokoll | 📋 | Übergabe-PDF generieren und herunterladen |
| Asset-Label | 🏷️ | Label/Aufkleber-PDF generieren |
| Prüfprotokoll | 🔍 | Prüfhistorie und neue Prüfung erfassen |
| Asset zuweisen | 👤 | Asset einem Mitarbeiter zuweisen |
| Asset freigeben | ↩️ | Zuweisung aufheben |
| Asset löschen | 🗑️ | Asset unwiderruflich löschen |

#### Typ-Filter (rollenbasiert)

Der Typ-Filter in der Asset-Tabelle zeigt nur die für die jeweilige Rolle relevanten Typen:
- **Techniker-Rolle**: nur Maschine, Werkzeug, Sonstiges
- **Alle anderen Rollen**: alle Typen (Notebook, Monitor, Headset, Other, Maschine, Werkzeug, Sonstiges)

#### Anlagevermögen-Felder (optional, pro Asset)

Jedes Asset kann mit buchhalterischen Feldern ergänzt werden:

| Feld | Beschreibung |
|---|---|
| **Inventarnummer** | Eindeutige Kennnummer im Format `ANL-0001`; wird beim Anlegen automatisch vergeben (überschreibbar) |
| **Anschaffungswert (€)** | Kaufpreis des Assets |
| **Nutzungsdauer (Jahre)** | Planmäßige Nutzungsdauer für die AfA-Berechnung |
| **Restwert (€)** | Erwarteter Restwert nach Ablauf der Nutzungsdauer (Standard: 0) |

Diese Felder erscheinen im AssetModal unter dem ausklappbaren Abschnitt **„Anlagevermögen (optional)"** sowie in Schritt 3 des Produktion-Wizards. Nur Rollen mit Schreibrecht auf Assets (super_admin, admin, bearbeiter) können diese Felder bearbeiten.

#### Weitere Funktionen

- Zuweisung an Mitarbeiter mit Übergabeprotokoll-PDF
- Asset-Label/Aufkleber-PDF (QR-Code + Details)
- CSV-Export aller Assets
- Intune-Import (Azure/Microsoft Endpoint Manager)
- Verlaufshistorie der Zuweisungen pro Asset

---

### Anlagevermögen (`/anlagevermoegen`)

Buchhalterische Übersicht aller Assets mit eingetragenem Kaufpreis. Zugänglich für `super_admin`, `admin` und `buchhaltung`.

#### AfA-Berechnung (lineare Abschreibung)

```
AfA/Jahr         = (Anschaffungswert − Restwert) ÷ Nutzungsdauer
Buchwert heute   = MAX(Restwert, Anschaffungswert − AfA/Jahr × vergangene Jahre)
Abgeschrieben am = Kaufdatum + Nutzungsdauer Jahre
```

Die Berechnung erfolgt ausschließlich im Frontend (keine neuen Backend-Endpunkte).

#### Übersichts-Kacheln

| Kachel | Inhalt |
|---|---|
| **Gesamtanschaffungswert** | Summe aller Kaufpreise |
| **Buchwert heute** | Summe der aktuellen Buchwerte |
| **Kumulierte AfA** | Summe der bereits abgeschriebenen Beträge |

#### Tabellenspalten

Inv.-Nr. · Name · Typ · Bereich · Kaufdatum · Anschaffungswert · Nutzungsdauer · AfA/Jahr · Buchwert heute · Abgeschrieben am · Status (Aktiv / Abgeschrieben)

#### CSV-Export

- Dateiname: `anlagevermoegen_YYYY-MM-DD.csv`
- Encoding: UTF-8 mit BOM (für korrekte Excel-Öffnung)
- Separator: `;`
- Dezimaltrennzeichen: `,` (deutsche Notation)
- Enthält alle sichtbaren Tabellenfelder inkl. Inventarnummer

#### Inventarnummer-Automatik

Beim Erstellen eines neuen Assets wird automatisch die nächste freie Nummer vergeben:

```
ANL-0001, ANL-0002, ANL-0003, …
```

Die Nummer kann im Modal manuell überschrieben werden. Beim Aktualisieren eines bestehenden Assets bleibt die vorhandene Nummer erhalten.

### FIDO-Keys (`/fido-keys`)

- Sicherheitsschlüssel verwalten (Yubikey, etc.)
- Zuweisung an Benutzer
- Status: aktiv / inaktiv

### Lifecycle (`/lifecycle`)

Onboarding, Offboarding und Prozess-Konfiguration in einer Seite mit drei Tabs:

| Tab | Inhalt |
|---|---|
| 🟢 Onboarding | Liste aller Onboarding-Protokolle |
| 🔴 Offboarding | Liste aller Offboarding-Protokolle |
| ⚙️ Prozesse | Konfigurierbares Checklisten-System |

#### Onboarding-Wizard

Neues Onboarding wird per 2-stufigem Wizard angelegt:

**Schritt 1 – Persönliche Daten:**
- Vor- und Nachname, private E-Mail, Telefon, Adresse
- **Abteilung**: Dropdown aus konfigurierbaren Firmenabteilungen (Wartung, TBO/Service, Vertrieb AD, Vertrieb ID, KAW, IT, Verwaltung, Produktion – verwaltbar im Tab ⚙️ Prozesse)
- Position, Startdatum, Arbeitsort (Büro / Homeoffice / Hybrid)
- Stundenmodell (Vollzeit 40h/38h, Teilzeit 30h/20h, Minijob)
- Urlaubsmodell (25–30 Tage oder gesetzlich)
- Interne Notizen

**Schritt 2 – Abteilungen & Vorgesetzter:**
- Vorgesetzter (VG): Namenssuche in Microsoft Entra (Azure AD) – Name eingeben, „Suchen", aus Trefferliste wählen; alternativ aus IT-Nexus-Systembenutzern wählbar

#### Konfigurierbares Checklisten-System (Tab ⚙️ Prozesse)

Jede Firmenabteilung hat eine eigene Checkliste, die von den zuständigen Rollen gepflegt wird:

**Struktur:**
- **Links (Sidebar)**: Firmenabteilungen (wo der MA eingesetzt wird)
- **Rechts**: Aufgaben der gewählten Abteilung, gruppiert nach zuständigem Team

**Zuständige Teams:**

| Team | Icon | Bearbeitet von Rolle |
|---|---|---|
| IT | 💻 | `support` |
| HR / Personal | 🧑‍💼 | `hr_personal` |
| Buchhaltung | 💶 | `buchhaltung` |

- Jede Rolle sieht und bearbeitet **nur die Aufgaben ihres Teams**
- `admin` / `super_admin` sehen alle Teams mit Team-Filter
- Abteilungen können nur von Admins hinzugefügt/bearbeitet/gelöscht werden
- Aufgaben per Drag & Drop umsortierbar
- Jede Aufgabe hat Priorität (Standard / Wichtig / Kritisch) und gilt für Onboarding, Offboarding oder beides

**Standard-Aufgaben (je Abteilung, werden beim ersten Start automatisch angelegt):**

*IT (Onboarding):* AD-Account, E-Mail, Hardware beschaffen & aufsetzen, Software, Telefon, Hardware-Übergabe, Ersten Login begleiten

*IT (Offboarding):* Konten deaktivieren, Zugriffsrechte entziehen, Hardware zurücknehmen, E-Mail-Weiterleitung

*HR (Onboarding):* Personalakte, Abteilungen informieren, Willkommens-E-Mail, Formulare, Pflichtunterweisungen, Empfang, Formulare unterzeichnen

*HR (Offboarding):* Abschlussgespräch, Arbeitszeugnis, Personalakte abschließen, SV abmelden

*Buchhaltung (Onboarding):* DATEV anlegen, Bankdaten & Steuerklasse, Lohnkonto, SV anmelden, Gehaltsabrechnung vorbereiten

*Buchhaltung (Offboarding):* Letzte Gehaltsabrechnung, DATEV-Austritt, Offene Spesen

#### Rollensichtbarkeit in der Checkliste

| Rolle | Kann abhaken |
|---|---|
| `hr_personal` | HR / Personal-Aufgaben |
| `support` | IT-Aufgaben |
| `buchhaltung` | Buchhaltungs-Aufgaben |
| `admin` / `super_admin` | Alle Aufgaben |

Aufgaben anderer Teams werden ausgegraut angezeigt (nicht editierbar).

#### Bestätigungs-E-Mail (Onboarding)

Nach Abschluss des Onboardings kann dem Mitarbeiter eine Bestätigungs-E-Mail mit einem personalisierten Link gesendet werden:

1. Onboarding-Protokoll öffnen → **📧 Protokoll zusenden**
2. Mitarbeiter erhält E-Mail mit „✅ Übergabe bestätigen"-Button
3. Klick auf den Link setzt das Protokoll auf **Abgeschlossen** und speichert den Bestätigungszeitpunkt
4. Status wird in der Tabelle und im Protokoll angezeigt (✅ Bestätigt [Datum] oder ⏳ Ausstehend)
5. E-Mail kann beliebig oft neu gesendet werden (jeder neue Link ersetzt den vorherigen)

> **Voraussetzung:** Private E-Mail-Adresse des Mitarbeiters muss im Protokoll hinterlegt sein.

#### Prozess-Kopierfunktion

Im Tab **⚙️ Prozesse** können alle Aufgaben eines Teams aus einer Abteilung in eine andere kopiert werden:

1. Quell-Abteilung in der Sidebar wählen
2. **📋 Kopieren** im Header der gewünschten Team-Gruppe klicken (IT / HR / BK getrennt)
3. Ziel-Abteilung in der Sidebar wählen
4. **📋 X Einfügen** in der Toolbar klicken → alle Aufgaben werden übertragen

#### Weitere Funktionen
- Fortschrittsbalken pro Team und Gesamtfortschritt
- Protokoll-Erstellung und Archivierung
- PDF-Export der Protokolle
- Offboarding mit Hardware-Rückgabe-Protokoll

### IT Übersicht (`/it-overview`)

Strategische Übersicht der wichtigsten IT-Themen für die monatliche JF IT (Jour Fixe mit der Geschäftsführung).

**Zugang:** `admin`, `super_admin` (Bearbeitungsrechte), `support`, `bearbeiter` (Leserechte)

#### Kanban-Board

Die Seite zeigt alle IT-Themen als Kanban-Board, gruppiert nach **Kategorien** (Spalten):

| Kategorie | Icon |
|---|---|
| Infrastruktur | 🖥️ |
| Software | 💾 |
| IT-Governance & Compliance | 🛡️ |
| Mitarbeiterschulung | 📚 |
| Sonstiges | 📋 |

#### Themen-Karten

Jede Karte zeigt:
- **Titel** mit Prioritäts-Icon
- **Status-Badge** (farbig)
- **Verantwortlicher** und **Zieldatum**
- **Quick-Status-Button**: mit einem Klick zum nächsten Status weiterschalten
- Karte anklicken → expandiert Beschreibung und Notizen

#### Status & Priorität

| Status | Farbe |
|---|---|
| Offen | Grau |
| In Planung | Blau |
| In Umsetzung | Gelb |
| Abgeschlossen | Grün |

| Priorität | Icon |
|---|---|
| Niedrig | ↓ |
| Normal | → |
| Hoch | ↑ |
| Kritisch | ⚡ |

#### Thema erstellen / bearbeiten

Das Modal bietet:
- Titel, Kategorie, Status (Chip-Auswahl), Priorität (Chip-Auswahl)
- Zieldatum, Verantwortlicher (Name oder Team)
- Beschreibung (Kontext, Hintergrund)
- Notizen / Stand (aktueller Bearbeitungsstand)

#### Statistik-Leiste

Oben auf der Seite: Gesamt-Anzahl, In Umsetzung, Abgeschlossen, Kritisch — auf einen Blick.

---

### Mein Konto (`/mein-konto`)

Zugänglich für alle eingeloggten Benutzer über **Hover auf den Benutzernamen** oben rechts in der Navbar → **👤 Mein Konto**.

**Inhalt:**
- **Profil**: Initialen-Avatar, vollständiger Name, Benutzername, E-Mail-Adresse, Rolle
- **E-Mail-Benachrichtigungen**: Granulare Einstellungen (Staff) oder globaler Toggle (normale Benutzer)

---

### Benutzerverwaltung (`/users`)

Nur für `admin` und `super_admin` zugänglich.

#### Benutzer anlegen / bearbeiten

- Benutzername, E-Mail, Vor-/Nachname
- Passwort (bei Neuanlage)
- **Rollen-Auswahl**: visueller Karten-Picker mit Icon und Farbe pro Rolle — keine Dropdown-Liste
- Aktiv/Inaktiv-Schalter

#### Azure AD Import

Benutzer können direkt aus einer Azure AD Gruppe importiert werden:
1. „Aus Azure importieren" klicken
2. Gruppe suchen und auswählen
3. Ziel-Rolle per Karten-Picker wählen
4. Bereits vorhandene Benutzer (gleiche E-Mail oder Azure ID) werden übersprungen

### Wissensdatenbank (`/knowledge-base`)

Die Wissensdatenbank speichert dokumentierte Lösungen für häufige IT-Probleme und dient gleichzeitig als Kontext für die KI-Integration.

**Zugriff:** Lesen für alle eingeloggten User · Erstellen/Bearbeiten/Löschen nur für `admin` und `super_admin`

#### Artikelstruktur

| Feld | Beschreibung |
|---|---|
| **Problem** | Kurze Beschreibung des Problems (Titel) |
| **Lösung** | Detaillierte Lösung mit Markdown-Unterstützung (Tabellen, Listen, Bold etc.) |
| **Kategorie** | Software · Hardware · Netzwerk · SelectLine · Allgemein · Sonstiges |
| **Tags** | Kommagetrennte Schlagwörter zur besseren Auffindbarkeit |
| **Bilder** | Bis zu mehrere Bilder pro Artikel (PNG, JPG, GIF, WebP, max. 5 MB) |
| **Quelle** | Manuell erstellt oder automatisch aus Ticket generiert (`auto_generated`) |

#### Import-Funktionen

Artikel können manuell erstellt oder per KI-Import automatisch generiert werden:

| Import-Modus | Beschreibung |
|---|---|
| **Text einfügen** | Beliebigen Text einfügen → KI generiert daraus einen oder mehrere Artikel |
| **Datei hochladen** | PDF, DOCX, EML, TXT (max. 5 MB) → Inhalt wird extrahiert und analysiert |
| **URL importieren** | Einzelne Webseite → HTML wird bereinigt, KI erstellt Artikel |
| **Website crawlen** | BFS-Crawler folgt Links auf gleicher Domain (2–100 Seiten konfigurierbar) |

Der Crawler verarbeitet Texte in 40.000-Zeichen-Chunks und kann so auch große Dokumentationen vollständig importieren. Die KI erstellt pro Chunk mehrere thematisch getrennte Artikel.

#### Aus Tickets generieren

Geschlossene Tickets können direkt als Wissensdatenbank-Artikel gespeichert werden. Die KI analysiert Ticketinhalt und alle öffentlichen Kommentare und entscheidet selbst, ob der Fall dokumentationswürdig ist (`worth_adding`). Generierte Artikel sind als `auto_generated` markiert und enthalten einen Link zum Ursprungsticket.

#### Tab: Geschlossene Tickets

Der Tab **Geschlossene Tickets** zeigt alle per E-Mail oder aus externen Systemen importierten, abgeschlossenen IT-Tickets. Diese sind in der Tickets-Ansicht mit Status `geschlossen` und Quelle `email` gespeichert.

**Venabo-Import:** Geschlossene IT-Tickets aus dem Venabo-Helpdesk-System (Abteilung IT, Abt.-ID 28) wurden per Einmal-Import übertragen. Jedes Ticket enthält:
- Venabo-Ticket-ID als Referenz
- Bearbeiter, Erstelldatum, Abschlussdatum
- Direktlink zum Original-Ticket in Venabo
- Automatische Kategorie-Zuordnung (Software / Hardware / Allgemein) basierend auf dem Ticket-Typ

Monitoring-Alerts (Netgo/Synology/Probe Health Check) werden beim Import automatisch herausgefiltert.

#### KI-Integration

Die Wissensdatenbank ist tief in die KI eingebunden:

- **Ticket-Analyse:** Neue Tickets werden automatisch klassifiziert (Kategorie, Priorität, Lösungsvorschlag) auf Basis der KB-Einträge
- **Chat-Kontext:** Der KI-Chat lädt die letzten 30 KB-Artikel als Hintergrundwissen
- **Lösungsvorschläge:** Im Ticket-Detail schlägt die KI Antworten basierend auf ähnlichen KB-Einträgen vor

#### API-Endpunkte

| Methode | Endpoint | Beschreibung |
|---|---|---|
| `GET` | `/api/ai/knowledge-base` | Alle Artikel abrufen |
| `POST` | `/api/ai/knowledge-base` | Artikel manuell erstellen |
| `PUT` | `/api/ai/knowledge-base/:id` | Artikel bearbeiten |
| `DELETE` | `/api/ai/knowledge-base/:id` | Artikel löschen |
| `POST` | `/api/ai/knowledge-base/import-text` | Text oder Datei importieren |
| `POST` | `/api/ai/knowledge-base/import-url` | URL importieren |
| `POST` | `/api/ai/knowledge-base/import-crawl` | Website crawlen (Timeout: 5 Min) |
| `POST` | `/api/ai/knowledge-base/:id/images` | Bild zu Artikel hochladen |
| `DELETE` | `/api/ai/knowledge-base/:id/images/:filename` | Bild löschen |

### Defect-Report (`/defect`)

Öffentlich zugängliche Seite (kein Login erforderlich):
- Für externe Meldungen (z.B. von Kunden)
- Generiert intern ein Ticket

### Health-Seite (`/health`)

Öffentlich zugängliche Status-Seite ohne Login:
- API-Status
- Datenbank-Status
- Authentifizierungs-Status
- Antwortzeit

---

## 14. IT Nexus Scanner App (Android)

Die **IT Nexus Scanner App** ist eine native Android-App (Flutter) als Ergänzung zur Web-Oberfläche. Sie ermöglicht das mobile Verwalten und Erfassen von Assets direkt vor Ort — ohne PC.

---

### 14.1 Installation

**Voraussetzungen:**
- Android-Gerät (Android 8.0+)
- USB-Debugging aktiviert (bei erstmaliger Installation via ADB)
- WLAN-Verbindung zum IT-Nexus-Server

**APK-Datei:**
Die aktuelle APK wird vom IT-Administrator bereitgestellt und per ADB oder direkt installiert:
```
adb install -r app-debug.apk
```

> Tipp: „USB-Installieren" muss in den Entwickleroptionen aktiviert sein.

---

### 14.2 Erster Start & Login

Nach dem Start erscheint der **Login-Screen**:

1. **Benutzername** und **Passwort** eingeben (gleiche Zugangsdaten wie im Web)
2. Alternativ: **„Mit Microsoft anmelden"** (Azure AD / Single Sign-On)
3. Beim ersten Start muss die **Server-URL** einmalig eingestellt werden:
   - Oben rechts auf das **⚙️ Einstellungen-Symbol** tippen
   - Server-URL eintragen: `https://it-nexus.cereda-systems.de/api`
   - Speichern → zurück zum Login

> Die Server-URL wird lokal gespeichert und muss nur einmal eingetragen werden.

---

### 14.3 Navigation

Die App hat eine **Bottom-Navigation** mit 4 Bereichen:

| Tab | Symbol | Beschreibung |
|---|---|---|
| **Dashboard** | 🏠 | Übersicht: Asset- und Ticket-Statistiken |
| **Scanner** | 📷 | Barcode/QR-Code scannen → Asset direkt aufrufen |
| **Tickets** | 🎫 | Offene Tickets anzeigen und erstellen |
| **Einstellungen** | ⚙️ | Server-URL, Abmelden |

Zentral in der Navigation befindet sich der **+ FAB-Button** (Teal) → öffnet den Screen zum **neuen Asset erfassen**.

---

### 14.4 Asset scannen

1. Tab **Scanner** öffnen
2. Kamera auf den **Barcode oder QR-Code** des Assets richten
3. Bei Erkennung: App öffnet automatisch die **Asset-Detail-Ansicht**

**Was im Asset-Detail möglich ist:**

| Aktion | Beschreibung |
|---|---|
| **Einbuchen** | Status auf „Verfügbar" setzen |
| **Zuweisen** | Asset einem Benutzer zuweisen |
| **Archivieren** | Status auf „Inaktiv" setzen |
| **Bearbeiten** | Name, Modell, TeamViewer-ID etc. ändern |
| **Verlauf** | Scan- und Aktionshistorie anzeigen |
| **Label drucken** | QR-Label für das Asset generieren |

---

### 14.5 Neues Asset erfassen

Über den **+ Button** in der Navigation:

1. **Name** eingeben (Pflichtfeld, z.B. `TBO-NB-10`)
2. **Seriennummer** — entweder manuell eingeben oder über den **📷 Scan-Button** per Kamera einscannen
3. **Modell** optional eintragen
4. **Typ** wählen:
   - IT-Rollen: Notebook, Monitor, Headset, Other, Maschine, Werkzeug, Sonstiges
   - Produktion: Maschine, Werkzeug, Sonstiges
5. **Bereich** wählen (IT, Produktion, Techniker, ...)
6. **Status** setzen (Verfügbar, Zugewiesen, Inaktiv, Beschädigt)
7. Optional: TeamViewer-ID, Beschreibung
8. **„Asset anlegen"** tippen → Asset wird direkt in IT Nexus gespeichert

> Die Inventarnummer (`ANL-XXXX`) wird automatisch vergeben.

---

### 14.6 Tickets

Im Tab **Tickets**:
- Liste aller offenen Tickets anzeigen
- Ticket-Details aufrufen
- Neues Ticket erstellen (z.B. direkt nach Asset-Scan ein Problem melden)

---

### 14.7 Rollenbasierte Ansicht

Die App passt sich automatisch der **Benutzerrolle** an:

| Rolle | Sichtbare Typen | Sichtbare Bereiche |
|---|---|---|
| `super_admin`, `admin`, `bearbeiter` | Alle Typen | Alle Bereiche |
| `produktion` | Maschine, Werkzeug, Sonstiges | Produktion, Techniker |
| `support` | Alle Typen (nur lesen) | Alle Bereiche |

---

### 14.8 Technische Details

| Eigenschaft | Wert |
|---|---|
| **Framework** | Flutter 3.x (Dart) |
| **Plattform** | Android 8.0+ (API 26+) |
| **Scanner-Bibliothek** | `mobile_scanner` v6 |
| **Authentifizierung** | JWT + Microsoft OAuth (Azure AD) |
| **API-Verbindung** | REST API zu IT Nexus Backend (`/api/...`) |
| **Datenspeicherung** | Keine lokale DB — alle Daten live vom Server |
| **Offline-Modus** | Nicht verfügbar (WLAN erforderlich) |

---

## 15. Rollen-Berechtigungsmatrix

| Funktion | benutzer | techniker | bearbeiter | support | hr_personal | buchhaltung | admin | super_admin |
|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
| User-Portal sehen | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Eigene Tickets erstellen | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Alle Tickets sehen | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
| Tickets bearbeiten/schließen | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ |
| Tickets löschen | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| Interne Notizen sehen | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
| KI-Assistent Chat | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
| Dashboard sehen | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
| Assets (IT) verwalten | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
| Assets (Produktion/Techniker) anlegen | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
| Prüfprotokoll erfassen | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
| FIDO-Keys verwalten | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
| Benutzer verwalten | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| Onboarding anlegen/löschen | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| Onboarding-Checkliste (HR) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ✅ |
| Onboarding-Checkliste (IT) | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ |
| Onboarding-Checkliste (BK) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ |
| Einstellungen (Kategorien) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| System-Seite | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| Anlagevermögen ansehen | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ |
| Lizenzen verwalten | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
| Wartung verwalten | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
| ISO-Zertifizierung | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| Risikoanalyse | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| Entra ID Rechte | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| Agent Monitoring sehen | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| Patch Management | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| Ankündigungen verwalten | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |

---

## 16. ISO 27001 Zertifizierungsplanung

Die ISO-Seite (`/iso`) dient zur strukturierten Verfolgung aller Aufgaben auf dem Weg zur ISO 27001 Zertifizierung.

**Nur für `admin` und `super_admin` zugänglich.**

### Kategorien

| Kategorie | Beschreibung |
|---|---|
| **Risikomanagement** | Asset-Inventarisierung, Risikoanalyse, Maßnahmenplan |
| **TOM (Technische & Organisatorische Maßnahmen)** | Zugriffskonzept, Patchmanagement, Backup, Monitoring |
| **Incident Management** | Incident-Response-Plan, Meldeprozesse, Übungen |
| **Business Continuity** | Kritische Prozesse, Wiederanlaufplan |
| **Dokumentation** | Sicherheitsrichtlinie, Nachweisführung |
| **Awareness & Schulung** | Mitarbeiterschulungen, Onboarding-Integration |

### Status-System

Jede Aufgabe hat einen von drei Status:

| Status | Beschreibung |
|---|---|
| **Offen** | Noch nicht begonnen |
| **In Bearbeitung** | Teilweise umgesetzt oder laufend |
| **Abgeschlossen** | Vollständig umgesetzt und nachgewiesen |

### Funktionen

- **Fortschrittsbalken** pro Kategorie (Anteil Abgeschlossen)
- **Gesamtfortschritt** oben auf der Seite
- **Status direkt ändern** per Klick auf den Status-Button
- **Notizen und Verantwortliche** pro Aufgabe hinterlegen
- **Neue Aufgaben** hinzufügen (admin)
- **Aufgaben bearbeiten/löschen** (admin)

### Aktueller Stand (März 2026)

| Aufgabe | Status |
|---|---|
| IT-Assets erfassen | ✅ Abgeschlossen |
| Zugriffskonzept erstellen | ✅ Abgeschlossen |
| Risikoanalyse durchführen | 🔄 In Bearbeitung |
| Maßnahmenplan ableiten | 🔄 In Bearbeitung |
| Monitoring einführen | ✅ Abgeschlossen |
| Incident-Response-Plan erstellen | 🔄 In Bearbeitung |
| Nachweisführung etablieren | 🔄 In Bearbeitung |
| Onboarding-Prozess erweitern | 🔄 In Bearbeitung |
| Alle übrigen Aufgaben | ⬜ Offen |

---

## 17. Risikoanalyse

Die Risikoanalyse-Seite (`/risk`) ermöglicht die strukturierte Erfassung, Bewertung und Verfolgung von IT-Risiken.

**Nur für `admin` und `super_admin` zugänglich.**

### Risikobewertung

Jedes Risiko wird anhand einer **5×5 Risikomatrix** bewertet:

- **Wahrscheinlichkeit** (1–5): Wie wahrscheinlich ist das Eintreten?
- **Auswirkung** (1–5): Wie schwerwiegend wäre der Schaden?
- **Score** = Wahrscheinlichkeit × Auswirkung (1–25)

| Score | Stufe | Farbe |
|---|---|---|
| 20–25 | Kritisch | 🔴 Rot |
| 12–19 | Hoch | 🟠 Orange |
| 6–11 | Mittel | 🟡 Gelb |
| 1–5 | Niedrig | 🟢 Grün |

### Status

| Status | Bedeutung |
|---|---|
| **Offen** | Risiko erkannt, keine Maßnahme |
| **In Bearbeitung** | Maßnahmen werden umgesetzt |
| **Akzeptiert** | Risiko bewusst akzeptiert |
| **Behoben** | Risiko erfolgreich mitigiert |

### M365 Auto-Sync

Über den Button **„M365 Sync"** werden automatisch Risiken aus Microsoft 365 erfasst:

| Quelle | Beschreibung | Benötigte Azure-Berechtigung |
|---|---|---|
| **Secure Score** | Microsoft Secure Score als Sicherheitsrisiko | `SecurityEvents.Read.All` |
| **Defender Alerts** | Aktive Sicherheitswarnungen aus Microsoft Defender | `SecurityAlert.Read.All` |
| **Intune Non-Compliant** | Geräte die Compliance-Richtlinien verletzen | `DeviceManagementManagedDevices.Read.All` |
| **MFA-Status** | Benutzer ohne Multi-Faktor-Authentifizierung | `AuditLog.Read.All` |
| **Risky Users** | Risikobenutzer aus Identity Protection (P2) | `IdentityRiskEvent.Read.All` |

### Detail-Ansichten

Automatisch erfasste Risiken haben erweiterte Detail-Ansichten:
- **MFA-Risiko**: Tabelle aller Benutzer ohne MFA mit E-Mail
- **Intune-Risiko**: Gerätekarten mit Name, Benutzer, OS, Seriennummer
- **Defender-Alert**: Schweregrad, Status, betroffene Entitäten, Link ins Defender-Portal

### Manuelle Risiken

Admins können jederzeit manuelle Risiken hinzufügen und pflegen (Kategorie, Wahrscheinlichkeit, Auswirkung, Verantwortlicher, Maßnahmen, Fälligkeit).

---

## 18. Entra ID Rechteverwaltung

Die Entra-Seite (`/entra`) bietet eine Übersicht und Verwaltung von Benutzerrechten direkt aus Microsoft Entra ID (Azure Active Directory).

**Nur für `admin` und `super_admin` zugänglich.**

### Voraussetzungen (Azure App Registration)

Folgende API-Permissions müssen in der Azure App Registration konfiguriert sein (Application-Permissions, mit Admin Consent):

| Permission | Zweck |
|---|---|
| `User.Read.All` | Benutzer-Liste laden |
| `AuditLog.Read.All` | MFA-Status aller Benutzer |
| `Group.Read.All` | Gruppen-Liste laden |
| `GroupMember.Read.All` | Gruppen-Mitgliedschaften pro Benutzer |
| `RoleManagement.Read.Directory` | Admin-Rollen anzeigen |
| `GroupMember.ReadWrite.All` | *(Optional)* Gruppen-Mitglieder hinzufügen/entfernen |

### Tab: Benutzer

- Alle Entra-Benutzer mit Name, E-Mail, Stelle, Abteilung
- Status-Badge: **Aktiv** / **Deaktiviert**
- MFA-Badge: **Kein MFA** (gelb) wenn nicht registriert
- Suchfilter nach Name, E-Mail, Abteilung
- Filter nach MFA-Status
- **Detail-Panel** (rechts aufklappbar):
  - Alle Gruppen des Benutzers
  - Gruppe hinzufügen / entfernen (benötigt `GroupMember.ReadWrite.All`)
  - MFA-Methoden anzeigen
  - Link zum Entra-Portal

### Tab: Gruppen

- Alle Sicherheitsgruppen und M365-Gruppen
- Mitglieder per Klick lazy-laden
- Gruppentyp (Security / M365)

### Tab: Admin-Rollen

- Alle aktivierten Directory-Rollen
- Belegte Rollen mit Mitgliederliste oben
- Risikostufe pro Rolle (Kritisch: Global Admin / Privileged Role Admin, Hoch: Security Admin / Intune Admin, etc.)

### Statistik-Kacheln

- Benutzer gesamt
- Anzahl Gruppen
- Anzahl Admin-Rollenzuweisungen
- Benutzer ohne MFA
- MFA-Abdeckung in Prozent

---

## 19. Agent Monitoring

Das Agent Monitoring (`/monitoring`) ermöglicht die Echtzeit-Überwachung aller verwalteten Windows-Geräte über den IT Nexus Windows Agent.

**Nur für `super_admin` und `admin` zugänglich.**

### Architektur

| Komponente | Beschreibung |
|---|---|
| **Agent** | C# .NET 8 Windows Service (`IT-Nexus-Agent.exe`) – Version 2.0.0 |
| **Service** | Läuft unsichtbar als Windows Service „IT Nexus Agent" (SYSTEM-Konto) |
| **Check-in** | Alle 1 Minute via `POST /api/monitoring/checkin` |
| **Backend** | Kein JWT – nur `X-Agent-Key` Header |
| **Datenbank** | Tabelle `monitoring_agents` in SQLite |
| **Frontend** | `/monitoring` – Live-Übersicht mit Card- und Tabellenansicht |

### Gesammelte Metriken

| Metrik | Beschreibung |
|---|---|
| Hostname, IP, MAC | Geräteidentifikation |
| OS Name + Version | Windows-Version (inkl. Windows 11-Erkennung via Build-Nummer) |
| CPU-Modell, Kerne, Auslastung % | Prozessor-Info |
| RAM gesamt / belegt (GB) | Arbeitsspeicher |
| Disk C: gesamt / frei (GB) | Festplattenplatz |
| Letzter Benutzer | Zuletzt angemeldeter Nutzer |
| Uptime (Stunden) | Zeit seit letztem Neustart |
| Domain | Active Directory / WORKGROUP |
| Installierte Software | Apps aus Registry |
| Windows Updates ausstehend | Anzahl fehlender Updates (inkl. Treiber) |
| **BitLocker Status** | Verschlüsselungsstatus des Laufwerks C: (encrypted / off / unknown) |
| **Defender Status** | Aktiv/Inaktiv + Signaturalter in Tagen |
| **Hardware-Seriennummer** | BIOS-Seriennummer für Asset-Management |
| TPM, Secure Boot | Sicherheits-Hardware-Status |
| Agent Version | Installierte Agent-Version |

### Warnungen

| Schwellwert | Typ |
|---|---|
| CPU > 90% oder Disk < 5 GB frei | 🔴 Kritisch |
| CPU > 80%, Disk < 15 GB, RAM > 90%, Updates > 10 | 🟡 Warnung |
| BitLocker deaktiviert | 🟡 Warnung |
| Defender inaktiv oder Signaturen > 7 Tage alt | 🟡 Warnung |
| Kein Checkin seit 10 Minuten | Offline |

### Tab: Probleme

Der Tab **Probleme** listet alle Agents mit aktivem Warn- oder Kritisch-Status. Agents, die seit mehr als **7 Tagen** keinen Checkin gemeldet haben, werden in einem ausklappbaren Bereich **„Langfristig offline"** separat angezeigt und zählen nicht zum Badge des Tabs. So bleiben kurzfristige Ausfälle sofort sichtbar, ohne dass dauerhaft abgemeldete Geräte stören.

### API

| Methode | Endpoint | Auth | Beschreibung |
|---|---|---|---|
| `POST` | `/api/monitoring/checkin` | `X-Agent-Key` Header | Agent meldet sich an |
| `GET` | `/api/monitoring` | JWT + Admin | Alle Agents abrufen |
| `GET` | `/api/monitoring/statistics` | JWT + Admin | Statistiken |
| `GET` | `/api/monitoring/:id` | JWT + Admin | Einzelner Agent |
| `DELETE` | `/api/monitoring/:id` | JWT + Admin | Agent löschen |

**Agent API Key:** In `docker-compose.yml` unter `AGENT_API_KEY`

### Installation & Verteilung

Der Agent wird als Inno Setup Installer (`.exe`) und Intune-Paket (`.intunewin`) bereitgestellt und über Microsoft Intune auf alle Geräte ausgerollt.

**Intune-Konfiguration (v2.0.0):**
- Installationsbefehl: `IT-Nexus-Agent-Setup-2.0.0.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART`
- Deinstallationsbefehl: `"C:\Program Files\IT Nexus Agent\IT-Nexus-Agent.exe" --uninstall`
- Installationsverhalten: **System**
- Erkennungsregel: **PowerShell-Skript** (`agent-cs/detect-it-nexus-agent.ps1`) – prüft ob `C:\Program Files\IT Nexus Agent\IT-Nexus-Agent.exe` existiert, Exit 0 = erkannt, Exit 1 = nicht installiert
  - 32-Bit PowerShell: **Nein** | Skriptsignatur: **Nein**
  - ⚠️ Registry-basierte Erkennung schlägt mit Fehler **0x87D30006** fehl – immer PowerShell-Skript verwenden!

**Rollout-Strategie (Staged Rollout):**

| Gruppe | Zielversion | Status |
|---|---|---|
| Test | v2.0.0 | ✅ Abgeschlossen |
| Pilot | v2.0.0 | ✅ Abgeschlossen |
| Produktion | v2.0.0 | 🔄 Automatischer Rollout via Intune (alle Gruppen freigegeben, Stand Mai 2026) |

### Installer-Dateien

| Datei | Zweck |
|---|---|
| `installer/IT-Nexus-Agent-Setup-2.0.0.exe` | Manuelle Installation |
| `installer/IT-Nexus-Agent-Setup-2.0.0.intunewin` | Microsoft Intune Deployment |

Der Agent installiert sich als Windows Service und läuft vollständig unsichtbar im Hintergrund – kein Tray-Icon, kein Dashboard.

### Geräte-Detailseite

Über `/monitoring/device/:id` (Klick auf ein Gerät in der Monitoring-Übersicht) gelangt man zur Detailseite eines einzelnen Agents. Dieselbe Seite ist auch über `/assets/device/:hostname` aus der Asset-Verwaltung erreichbar.

**Angezeigte Informationen:**

| Bereich | Inhalt |
|---|---|
| **Live-Metriken** | CPU %, RAM %, Disk frei, Uptime |
| **System** | OS, IP, MAC, Domain, Letzter Nutzer |
| **Sicherheit** | BitLocker-Status, Defender aktiv, Signaturalter, TPM, Secure Boot |
| **Hardware** | Seriennummer, CPU-Modell, Kerne |
| **Software** | Installierte Software (durchsuchbar) |
| **Windows Updates** | Anzahl ausstehender Updates |
| **Agent-Info** | Version, letzter Check-in |

**Verfügbare Aktionen (Admin):**

| Aktion | Beschreibung |
|---|---|
| **Check Updates** | Agent prüft sofort ausstehende Updates |
| **Install Updates** | Agent installiert alle verfügbaren Updates (inkl. Treiber) |
| **Reboot** | Gerät wird neu gestartet |
| **Upgrade Win11** | Windows 11 In-Place Upgrade anstoßen |
| **Update Agent** | Agent aktualisiert sich selbst auf neueste Version |

Alle Aktionen werden als Patch-Command gespeichert und beim nächsten Check-in (max. 1 Minute) vom Agent abgerufen und ausgeführt.

---

## 20. Externe Monitoring-Alerts

IT Nexus empfängt automatisch strukturierte Monitoring-E-Mails von **Netgo** und **Arctic Wolf** und stellt diese im Monitoring-Bereich als externe Alerts dar. Beide Quellen werden über Graph API (primär) und IMAP (Fallback) überwacht.

### Überwachte Postfächer

| Postfach | Zweck |
|---|---|
| `it-tool@cereda-systems.de` | Haupt-Postfach – Tickets + Monitoring-Alerts |
| `helpdesk@cereda-systems.de` | Zweites Postfach – **nur** Monitoring-Alerts (keine Tickets) |

Das zweite Postfach wird über die Umgebungsvariable `MONITORING_MAILBOX` konfiguriert und alle 30 Sekunden gepollt. Nicht erkannte E-Mails (kein Netgo, kein Arctic Wolf) werden dort ignoriert und nicht als Ticket erstellt.

### Quellen & Erkennung

| Quelle | Erkennungs-Domain | Parser-Datei |
|---|---|---|
| **Netgo** | `@netgo.de`, `@mg.netgo.de` | `netgoParser.js` |
| **Arctic Wolf** | `@arcticwolf.com`, `@notifications.arcticwolf.com` | `arcticWolfParser.js` |

### Funktionsweise

| Schritt | Beschreibung |
|---|---|
| **E-Mail-Eingang** | Monitoring-Email trifft im konfigurierten Postfach ein |
| **Erkennung** | Backend prüft Absender-Domain automatisch |
| **Parsing** | Alle relevanten Felder werden strukturiert extrahiert |
| **Speicherung** | Alert wird in Tabelle `external_alerts` gespeichert (kein Ticket erstellt) |
| **Anzeige** | Alerts erscheinen im Tab „Ext. Alerts" auf der Monitoring-Seite |

### Frontend (Monitoring-Seite → Tab „Ext. Alerts")

- Alerts werden nach Schweregrad (CRIT/WARN/OK) mit farbiger Markierung angezeigt
- **Quittierte ausblenden**: Standardmäßig aktiv – gequittierte Alerts werden versteckt; Button zeigt Anzahl und lässt sich umschalten
- **Ticket erstellen**: Erstellt ein IT Nexus-Ticket aus dem Alert
- **Quittieren**: Markiert den Alert als quittiert
- **Löschen**: Entfernt den Alert aus der Datenbank
- Badge im Tab zeigt Anzahl nicht-quittierter Alerts (rot bei > 0)
- Automatische Aktualisierung alle 60 Sekunden

### Arctic Wolf – Detailkarte

Arctic Wolf Alerts werden in einer erweiterten Karte dargestellt:

| Bereich | Inhalt |
|---|---|
| **Kopfzeile** | Severity-Badge (`LOW`/`MEDIUM`/`HIGH`/`CRITICAL`), Incident-Name, Gerät + IP, Zeitstempel |
| **Details-Grid** | Event-Typ, Application, User, Process (immer sichtbar) |
| **„Mehr Details"** | Aufklappbar: Was ist passiert? · Warum relevant? · Wie erkannt? · Nächste Schritte · Empfehlungen |

### Severity-Mapping

| Quelle | Severity | Ticket-Priorität | Farbe |
|---|---|---|---|
| Netgo | CRIT | kritisch | Rot |
| Netgo | WARN | hoch | Gelb |
| Netgo | OK | niedrig | Grün |
| Arctic Wolf | HIGH / CRITICAL | kritisch | Rot |
| Arctic Wolf | LOW / MEDIUM | hoch | Gelb |

### API-Endpunkte

| Methode | Pfad | Beschreibung |
|---|---|---|
| `GET` | `/api/external-alerts` | Alle Alerts abrufen (optional `?acknowledged=true/false`) |
| `POST` | `/api/external-alerts/:id/acknowledge` | Alert quittieren |
| `POST` | `/api/external-alerts/:id/create-ticket` | Ticket aus Alert erstellen |
| `DELETE` | `/api/external-alerts/:id` | Alert löschen |

Alle Endpunkte erfordern JWT + Admin-Rolle.

### Datenbankschema

Tabelle `external_alerts`:

| Spalte | Typ | Beschreibung |
|---|---|---|
| `id` | INTEGER PK | Auto-Increment |
| `source` | TEXT | Quelle: `netgo` oder `arcticwolf` |
| `device` | TEXT | Gerätename |
| `service` | TEXT | Überwachter Service / Event-Typ |
| `state_transition` | TEXT | Statusübergang (z. B. `OK -> CRIT`) |
| `severity` | TEXT | CRIT / WARN / OK / UNKNOWN |
| `message` | TEXT | Kurzbeschreibung |
| `customer` | TEXT | Kundenname |
| `monitored_by` | TEXT | Überwachungsinstanz |
| `state_time` | TEXT | Zeitpunkt des Ereignisses |
| `raw_body` | TEXT | Bei Arctic Wolf: JSON mit allen strukturierten Feldern |
| `acknowledged` | INTEGER | 0 = offen, 1 = quittiert |
| `ticket_id` | INTEGER | Verknüpfte Ticket-ID (falls erstellt) |
| `email_message_id` | TEXT UNIQUE | Message-ID der E-Mail (Duplikat-Schutz) |

---

## 21. Patch Management

Das Patch-Management-Modul (`/patch`) ermöglicht die zentrale Verwaltung von Windows Updates auf allen verwalteten Geräten – mit Staged Rollout, Gruppen, Policies und direkten Commands.

**Nur für `super_admin` und `admin` zugänglich.**

### Staged Rollout Gruppen

Updates werden stufenweise ausgerollt, um Risiken zu minimieren:

| Gruppe | Zweck | Typische Mitglieder |
|---|---|---|
| **Test** | Erste Testgeräte – sofortiger Rollout | IT-eigene Geräte |
| **Pilot** | Frühe Anwender – nach erfolgreichem Test | ausgewählte Mitarbeiter |
| **Produktion** | Alle übrigen Geräte | gesamter Betrieb |

Jede Gruppe kann eine eigene Zielversion erhalten. Agents, die keiner Gruppe zugeordnet sind, erhalten die globale Fallback-Version aus der Umgebungsvariable `AGENT_VERSION`.

### Tab: Gruppen

- Übersicht aller Rollout-Gruppen mit Zielversion und Geräteanzahl
- Geräte per Drag & Drop oder Dropdown einer Gruppe zuweisen
- Zielversion pro Gruppe setzen

### Tab: Policies

Update-Richtlinien definieren, wann und wie Updates installiert werden:

| Feld | Beschreibung |
|---|---|
| **Installationsfenster** | Uhrzeit und Wochentage für automatische Updates |
| **Erzwingen nach X Tagen** | Updates werden nach Ablauf der Frist zwangsweise installiert |
| **Reboot erlaubt** | Ob nach Updates automatisch neu gestartet werden darf |
| **Zielgeräte** | Gruppe oder einzelne Geräte |

### Tab: Befehle (Commands)

Direkte Einzel-Befehle an einen Agent senden – werden beim nächsten Check-in ausgeführt:

| Befehl | Beschreibung |
|---|---|
| `check_updates` | Ausstehende Updates prüfen und im Backend speichern |
| `install_updates` | Alle verfügbaren Updates sofort installieren (inkl. Treiber) |
| `reboot` | Gerät neu starten |
| `upgrade_win11` | Windows 11 In-Place Upgrade anstoßen |
| `update_agent` | Agent auf neueste Version aktualisieren |

Der Status jedes Commands (`pending` → `running` → `success`/`failed`) wird live angezeigt. Long-running Commands (z.B. Windows 11 Upgrade) bleiben im Status `running` bis der Agent das Ergebnis meldet.

### API-Endpunkte

| Methode | Pfad | Auth | Beschreibung |
|---|---|---|---|
| `GET` | `/api/patch/commands` | JWT + Admin | Alle Commands abrufen |
| `POST` | `/api/patch/commands/trigger` | JWT + Admin | Einzelnen Command senden |
| `POST` | `/api/patch/commands/trigger-group` | JWT + Admin | Command an ganze Gruppe senden |
| `POST` | `/api/patch/commands/result` | `X-Agent-Key` | Agent meldet Ergebnis |
| `GET` | `/api/patch/groups` | JWT + Admin | Rollout-Gruppen abrufen |
| `POST` | `/api/patch/groups` | JWT + Admin | Gruppe erstellen |
| `GET` | `/api/patch/policies` | JWT + Admin | Policies abrufen |

---

## 22. Ankündigungen

Das Ankündigungs-Modul (`/announcements`) ermöglicht das Senden von Desktop-Benachrichtigungen direkt auf verwaltete Windows-Geräte.

**Nur für `super_admin` und `admin` zugänglich.**

### Funktionsweise

1. Admin erstellt eine Ankündigung im Web-Interface (Titel, Nachricht, Typ, Zielgeräte)
2. Agent pollt alle **15 Sekunden** `POST /api/monitoring/announcements-poll`
3. Neue Ankündigung wird erkannt → Agent zeigt WPF-Dialog auf dem Desktop des eingeloggten Nutzers
4. Nutzer klickt „Gelesen und bestätigt" → Agent sendet ACK an Backend
5. Ankündigung gilt als zugestellt

### Typen & Darstellung

| Typ | Farbe | Einsatz |
|---|---|---|
| **Info** | Blau | Allgemeine Hinweise |
| **Warnung** | Orange | Wichtige Hinweise, bevorstehende Wartungen |
| **Kritisch** | Rot | Notfälle, sofortiger Handlungsbedarf |

Der WPF-Dialog erscheint im Vordergrund mit farbigem Header, Titel, Nachricht und einem Bestätigungs-Button. Kein Konsolenfenster – vollständig native Windows-Darstellung.

### Zielgruppen

| Option | Beschreibung |
|---|---|
| **Alle Geräte** | Ankündigung wird an alle registrierten Agents gesendet |
| **Bestimmte Geräte** | Auswahl einzelner Hostnames |
| **Rollout-Gruppe** | Alle Geräte einer Patch-Gruppe (Test / Pilot / Produktion) |

### Status

| Status | Bedeutung |
|---|---|
| **Ausstehend** | Noch nicht vom Gerät abgerufen |
| **Zugestellt** | Agent hat die Ankündigung angezeigt |
| **Bestätigt (ACK)** | Nutzer hat den Dialog bestätigt |

### Web-ACK (ohne Agent)

Für Geräte ohne Agent oder für Administratoren kann eine Ankündigung auch direkt im Browser über den Button **„Als gelesen markieren"** bestätigt werden.

### API-Endpunkte

| Methode | Pfad | Auth | Beschreibung |
|---|---|---|---|
| `GET` | `/api/announcements` | JWT + Admin | Alle Ankündigungen |
| `POST` | `/api/announcements` | JWT + Admin | Neue Ankündigung erstellen |
| `DELETE` | `/api/announcements/:id` | JWT + Admin | Ankündigung löschen |
| `POST` | `/api/monitoring/announcements-poll` | `X-Agent-Key` | Agent pollt neue Ankündigungen |
| `POST` | `/api/announcements/:id/ack-agent` | `X-Agent-Key` | Agent sendet Bestätigung |
| `POST` | `/api/announcements/:id/ack` | JWT | Web-Bestätigung durch Admin |

---

## Anhang: Technische Informationen

### Infrastruktur

- **Server:** LXC Container (Proxmox), IP 192.168.0.194
- **Domain:** `https://it-nexus.cereda-systems.de`
- **Stack:** React (Frontend) · Node.js/Express (Backend) · SQLite (Datenbank) · nginx (Webserver)
- **Container:** Docker Compose (`fido-backend` Port 5000, `fido-frontend` Port 8443)

### Datensicherung

Die SQLite-Datenbank liegt unter:
`/var/lib/docker/volumes/it-nexus_fido-data/_data/database.sqlite`

### Support & Kontakt

Bei Problemen mit dem System: Ticket über das System selbst erstellen oder
direkt an den Systemadministrator wenden.

---

*Dokumentation erstellt für Cereda Systems GmbH – vertraulich*
