# 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-routes.js # Admin-Funktionen │ ├── admin-ldap-routes.js # LDAP-Verwaltung │ ├── auth-routes.js # Authentifizierung │ ├── dashboard-routes.js # Dashboard-Routen │ ├── timesheet-routes.js # Stundenerfassung │ ├── user-routes.js # Benutzer-APIs │ └── verwaltung-routes.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.