Files
SDSStundenerfassung/README.md
2026-02-02 19:12:40 +01:00

286 lines
9.5 KiB
Markdown

# Stundenerfassungs-System
Eine webbasierte Anwendung zur Erfassung von Arbeitszeiten mit Admin-Bereich, PDF-Export, Überstunden-Verwaltung und LDAP-Integration.
## Features
### Für Mitarbeiter
- ✅ Login mit Benutzername und Passwort oder LDAP
- ✅ Wöchentliche Stundenerfassung (Montag - Sonntag)
- ✅ Automatisches Speichern der Einträge
- ✅ Eingabe von Start-/Endzeit, Pausen und Notizen
- ✅ Mehrere Tätigkeiten pro Tag mit Projektnummern (bis zu 5)
- ✅ Automatische Berechnung der Gesamtstunden
- ✅ Überstunden-Verwaltung (Anzeige und Verbrauch)
- ✅ Urlaubsverwaltung (ganzer/halber Tag)
- ✅ Krankheitstage erfassen
- ✅ Feiertage werden automatisch erkannt
- ✅ Wochenend-Prozentsätze (konfigurierbar)
- ✅ Wöchentliches Abschicken des Stundenzettels
- ✅ Überstunden-Auswertung pro Woche mit detaillierter Aufschlüsselung
- ✅ Anzeige aktueller Überstunden und verbleibender Urlaubstage
- ✅ Automatische Zeiterfassung via IP-Ping (optional)
- ✅ QR-Code für Check-in/Check-out
### Für Administratoren
- ✅ Benutzerverwaltung (Anlegen, Löschen, Bearbeiten)
- ✅ Rollenvergabe (Mitarbeiter, Verwaltung, Admin)
- ✅ Mehrere Rollen pro Benutzer möglich
- ✅ Übersicht aller Benutzer mit Statistiken
- ✅ Personalnummern verwalten
- ✅ Wochenstunden und Urlaubstage pro Mitarbeiter konfigurieren
- ✅ LDAP-Integration für Benutzer-Synchronisation
- ✅ LDAP-Konfiguration und manuelle/automatische Synchronisation
- ✅ System-Optionen (Wochenend-Prozentsätze)
### Für Verwaltung
- ✅ Postfach mit eingereichten Stundenzetteln
- ✅ PDF-Generierung und Download
- ✅ Übersichtliche Darstellung aller Einreichungen
- ✅ Wochenansicht mit Statistiken pro Mitarbeiter
- ✅ Überstunden-Offset (manuelle Korrekturen)
- ✅ Admin-Kommentare zu Stundenzetteln
- ✅ Versionsverwaltung bei Änderungen
- ✅ Übersicht über Überstunden und Urlaubstage aller Mitarbeiter
## Installation
### Voraussetzungen
- Node.js (Version 14 oder höher)
- npm (wird mit Node.js installiert)
### Schritt 1: Dependencies installieren
```bash
npm install
```
### Schritt 2: Server starten
```bash
npm start
```
Der Server läuft nun auf `http://localhost:3333`
Für Entwicklung mit automatischem Neustart:
```bash
npm run dev
```
### Docker (optional)
Das System kann auch mit Docker betrieben werden:
```bash
docker-compose up -d
```
## Standard-Zugangsdaten
Nach der Installation sind folgende Benutzer verfügbar:
### Administrator
- **Benutzername:** admin
- **Passwort:** admin123
- **Funktion:** Kann Benutzer anlegen und verwalten, LDAP konfigurieren
### Verwaltung
- **Benutzername:** verwaltung
- **Passwort:** verwaltung123
- **Funktion:** Kann eingereichte Stundenzettel einsehen, PDFs erstellen und Überstunden korrigieren
**WICHTIG:** Bitte ändern Sie diese Passwörter nach der ersten Anmeldung!
## Verwendung
### Für Mitarbeiter
1. Melden Sie sich mit Ihren Zugangsdaten an
2. Wählen Sie die gewünschte Woche aus (Pfeiltasten)
3. Tragen Sie Ihre Arbeitszeiten ein:
- **Start:** Arbeitsbeginn
- **Ende:** Arbeitsende
- **Pause:** Pausenzeit in Minuten
- **Tätigkeiten:** Bis zu 5 Tätigkeiten mit Beschreibung, Stunden und Projektnummer
- **Notizen:** Optional, z.B. Projekt oder Tätigkeit
- **Überstunden:** Optional, wenn Überstunden verbraucht werden sollen
- **Urlaub:** Ganzer oder halber Tag Urlaub
- **Krank:** Krankheitstag markieren
4. Die Einträge werden automatisch gespeichert
5. Am Ende der Woche: Klicken Sie auf **"Woche abschicken"**
6. Nach dem Abschicken können keine Änderungen mehr vorgenommen werden
7. **Überstunden-Auswertung:** Klicken Sie auf "Details anzeigen" im Bereich "Aktuelle Überstunden" für eine wöchentliche Aufschlüsselung
### Für Administratoren
1. Melden Sie sich als Admin an
2. Sie gelangen automatisch zur Benutzerverwaltung
3. **Neuen Benutzer anlegen:**
- Füllen Sie das Formular aus
- Wählen Sie die passende Rolle (mehrere möglich)
- Personalnummer, Wochenstunden und Urlaubstage konfigurieren
- Klicken Sie auf "Benutzer anlegen"
4. **Benutzer löschen:**
- Klicken Sie auf "Löschen" neben dem gewünschten Benutzer
- System-Benutzer (Admin, Verwaltung) können nicht gelöscht werden
5. **LDAP konfigurieren:**
- Navigieren Sie zum LDAP-Bereich
- Konfigurieren Sie LDAP-Verbindung und Synchronisation
- Führen Sie manuelle Synchronisationen durch oder aktivieren Sie automatische Syncs
### Für Verwaltung
1. Melden Sie sich als Verwaltungs-Benutzer an
2. Sie sehen alle eingereichten Stundenzettel im Postfach
3. **PDF erstellen:**
- Klicken Sie auf "PDF herunterladen" neben dem gewünschten Stundenzettel
- Die PDF wird automatisch generiert und heruntergeladen
4. **Überstunden korrigieren:**
- In der Wochenansicht können Sie manuelle Korrekturen (Offset) für jeden Mitarbeiter vornehmen
5. **Kommentare hinzufügen:**
- Fügen Sie Admin-Kommentare zu Stundenzetteln hinzu
6. Die PDF enthält:
- Mitarbeitername und Personalnummer
- Zeitraum
- Alle Tageseinträge mit Start, Ende, Pause, Stunden, Tätigkeiten und Notizen
- Überstunden-Verbrauch
- Urlaubstage
- Gesamtstundensumme
## Technologie-Stack
- **Backend:** Node.js + Express
- **Datenbank:** SQLite3
- **Template Engine:** EJS
- **PDF-Generierung:** PDFKit
- **Authentifizierung:** bcryptjs + express-session
- **LDAP:** ldapjs
- **QR-Codes:** qrcode
## Projektstruktur
```
stundenerfassung/
├── routes/ # API-Routen
│ ├── admin.js # Admin-Funktionen
│ ├── admin-ldap.js # LDAP-Verwaltung
│ ├── auth.js # Authentifizierung
│ ├── dashboard.js # Dashboard-Routen
│ ├── timesheet.js # Stundenerfassung
│ ├── user.js # Benutzer-APIs
│ └── verwaltung.js # Verwaltungs-Funktionen
├── services/ # Services
│ ├── feiertage-service.js # Feiertags-API
│ ├── ldap-service.js # LDAP-Service
│ ├── ldap-scheduler.js # LDAP-Synchronisation
│ ├── pdf-service.js # PDF-Generierung
│ └── ping-service.js # IP-basierte Zeiterfassung
├── views/ # EJS-Templates
├── public/ # Statische Dateien
│ ├── css/
│ ├── js/
│ └── images/
└── helpers/ # Helper-Funktionen
```
## Datenbankstruktur
### Tabelle: users
- Speichert Benutzerinformationen und Zugangsdaten
- Passwörter werden verschlüsselt gespeichert
- Unterstützt mehrere Rollen pro Benutzer
- Personalnummer, Wochenstunden, Urlaubstage, Überstunden-Offset
### Tabelle: timesheet_entries
- Speichert einzelne Tageseinträge
- Automatische Berechnung der Gesamtstunden
- Unterstützt mehrere Tätigkeiten pro Tag
- Überstunden-Verbrauch, Urlaub, Krankheit
### Tabelle: weekly_timesheets
- Speichert eingereichte Wochenstundenzettel
- Verknüpfung mit Benutzer und Status
- Versionsverwaltung und Admin-Kommentare
### Tabelle: system_options
- Systemweite Einstellungen
- Wochenend-Prozentsätze (Samstag/Sonntag)
### Tabelle: public_holidays
- Öffentliche Feiertage (Baden-Württemberg)
- Automatische Aktualisierung
### Tabelle: ldap_config
- LDAP-Konfiguration
- Synchronisationseinstellungen
### Tabelle: ping_status
- IP-basierte Zeiterfassung
- Ping-Status pro Benutzer und Tag
## Features im Detail
### Überstunden-Verwaltung
- Automatische Berechnung basierend auf Sollstunden
- Berücksichtigung von Wochenend-Prozentsätzen
- Feiertagsstunden werden automatisch hinzugefügt
- Urlaubsstunden werden in die Berechnung einbezogen
- Manuelle Korrekturen durch Verwaltung möglich
- Detaillierte wöchentliche Auswertung für Mitarbeiter
### Urlaubsverwaltung
- Ganzer oder halber Tag Urlaub
- Verbleibende Urlaubstage werden angezeigt
- Verplante Urlaubstage werden erfasst
- Urlaubstage werden in Überstunden-Berechnung berücksichtigt
### Wochenend-Prozentsätze
- Konfigurierbare Prozentsätze für Samstag und Sonntag
- Werden automatisch auf gearbeitete Stunden angewendet
- Standard: 100% (keine Zuschläge)
### Feiertage
- Automatische Erkennung öffentlicher Feiertage (Baden-Württemberg)
- Feiertagsstunden werden automatisch berechnet
- Arbeit an Feiertagen zählt als Überstunden
### LDAP-Integration
- Automatische Benutzer-Synchronisation
- Konfigurierbare Synchronisationsintervalle
- Manuelle Synchronisation möglich
- LDAP-Authentifizierung als Alternative zu lokalen Passwörtern
## Sicherheit
- ✅ Passwörter werden mit bcrypt verschlüsselt
- ✅ Session-basierte Authentifizierung
- ✅ Rollenbasierte Zugriffskontrolle
- ✅ CSRF-Schutz durch Sessions
- ✅ LDAP-Integration für zentrale Authentifizierung
- ✅ SQL-Injection-Schutz durch parametrisierte Queries
## Anpassungen
### Port ändern
Bearbeiten Sie in `server.js` die Zeile:
```javascript
const PORT = 3333; // Ändern Sie hier den Port
```
### Datenbank-Speicherort
Die Datenbank wird standardmäßig als `stundenerfassung.db` im Projektverzeichnis gespeichert.
Über die Umgebungsvariable `DB_PATH` kann ein anderer Pfad angegeben werden.
### Wochenend-Prozentsätze
Im Admin-Bereich können die Prozentsätze für Samstag und Sonntag konfiguriert werden.
Standard: 100% (keine Zuschläge).
## Lizenz
Proprietär - Für interne Firmennutzung
## Support
Bei Fragen oder Problemen wenden Sie sich bitte an Ihre IT-Abteilung.