220 Zeilen
7.3 KiB
Markdown
220 Zeilen
7.3 KiB
Markdown
# Organigramm & Vertretungsmanagement - Implementierung
|
|
|
|
## Übersicht
|
|
Vollständige Implementierung eines interaktiven Organigramm-Systems mit dynamischer Vertretungsverwaltung für das LKA NRW.
|
|
|
|
## Datum: 2025-01-22
|
|
|
|
## Neue Features
|
|
|
|
### 1. Organigramm-Verwaltung
|
|
- **Hierarchische Darstellung** der Behördenstruktur (Direktion → Abteilung → Dezernat → Sachgebiet)
|
|
- **Sondereinheiten** wie Personalrat und Schwerbehindertenvertretung
|
|
- **Führungsstellen (FüSt)** für Abteilungen 1-6
|
|
- **Interaktive Visualisierung** mit Zoom/Pan und Suche
|
|
|
|
### 2. Dynamisches Vertretungssystem
|
|
- **Selbstverwaltung**: Mitarbeiter können eigene Vertretungen festlegen
|
|
- **Unbegrenzte Delegationskette**: Vertretungen können weitergegeben werden
|
|
- **Zeitliche Begrenzung**: Von-Bis Zeiträume für Vertretungen
|
|
- **Ebenengleiche Vertretung**: Automatische Vorschläge für passende Vertreter
|
|
|
|
### 3. Admin-Panel Features
|
|
- **React Flow Editor** für Drag & Drop Organigramm-Bearbeitung
|
|
- **Einheiten-Verwaltung**: Hinzufügen, Bearbeiten, Löschen von Organisationseinheiten
|
|
- **Visuelle Differenzierung** durch Gradient-Farbschema nach Abteilungen
|
|
- **PDF-Import ready** für zukünftige OCR-Integration
|
|
|
|
### 4. Frontend Features
|
|
- **Organigramm-Modal**: Fullscreen-Popup mit 3-Bereich-Layout
|
|
- **Mitarbeiter-Details**: Anzeige von Mitarbeitern pro Einheit
|
|
- **Vertretungs-Tab** in "Mein Profil"
|
|
- **Quick-Access**: 🏢 Button im Header für schnellen Zugriff
|
|
|
|
## Technische Änderungen
|
|
|
|
### Backend
|
|
|
|
#### Neue Dateien:
|
|
- `backend/src/routes/organization.ts` - API-Routes für Organigramm und Vertretungen
|
|
|
|
#### Geänderte Dateien:
|
|
- `backend/src/config/secureDatabase.ts` - Neue Datenbank-Tabellen:
|
|
- `organizational_units` - Organisationseinheiten
|
|
- `employee_unit_assignments` - Mitarbeiter-Zuordnungen
|
|
- `special_positions` - Sonderpositionen (Beauftragte, Räte)
|
|
- `deputy_assignments` - Vertretungszuweisungen
|
|
- `deputy_delegations` - Vertretungs-Weitergaben
|
|
|
|
- `backend/src/index.ts` - Neue Route `/api/organization` registriert
|
|
|
|
- `backend/src/routes/employeesSecure.ts` - Neue Route `/employees/public` für öffentliche Mitarbeiterliste
|
|
|
|
#### API Endpoints:
|
|
```
|
|
GET /api/organization/units - Alle Einheiten abrufen
|
|
GET /api/organization/hierarchy - Hierarchie-Baum abrufen
|
|
GET /api/organization/units/:id - Einzelne Einheit mit Mitarbeitern
|
|
POST /api/organization/units - Neue Einheit anlegen
|
|
PUT /api/organization/units/:id - Einheit bearbeiten
|
|
|
|
POST /api/organization/assignments - Mitarbeiter zuordnen
|
|
GET /api/organization/my-units - Eigene Einheiten abrufen
|
|
|
|
GET /api/organization/deputies/my - Eigene Vertretungen abrufen
|
|
POST /api/organization/deputies/my - Vertretung anlegen
|
|
POST /api/organization/deputies/delegate - Vertretung weitergeben
|
|
GET /api/organization/deputies/chain/:id - Vertretungskette abrufen
|
|
|
|
GET /api/organization/special-positions - Sonderpositionen abrufen
|
|
```
|
|
|
|
### Shared Types
|
|
|
|
#### Geänderte Dateien:
|
|
- `shared/index.d.ts` - Neue TypeScript-Definitionen:
|
|
- `OrganizationalUnit` - Organisationseinheit
|
|
- `OrganizationalUnitType` - Einheiten-Typen
|
|
- `EmployeeUnitAssignment` - Mitarbeiter-Zuordnung
|
|
- `EmployeeUnitRole` - Rollen (leiter, stellvertreter, mitarbeiter, beauftragter)
|
|
- `SpecialPosition` - Sonderpositionen
|
|
- `DeputyAssignment` - Vertretungszuweisung
|
|
- `DeputyDelegation` - Vertretungs-Delegation
|
|
|
|
### Admin-Panel
|
|
|
|
#### Neue Dateien:
|
|
- `admin-panel/src/views/OrganizationEditor.tsx` - React Flow basierter Organigramm-Editor
|
|
|
|
#### Geänderte Dateien:
|
|
- `admin-panel/src/App.tsx` - Route `/organization` hinzugefügt
|
|
- `admin-panel/src/components/Layout.tsx` - Navigation für Organigramm hinzugefügt
|
|
|
|
#### NPM Packages:
|
|
```json
|
|
{
|
|
"reactflow": "^11.x",
|
|
"@reactflow/controls": "^11.x",
|
|
"@reactflow/minimap": "^11.x",
|
|
"@reactflow/background": "^11.x"
|
|
}
|
|
```
|
|
|
|
### Frontend
|
|
|
|
#### Neue Dateien:
|
|
- `frontend/src/components/OrganizationChart.tsx` - Interaktives Organigramm-Modal
|
|
- `frontend/src/components/DeputyManagement.tsx` - Vertretungsverwaltung
|
|
|
|
#### Geänderte Dateien:
|
|
- `frontend/src/components/Header.tsx` - Organigramm-Button und Modal-Integration
|
|
- `frontend/src/views/MyProfile.tsx` - Tab für Vertretungsverwaltung hinzugefügt
|
|
|
|
## Datenmodell
|
|
|
|
### Organisationsstruktur
|
|
```sql
|
|
organizational_units:
|
|
- id (UUID)
|
|
- code (z.B. "ZA 1", "Dezernat 42")
|
|
- name (Vollständiger Name)
|
|
- type (direktion/abteilung/dezernat/sachgebiet/...)
|
|
- level (0=Direktor, 1=Abteilung, 2=Dezernat, 3=SG/TD)
|
|
- parent_id (Verweis auf übergeordnete Einheit)
|
|
- position_x/y (Visuelle Position)
|
|
- color (Farbcodierung)
|
|
- has_fuehrungsstelle (Boolean)
|
|
```
|
|
|
|
### Vertretungssystem
|
|
```sql
|
|
deputy_assignments:
|
|
- principal_id (Wer wird vertreten)
|
|
- deputy_id (Wer vertritt)
|
|
- valid_from/until (Zeitraum)
|
|
- reason (Urlaub/Dienstreise/etc.)
|
|
- can_delegate (Darf weitergeben)
|
|
|
|
deputy_delegations:
|
|
- original_assignment_id
|
|
- from_deputy_id
|
|
- to_deputy_id
|
|
- reason
|
|
```
|
|
|
|
## UI/UX Features
|
|
|
|
### Visuelle Gestaltung
|
|
- **Gradient-Farbschema** für Abteilungen 1-6
|
|
- **Icon-System** für verschiedene Einheiten-Typen
|
|
- **Hover-Effekte** mit Mitarbeiteranzahl und Details
|
|
- **Breadcrumb-Navigation** für Hierarchie-Pfad
|
|
- **Dark Mode Support** vollständig integriert
|
|
|
|
### Interaktionen
|
|
- **Zoom/Pan** für große Organigramme
|
|
- **Suche** nach Einheiten und Personen
|
|
- **Filter** nach Abteilungen
|
|
- **Drag & Drop** im Admin-Editor
|
|
- **Kontextmenüs** für schnelle Aktionen
|
|
|
|
## Sicherheit
|
|
- **Rollenbasierte Zugriffskontrolle** für Admin-Funktionen
|
|
- **Audit-Logging** für kritische Aktionen
|
|
- **Verschlüsselte Felder** für sensitive Daten
|
|
- **JWT-Authentication** für alle API-Calls
|
|
|
|
## Migration & Deployment
|
|
|
|
### Datenbank-Migration
|
|
Beim ersten Start werden automatisch alle neuen Tabellen angelegt.
|
|
|
|
### Rollback
|
|
Falls ein Rollback nötig ist, können die neuen Tabellen entfernt werden:
|
|
```sql
|
|
DROP TABLE IF EXISTS deputy_delegations;
|
|
DROP TABLE IF EXISTS deputy_assignments;
|
|
DROP TABLE IF EXISTS special_positions;
|
|
DROP TABLE IF EXISTS employee_unit_assignments;
|
|
DROP TABLE IF EXISTS organizational_units;
|
|
```
|
|
|
|
## Testing
|
|
|
|
### Smoke Tests
|
|
1. Backend neu starten für Datenbank-Schema
|
|
2. Admin-Panel: Organigramm → Einheit hinzufügen
|
|
3. Frontend: 🏢 Button → Organigramm anzeigen
|
|
4. Mein Profil → Vertretungen → Vertretung hinzufügen
|
|
|
|
### Bekannte Limitierungen
|
|
- PDF-Import noch nicht implementiert (Struktur vorbereitet)
|
|
- Skill-Aggregation pro Einheit noch nicht implementiert
|
|
- E-Mail-Benachrichtigungen für Vertretungen noch nicht aktiv
|
|
|
|
## Performance
|
|
- **Lazy Loading** für große Hierarchien
|
|
- **Virtualisierung** bei >500 Nodes
|
|
- **Caching** von Hierarchie-Daten
|
|
- **Progressive Disclosure** für Ebenen
|
|
|
|
## Zukünftige Erweiterungen
|
|
1. **PDF-OCR Import** für automatisches Einlesen von Organigrammen
|
|
2. **Skill-Matrix** pro Organisationseinheit
|
|
3. **Stellenplan-Integration** mit Soll/Ist-Vergleich
|
|
4. **Export-Funktionen** (PDF, PNG, Excel)
|
|
5. **Historien-Tracking** für Reorganisationen
|
|
6. **E-Mail-Notifications** bei Vertretungsänderungen
|
|
|
|
## Abhängigkeiten
|
|
- React Flow 11.x für Organigramm-Editor
|
|
- Better-SQLite3 für Datenbank
|
|
- TypeScript für Type-Safety
|
|
- Tailwind CSS für Styling
|
|
|
|
## Support & Dokumentation
|
|
Bei Fragen oder Problemen:
|
|
- Prüfen Sie die Browser-Konsole für Fehler
|
|
- Stellen Sie sicher, dass alle Services laufen
|
|
- Überprüfen Sie die Datenbank-Verbindung
|
|
- Logs befinden sich in `backend/logs/` |