286 lines
9.5 KiB
Markdown
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.
|