Aufräumen und header zentralisieren
This commit is contained in:
470
doc/DSGVO-Dokumentation.md
Normal file
470
doc/DSGVO-Dokumentation.md
Normal file
@@ -0,0 +1,470 @@
|
||||
# DSGVO-Dokumentation
|
||||
## Stundenerfassungssystem
|
||||
|
||||
---
|
||||
|
||||
## 1. Verantwortlicher und Kontaktdaten
|
||||
|
||||
**Verantwortlicher für die Datenverarbeitung:**
|
||||
|
||||
SDS Systemtechnik
|
||||
Rudolf-Diesel-Str. 7
|
||||
75365 Calw
|
||||
info@sds-systemtechnik.de
|
||||
+497051931540
|
||||
|
||||
**Datenschutzbeauftragter (falls vorhanden):**
|
||||
Matthias Herrlinger
|
||||
connexo GmbH
|
||||
Jägerstraße 4F
|
||||
71296 Heimsheim
|
||||
|
||||
**Kontakt für Datenschutzanfragen:**
|
||||
Carsten Graf
|
||||
Mechatronik-Ingenieur / IT-Infrastruktur
|
||||
SDS Systemtechnik
|
||||
carsten.graf@sds-systemtechnik.de
|
||||
+4970519315416
|
||||
|
||||
---
|
||||
|
||||
## 2. Zweck der Datenverarbeitung
|
||||
|
||||
Das Stundenerfassungssystem dient der Erfassung, Verwaltung und Dokumentation von Arbeitszeiten der Mitarbeiter. Die Verarbeitung personenbezogener Daten erfolgt zu folgenden Zwecken:
|
||||
|
||||
- **Zeiterfassung**: Erfassung von Arbeitsbeginn, Arbeitsende, Pausen und Gesamtarbeitszeit
|
||||
- **Arbeitszeitverwaltung**: Berechnung von Überstunden, Urlaubstagen und Fehlzeiten
|
||||
- **Lohnabrechnung**: Bereitstellung von Daten für die Lohn- und Gehaltsabrechnung
|
||||
- **Projektabrechnung**: Zuordnung von Arbeitszeiten zu Projekten und Projektnummern
|
||||
- **Compliance**: Einhaltung arbeitsrechtlicher Vorschriften (z.B. Arbeitszeitgesetz)
|
||||
- **Authentifizierung**: Sicherstellung des Zugriffs nur für berechtigte Personen
|
||||
- **Automatische Zeiterfassung**: IP-basierte automatische Erfassung von Arbeitsbeginn und -ende (optional)
|
||||
|
||||
---
|
||||
|
||||
## 3. Rechtsgrundlage
|
||||
|
||||
Die Verarbeitung personenbezogener Daten erfolgt auf Grundlage der folgenden Rechtsgrundlagen nach der DSGVO:
|
||||
|
||||
- **Art. 6 Abs. 1 lit. b DSGVO (Vertragserfüllung)**: Erfüllung des Arbeitsvertrags, insbesondere Erfassung der Arbeitszeit zur Lohnabrechnung
|
||||
- **Art. 6 Abs. 1 lit. c DSGVO (Rechtliche Verpflichtung)**: Erfüllung gesetzlicher Verpflichtungen (z.B. Arbeitszeitgesetz, Aufbewahrungspflichten nach HGB/GoBD)
|
||||
- **Art. 6 Abs. 1 lit. f DSGVO (Berechtigtes Interesse)**: Betriebswirtschaftliche Interessen (Projektabrechnung, Arbeitszeitoptimierung)
|
||||
|
||||
**Besondere Kategorien personenbezogener Daten:**
|
||||
- **Krankheitsdaten** (sick_status): Art. 9 Abs. 2 lit. b DSGVO (Arbeitsrechtliche Verpflichtungen)
|
||||
|
||||
---
|
||||
|
||||
## 4. Erfasste Datenkategorien
|
||||
|
||||
### 4.1 Benutzerdaten (Tabelle: `users`)
|
||||
|
||||
| Datenfeld | Beschreibung | Kategorie |
|
||||
|-----------|--------------|-----------|
|
||||
| `id` | Eindeutige Benutzer-ID (automatisch generiert) | Identifikationsdaten |
|
||||
| `username` | Benutzername für Login | Authentifizierung |
|
||||
| `password` | Passwort (gehasht mit bcrypt) | Authentifizierung |
|
||||
| `firstname` | Vorname | Identifikationsdaten |
|
||||
| `lastname` | Nachname | Identifikationsdaten |
|
||||
| `personalnummer` | Personalnummer des Mitarbeiters | Identifikationsdaten |
|
||||
| `role` | Benutzerrolle(n) als JSON-Array (z.B. "mitarbeiter", "verwaltung", "admin") | Berechtigungsdaten |
|
||||
| `wochenstunden` | Soll-Arbeitsstunden pro Woche | Arbeitszeitdaten |
|
||||
| `urlaubstage` | Anzahl der Urlaubstage pro Jahr | Arbeitszeitdaten |
|
||||
| `overtime_offset_hours` | Manuelle Korrektur der Überstunden durch Verwaltung | Arbeitszeitdaten |
|
||||
| `vacation_offset_days` | Manuelle Korrektur der Urlaubstage durch Verwaltung | Arbeitszeitdaten |
|
||||
| `ping_ip` | IP-Adresse für automatische Zeiterfassung (optional) | Technische Daten |
|
||||
| `last_week_start` | Letzte bearbeitete Woche (für UI-Navigation) | Systemdaten |
|
||||
| `created_at` | Zeitstempel der Benutzererstellung | Metadaten |
|
||||
|
||||
### 4.2 Zeiterfassungsdaten (Tabelle: `timesheet_entries`)
|
||||
|
||||
| Datenfeld | Beschreibung | Kategorie |
|
||||
|-----------|--------------|-----------|
|
||||
| `id` | Eindeutige Eintrags-ID | Identifikationsdaten |
|
||||
| `user_id` | Verknüpfung zum Benutzer | Identifikationsdaten |
|
||||
| `date` | Datum des Arbeitstages (Format: YYYY-MM-DD) | Zeitstempel |
|
||||
| `start_time` | Arbeitsbeginn (Format: HH:MM) | Zeitstempel |
|
||||
| `end_time` | Arbeitsende (Format: HH:MM) | Zeitstempel |
|
||||
| `pause_start_time` | Pausenbeginn (Format: HH:MM, optional) | Zeitstempel |
|
||||
| `pause_end_time` | Pausenende (Format: HH:MM, optional) | Zeitstempel |
|
||||
| `break_minutes` | Pausenzeit in Minuten | Arbeitszeitdaten |
|
||||
| `total_hours` | Berechnete Gesamtarbeitszeit in Stunden | Arbeitszeitdaten |
|
||||
| `activity1_desc` bis `activity5_desc` | Beschreibung der Tätigkeit (bis zu 5 pro Tag) | Tätigkeitsdaten |
|
||||
| `activity1_hours` bis `activity5_hours` | Stunden für die jeweilige Tätigkeit | Tätigkeitsdaten |
|
||||
| `activity1_project_number` bis `activity5_project_number` | Projektnummer für die jeweilige Tätigkeit | Projektbezogene Daten |
|
||||
| `notes` | Freitext-Notizen zum Arbeitstag | Tätigkeitsdaten |
|
||||
| `overtime_taken_hours` | Verbrauchte Überstunden an diesem Tag | Arbeitszeitdaten |
|
||||
| `vacation_type` | Urlaubstyp ("full" = ganzer Tag, "half" = halber Tag, null = kein Urlaub) | Arbeitszeitdaten |
|
||||
| `sick_status` | Krankheitsstatus (0 = nicht krank, 1 = krank) | Gesundheitsdaten |
|
||||
| `weekend_travel` | Wochenend-Reise (0 = nein, 1 = ja) | Arbeitszeitdaten |
|
||||
| `applied_weekend_percentage` | Angewendeter Wochenend-Prozentsatz für Berechnung | Arbeitszeitdaten |
|
||||
| `status` | Status des Eintrags ("offen", "eingereicht") | Metadaten |
|
||||
| `created_at` | Zeitstempel der Erstellung | Metadaten |
|
||||
| `updated_at` | Zeitstempel der letzten Änderung | Metadaten |
|
||||
|
||||
### 4.3 Wochenstundenzettel (Tabelle: `weekly_timesheets`)
|
||||
|
||||
| Datenfeld | Beschreibung | Kategorie |
|
||||
|-----------|--------------|-----------|
|
||||
| `id` | Eindeutige Stundenzettel-ID | Identifikationsdaten |
|
||||
| `user_id` | Verknüpfung zum Benutzer | Identifikationsdaten |
|
||||
| `week_start` | Startdatum der Woche (Format: YYYY-MM-DD) | Zeitstempel |
|
||||
| `week_end` | Enddatum der Woche (Format: YYYY-MM-DD) | Zeitstempel |
|
||||
| `version` | Versionsnummer des Stundenzettels (bei Änderungen) | Metadaten |
|
||||
| `version_reason` | Grund für die neue Version (Freitext) | Metadaten |
|
||||
| `status` | Status ("eingereicht", "bearbeitet") | Metadaten |
|
||||
| `submitted_at` | Zeitstempel der Einreichung | Metadaten |
|
||||
| `reviewed_by` | ID des prüfenden Verwaltungsmitarbeiters | Identifikationsdaten |
|
||||
| `reviewed_at` | Zeitstempel der Prüfung | Metadaten |
|
||||
| `pdf_downloaded_at` | Zeitstempel des PDF-Downloads | Metadaten |
|
||||
| `pdf_downloaded_by` | ID des Benutzers, der das PDF heruntergeladen hat | Identifikationsdaten |
|
||||
| `admin_comment` | Kommentar der Verwaltung zum Stundenzettel | Metadaten |
|
||||
|
||||
### 4.4 IP-basierte Zeiterfassung (Tabelle: `ping_status`)
|
||||
|
||||
| Datenfeld | Beschreibung | Kategorie |
|
||||
|-----------|--------------|-----------|
|
||||
| `user_id` | Verknüpfung zum Benutzer | Identifikationsdaten |
|
||||
| `date` | Datum (Format: YYYY-MM-DD) | Zeitstempel |
|
||||
| `last_successful_ping` | Zeitstempel des letzten erfolgreichen Pings | Technische Daten |
|
||||
| `failed_ping_count` | Anzahl fehlgeschlagener Pings | Technische Daten |
|
||||
| `start_time_set` | Flag, ob Start-Zeit bereits gesetzt wurde (0/1) | Technische Daten |
|
||||
| `first_failed_ping_time` | Zeitstempel des ersten fehlgeschlagenen Pings | Technische Daten |
|
||||
|
||||
### 4.5 LDAP-Synchronisation (Tabelle: `ldap_sync_log`)
|
||||
|
||||
| Datenfeld | Beschreibung | Kategorie |
|
||||
|-----------|--------------|-----------|
|
||||
| `id` | Eindeutige Log-ID | Identifikationsdaten |
|
||||
| `sync_type` | Typ der Synchronisation ("manual" oder "automatic") | Metadaten |
|
||||
| `status` | Status ("success", "error") | Metadaten |
|
||||
| `users_synced` | Anzahl synchronisierter Benutzer | Metadaten |
|
||||
| `error_message` | Fehlermeldung bei Fehlern (optional) | Metadaten |
|
||||
| `sync_started_at` | Zeitstempel des Synchronisationsbeginns | Metadaten |
|
||||
| `sync_completed_at` | Zeitstempel des Synchronisationsendes | Metadaten |
|
||||
|
||||
**LDAP-Konfiguration (Tabelle: `ldap_config`):**
|
||||
Diese Tabelle enthält keine personenbezogenen Daten, sondern nur technische Konfigurationsdaten für die LDAP-Verbindung.
|
||||
|
||||
**LDAP-Synchronisierte Daten:**
|
||||
Bei aktivierter LDAP-Integration werden folgende Daten aus dem Active Directory synchronisiert:
|
||||
- `username` (sAMAccountName)
|
||||
- `firstname` (givenName)
|
||||
- `lastname` (sn)
|
||||
|
||||
### 4.6 Session-Daten (Express-Session)
|
||||
|
||||
| Datenfeld | Beschreibung | Speicherdauer |
|
||||
|-----------|--------------|---------------|
|
||||
| `userId` | ID des angemeldeten Benutzers | 24 Stunden (Standard) oder 30 Tage (bei "Angemeldet bleiben") |
|
||||
| `roles` | Array der Benutzerrollen | 24 Stunden (Standard) oder 30 Tage (bei "Angemeldet bleiben") |
|
||||
| `currentRole` | Aktuell ausgewählte Rolle | 24 Stunden (Standard) oder 30 Tage (bei "Angemeldet bleiben") |
|
||||
|
||||
**Cookie-Informationen:**
|
||||
- Cookie-Name: `connect.sid`
|
||||
- Speicherort: Client-Browser
|
||||
- Verschlüsselung: Session-Daten werden serverseitig gespeichert, Cookie enthält nur Session-ID
|
||||
|
||||
### 4.7 Systemdaten (keine personenbezogenen Daten)
|
||||
|
||||
**Tabelle: `public_holidays`**
|
||||
- `date`: Feiertagsdatum
|
||||
- `name`: Name des Feiertags
|
||||
|
||||
**Tabelle: `system_options`**
|
||||
- `saturday_percentage`: Prozentsatz für Samstagsarbeit
|
||||
- `sunday_percentage`: Prozentsatz für Sonntagsarbeit
|
||||
- `checkin_root_url`: Basis-URL für Check-in/Check-out Links
|
||||
|
||||
---
|
||||
|
||||
## 5. Datenquellen
|
||||
|
||||
Die personenbezogenen Daten stammen aus folgenden Quellen:
|
||||
|
||||
1. **Direkte Eingabe durch Mitarbeiter**: Zeiterfassungsdaten, Tätigkeitsbeschreibungen, Projektnummern, Notizen
|
||||
2. **Automatische Erfassung**: IP-basierte Zeiterfassung (optional, wenn `ping_ip` konfiguriert ist)
|
||||
3. **LDAP/Active Directory**: Bei aktivierter LDAP-Integration werden Benutzername, Vorname und Nachname aus dem Active Directory synchronisiert
|
||||
4. **Administrative Eingabe**: Personalnummer, Wochenstunden, Urlaubstage, Überstunden-Offset, Urlaubstage-Offset durch Verwaltung/Admin
|
||||
5. **Automatische Berechnung**: Gesamtstunden, Überstunden werden automatisch aus den eingegebenen Daten berechnet
|
||||
6. **Systemgeneriert**: IDs, Zeitstempel (created_at, updated_at), Session-Daten
|
||||
|
||||
---
|
||||
|
||||
## 6. Empfänger der Daten
|
||||
|
||||
Die personenbezogenen Daten werden folgenden Empfängern zugänglich gemacht:
|
||||
|
||||
### 6.1 Interne Empfänger
|
||||
|
||||
- **Mitarbeiter**: Zugriff auf eigene Zeiterfassungsdaten über das Dashboard
|
||||
- **Verwaltungsmitarbeiter**: Zugriff auf alle eingereichten Stundenzettel zur Prüfung und PDF-Generierung
|
||||
- **Administratoren**: Vollzugriff auf alle Daten zur Systemverwaltung und Benutzerverwaltung
|
||||
- **IT-Administration**: Technischer Zugriff für Wartung und Support (nur bei Bedarf)
|
||||
|
||||
### 6.2 Externe Empfänger
|
||||
|
||||
- **Lohnbuchhaltung**: PDF-Stundenzettel werden für die Lohnabrechnung verwendet (manueller Export)
|
||||
- **Steuerberater/Wirtschaftsprüfer**: Bei Prüfungen können Daten eingesehen werden (gemäß gesetzlichen Aufbewahrungspflichten)
|
||||
|
||||
### 6.3 Keine Weitergabe an Dritte
|
||||
|
||||
Die Daten werden nicht an Dritte (außerhalb der oben genannten Empfänger) weitergegeben. Es erfolgt keine Datenweitergabe an:
|
||||
- Externe Dienstleister (außer bei expliziter Auftragsverarbeitung)
|
||||
- Marketing-Unternehmen
|
||||
- Soziale Netzwerke
|
||||
- Andere Unternehmen
|
||||
|
||||
---
|
||||
|
||||
## 7. Speicherdauer und Löschung
|
||||
|
||||
### 7.1 Speicherdauer
|
||||
|
||||
Die personenbezogenen Daten werden für folgende Zeiträume gespeichert:
|
||||
|
||||
- **Zeiterfassungsdaten**: Mindestens 10 Jahre gemäß § 257 HGB (Aufbewahrungspflicht für Handelsbücher und Belege)
|
||||
- **Lohnabrechnungsrelevante Daten**: 10 Jahre gemäß § 147 AO (Abgabenordnung)
|
||||
- **Benutzerdaten**: Solange der Mitarbeiter im Unternehmen beschäftigt ist, danach gemäß Aufbewahrungspflichten
|
||||
- **Session-Daten**: Werden automatisch nach Ablauf der Cookie-Laufzeit gelöscht (24 Stunden oder 30 Tage)
|
||||
- **LDAP-Sync-Logs**: 1 Jahr (technische Logs)
|
||||
|
||||
### 7.2 Löschung
|
||||
|
||||
Die Löschung erfolgt:
|
||||
- **Automatisch**: Session-Daten nach Ablauf der Cookie-Laufzeit
|
||||
- **Manuell**: Bei Beendigung des Arbeitsverhältnisses, jedoch unter Beachtung der gesetzlichen Aufbewahrungspflichten
|
||||
- **Auf Anfrage**: Gemäß den Betroffenenrechten (siehe Abschnitt 8), soweit keine gesetzlichen Aufbewahrungspflichten entgegenstehen
|
||||
|
||||
**Hinweis**: Auch nach Beendigung des Arbeitsverhältnisses können Daten aufgrund gesetzlicher Aufbewahrungspflichten (HGB, AO) nicht sofort gelöscht werden. Nach Ablauf der Aufbewahrungsfristen erfolgt die Löschung.
|
||||
|
||||
---
|
||||
|
||||
## 8. Betroffenenrechte
|
||||
|
||||
Jede betroffene Person hat folgende Rechte nach der DSGVO:
|
||||
|
||||
### 8.1 Auskunftsrecht (Art. 15 DSGVO)
|
||||
|
||||
Sie haben das Recht, Auskunft über die zu Ihrer Person gespeicherten Daten zu erhalten. Dies umfasst:
|
||||
- Kategorien der verarbeiteten Daten
|
||||
- Zweck der Verarbeitung
|
||||
- Empfänger der Daten
|
||||
- Geplante Speicherdauer
|
||||
- Herkunft der Daten
|
||||
|
||||
### 8.2 Recht auf Berichtigung (Art. 16 DSGVO)
|
||||
|
||||
Sie haben das Recht, die Berichtigung unrichtiger oder die Vervollständigung unvollständiger Daten zu verlangen.
|
||||
|
||||
### 8.3 Recht auf Löschung (Art. 17 DSGVO)
|
||||
|
||||
Sie haben das Recht, die Löschung Ihrer Daten zu verlangen, sofern:
|
||||
- Die Daten für den ursprünglichen Zweck nicht mehr benötigt werden
|
||||
- Sie Ihre Einwilligung widerrufen haben
|
||||
- Die Daten unrechtmäßig verarbeitet wurden
|
||||
- Keine gesetzlichen Aufbewahrungspflichten entgegenstehen
|
||||
|
||||
**Wichtig**: Aufgrund gesetzlicher Aufbewahrungspflichten (HGB, AO) können Zeiterfassungsdaten für 10 Jahre nicht gelöscht werden.
|
||||
|
||||
### 8.4 Recht auf Einschränkung der Verarbeitung (Art. 18 DSGVO)
|
||||
|
||||
Sie haben das Recht, die Einschränkung der Verarbeitung zu verlangen, wenn:
|
||||
- Die Richtigkeit der Daten bestritten wird
|
||||
- Die Verarbeitung unrechtmäßig ist
|
||||
- Die Daten nicht mehr benötigt werden, aber für Rechtsansprüche erforderlich sind
|
||||
|
||||
### 8.5 Recht auf Datenübertragbarkeit (Art. 20 DSGVO)
|
||||
|
||||
Sie haben das Recht, Ihre Daten in einem strukturierten, gängigen und maschinenlesbaren Format zu erhalten und an einen anderen Verantwortlichen zu übermitteln.
|
||||
|
||||
### 8.6 Widerspruchsrecht (Art. 21 DSGVO)
|
||||
|
||||
Sie haben das Recht, der Verarbeitung Ihrer Daten zu widersprechen, wenn die Verarbeitung auf Art. 6 Abs. 1 lit. f DSGVO (Berechtigtes Interesse) beruht.
|
||||
|
||||
**Hinweis**: Da die Zeiterfassung primär zur Erfüllung arbeitsvertraglicher und gesetzlicher Verpflichtungen erfolgt, ist ein Widerspruch in der Regel nicht möglich.
|
||||
|
||||
### 8.7 Widerruf der Einwilligung (Art. 7 Abs. 3 DSGVO)
|
||||
|
||||
Falls die Datenverarbeitung auf einer Einwilligung beruht, haben Sie das Recht, diese jederzeit zu widerrufen.
|
||||
|
||||
### 8.8 Beschwerderecht (Art. 77 DSGVO)
|
||||
|
||||
Sie haben das Recht, eine Beschwerde bei einer Aufsichtsbehörde einzulegen, insbesondere in dem Mitgliedstaat, in dem Sie sich aufhalten, arbeiten oder in dem der mutmaßliche Verstoß aufgetreten ist.
|
||||
|
||||
**Zuständige Aufsichtsbehörde:**
|
||||
Der Landesbeauftragte für den Datenschutz und die Informationsfreiheit Baden-Württemberg
|
||||
[Adresse]
|
||||
[E-Mail]
|
||||
[Telefon]
|
||||
|
||||
### 8.9 Ausübung der Rechte
|
||||
|
||||
Um Ihre Rechte auszuüben, wenden Sie sich bitte an:
|
||||
|
||||
Carsten Graf
|
||||
Mechatronik-Ingenieur / IT-Infrastruktur
|
||||
SDS Systemtechnik
|
||||
[E-Mail]
|
||||
[Telefon]
|
||||
|
||||
---
|
||||
|
||||
## 9. Technische und organisatorische Maßnahmen (TOM)
|
||||
|
||||
Zur Gewährleistung der Datensicherheit wurden folgende technische und organisatorische Maßnahmen implementiert:
|
||||
|
||||
### 9.1 Zugriffskontrolle
|
||||
|
||||
- **Authentifizierung**: Passwort-basierte Authentifizierung mit bcrypt-Hashing (10 Runden)
|
||||
- **Autorisierung**: Rollenbasierte Zugriffskontrolle (Mitarbeiter, Verwaltung, Admin)
|
||||
- **Session-Management**: Express-Session mit serverseitiger Speicherung, Session-IDs in verschlüsselten Cookies
|
||||
- **Automatische Abmeldung**: Session-Cookies laufen nach 24 Stunden (Standard) oder 30 Tagen (bei "Angemeldet bleiben") ab
|
||||
|
||||
### 9.2 Verschlüsselung
|
||||
|
||||
- **Passwörter**: Bcrypt-Hashing mit Salt (10 Runden)
|
||||
- **Datenübertragung**: Empfohlen wird die Verwendung von HTTPS (TLS/SSL) über einen Reverse Proxy (z.B. nginx)
|
||||
- **Datenbank**: SQLite-Datenbankdatei sollte auf einem gesicherten Server gespeichert werden
|
||||
|
||||
### 9.3 Datensicherung
|
||||
|
||||
- **Backups**: Regelmäßige Backups der SQLite-Datenbankdatei (`stundenerfassung.db`)
|
||||
- **Backup-Speicherung**: Backups sollten an einem separaten, gesicherten Ort gespeichert werden
|
||||
|
||||
### 9.4 Integrität
|
||||
|
||||
- **Datenbank-Constraints**: Foreign Keys und Constraints zur Gewährleistung der Datenintegrität
|
||||
- **Validierung**: Eingabevalidierung auf Server- und Client-Seite
|
||||
- **Versionierung**: Versionsverwaltung bei Stundenzetteln zur Nachvollziehbarkeit von Änderungen
|
||||
|
||||
### 9.5 Verfügbarkeit
|
||||
|
||||
- **Server-Monitoring**: Überwachung der Server-Verfügbarkeit
|
||||
- **Fehlerbehandlung**: Umfassende Fehlerbehandlung und Logging
|
||||
|
||||
### 9.6 Trennbarkeit
|
||||
|
||||
- **Datenbank-Isolation**: Jeder Benutzer kann nur auf seine eigenen Daten zugreifen (außer Verwaltung/Admin)
|
||||
- **Rollenbasierte Ansichten**: Unterschiedliche Ansichten je nach Benutzerrolle
|
||||
|
||||
### 9.7 Pseudonymisierung
|
||||
|
||||
- **Benutzer-IDs**: Interne Verwendung von numerischen IDs statt Namen für Datenbankverknüpfungen
|
||||
- **Session-IDs**: Verwendung von zufälligen Session-IDs statt direkter Benutzeridentifikation in Cookies
|
||||
|
||||
---
|
||||
|
||||
## 10. Besondere Verarbeitungssituationen
|
||||
|
||||
### 10.1 IP-basierte automatische Zeiterfassung
|
||||
|
||||
**Funktionsweise:**
|
||||
- Mitarbeiter können optional eine IP-Adresse (`ping_ip`) hinterlegen
|
||||
- Das System pingt diese IP-Adresse jede Minute
|
||||
- Bei erfolgreichem Ping wird automatisch die Start-Zeit gesetzt
|
||||
- Bei 3 fehlgeschlagenen Pings wird automatisch die End-Zeit gesetzt
|
||||
|
||||
**Erfasste Daten:**
|
||||
- IP-Adresse des Mitarbeiters (freiwillig hinterlegt)
|
||||
- Ping-Status (erfolgreich/fehlgeschlagen)
|
||||
- Zeitstempel der Pings
|
||||
- Automatisch generierte Start- und End-Zeiten
|
||||
|
||||
**Rechtsgrundlage:** Art. 6 Abs. 1 lit. b DSGVO (Vertragserfüllung) - Erfassung der Arbeitszeit
|
||||
|
||||
**Hinweis:** Die IP-Adresse wird nur für die automatische Zeiterfassung verwendet und nicht an Dritte weitergegeben.
|
||||
|
||||
### 10.2 LDAP/Active Directory Integration
|
||||
|
||||
**Funktionsweise:**
|
||||
- Optional kann eine LDAP/Active Directory-Verbindung konfiguriert werden
|
||||
- Benutzer werden automatisch oder manuell aus dem Active Directory synchronisiert
|
||||
- Synchronisierte Daten: Benutzername, Vorname, Nachname
|
||||
|
||||
**Rechtsgrundlage:** Art. 6 Abs. 1 lit. b DSGVO (Vertragserfüllung) - Bereitstellung des Systems für Mitarbeiter
|
||||
|
||||
**Hinweis:** Die LDAP-Konfiguration (URL, Bind-DN, Passwort) wird verschlüsselt in der Datenbank gespeichert. Die Synchronisation erfolgt nur innerhalb des Unternehmensnetzwerks.
|
||||
|
||||
### 10.3 PDF-Generierung
|
||||
|
||||
**Funktionsweise:**
|
||||
- Verwaltungsmitarbeiter können PDF-Stundenzettel generieren
|
||||
- PDFs enthalten alle Zeiterfassungsdaten einer Woche
|
||||
- PDFs werden für die Lohnabrechnung verwendet
|
||||
|
||||
**Enthaltene Daten:**
|
||||
- Mitarbeitername und Personalnummer
|
||||
- Zeitraum (Woche)
|
||||
- Alle Tageseinträge mit Start, Ende, Pause, Stunden
|
||||
- Tätigkeiten mit Projektnummern
|
||||
- Überstunden, Urlaub, Feiertage
|
||||
- Gesamtstundensumme
|
||||
|
||||
**Rechtsgrundlage:** Art. 6 Abs. 1 lit. b DSGVO (Vertragserfüllung) - Lohnabrechnung
|
||||
|
||||
**Hinweis:** PDFs werden nur intern verwendet und nicht an Dritte weitergegeben (außer Lohnbuchhaltung).
|
||||
|
||||
### 10.4 QR-Code Check-in/Check-out
|
||||
|
||||
**Funktionsweise:**
|
||||
- Jeder Mitarbeiter erhält einen persönlichen QR-Code
|
||||
- QR-Code enthält die Benutzer-ID
|
||||
- Scan des QR-Codes führt zu Check-in oder Check-out
|
||||
|
||||
**Erfasste Daten:**
|
||||
- Benutzer-ID (aus QR-Code)
|
||||
- Zeitstempel des Scans
|
||||
- Automatisch gesetzte Start- oder End-Zeit
|
||||
|
||||
**Rechtsgrundlage:** Art. 6 Abs. 1 lit. b DSGVO (Vertragserfüllung) - Erfassung der Arbeitszeit
|
||||
|
||||
---
|
||||
|
||||
## 11. Datenübertragung in Drittländer
|
||||
|
||||
**Aktuell erfolgt keine Datenübertragung in Drittländer.**
|
||||
|
||||
Alle Daten werden auf Servern innerhalb der Europäischen Union (EU) oder des Europäischen Wirtschaftsraums (EWR) gespeichert und verarbeitet.
|
||||
|
||||
Falls in Zukunft eine Datenübertragung in Drittländer erforderlich sein sollte, wird dies nur unter Einhaltung der DSGVO-Anforderungen (z.B. Standardvertragsklauseln, Angemessenheitsbeschluss) erfolgen.
|
||||
|
||||
---
|
||||
|
||||
## 12. Automatisierte Entscheidungsfindung und Profiling
|
||||
|
||||
**Es erfolgt keine automatisierte Entscheidungsfindung (Art. 22 DSGVO) oder Profiling.**
|
||||
|
||||
Die automatische Berechnung von Arbeitszeiten und Überstunden dient lediglich der Unterstützung der manuellen Prüfung durch die Verwaltung und stellt keine automatisierte Entscheidung dar.
|
||||
|
||||
---
|
||||
|
||||
## 13. Änderungen dieser Dokumentation
|
||||
|
||||
Diese DSGVO-Dokumentation wird bei Änderungen der Datenverarbeitung aktualisiert. Die aktuelle Version ist immer im System verfügbar.
|
||||
|
||||
**Letzte Aktualisierung:** [Datum]
|
||||
|
||||
**Version:** 1.0
|
||||
|
||||
---
|
||||
|
||||
## 14. Anhang: Datenbank-Schema-Übersicht
|
||||
|
||||
### Tabellen mit personenbezogenen Daten:
|
||||
|
||||
1. **users**: Benutzerdaten, Authentifizierung, Arbeitszeitkonfiguration
|
||||
2. **timesheet_entries**: Tageseinträge mit Zeiten, Tätigkeiten, Projektnummern
|
||||
3. **weekly_timesheets**: Eingereichte Wochenstundenzettel
|
||||
4. **ping_status**: IP-basierte Zeiterfassungsdaten
|
||||
5. **ldap_sync_log**: Synchronisationsprotokolle (enthält Anzahl synchronisierter Benutzer)
|
||||
|
||||
### Tabellen ohne personenbezogene Daten:
|
||||
|
||||
1. **public_holidays**: Feiertage (Baden-Württemberg)
|
||||
2. **system_options**: Systemweite Einstellungen
|
||||
3. **ldap_config**: LDAP-Konfiguration (keine personenbezogenen Daten)
|
||||
|
||||
---
|
||||
|
||||
**Ende der DSGVO-Dokumentation**
|
||||
285
doc/README.md
Normal file
285
doc/README.md
Normal file
@@ -0,0 +1,285 @@
|
||||
# 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.
|
||||
110
doc/SCHNELLSTART.md
Normal file
110
doc/SCHNELLSTART.md
Normal file
@@ -0,0 +1,110 @@
|
||||
# Schnellstart-Anleitung
|
||||
|
||||
## Installation in 3 Schritten
|
||||
|
||||
### 1. Projekt entpacken
|
||||
Entpacken Sie das Projekt-Archiv in einen beliebigen Ordner auf Ihrem Server.
|
||||
|
||||
### 2. Dependencies installieren
|
||||
Öffnen Sie ein Terminal/Kommandozeile im Projekt-Ordner und führen Sie aus:
|
||||
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
Dies installiert alle benötigten Pakete:
|
||||
- express (Webserver)
|
||||
- sqlite3 (Datenbank)
|
||||
- bcryptjs (Passwort-Verschlüsselung)
|
||||
- express-session (Session-Verwaltung)
|
||||
- ejs (Template Engine)
|
||||
- pdfkit (PDF-Generierung)
|
||||
- body-parser (Request-Verarbeitung)
|
||||
|
||||
### 3. Server starten
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
Die Anwendung ist nun unter `http://localhost:3000` erreichbar.
|
||||
|
||||
## Erster Login
|
||||
|
||||
### Als Administrator
|
||||
- URL: `http://localhost:3000`
|
||||
- Benutzername: `admin`
|
||||
- Passwort: `admin123`
|
||||
|
||||
Nach dem Login können Sie:
|
||||
- Neue Mitarbeiter anlegen
|
||||
- Rollen vergeben (Mitarbeiter, Verwaltung, Admin)
|
||||
- Benutzer verwalten
|
||||
|
||||
### Als Verwaltung
|
||||
- URL: `http://localhost:3000`
|
||||
- Benutzername: `verwaltung`
|
||||
- Passwort: `verwaltung123`
|
||||
|
||||
Nach dem Login können Sie:
|
||||
- Eingereichte Stundenzettel einsehen
|
||||
- PDFs erstellen und herunterladen
|
||||
|
||||
## Wichtige Hinweise
|
||||
|
||||
⚠️ **Passwörter ändern!**
|
||||
Bitte ändern Sie die Standard-Passwörter nach der ersten Anmeldung!
|
||||
|
||||
⚠️ **Firewall-Einstellungen**
|
||||
Stellen Sie sicher, dass Port 3000 in Ihrer Firewall geöffnet ist, falls Sie von anderen Computern darauf zugreifen möchten.
|
||||
|
||||
⚠️ **Produktiv-Einsatz**
|
||||
Für den Produktiv-Einsatz empfehlen wir:
|
||||
- HTTPS verwenden (z.B. mit nginx als Reverse Proxy)
|
||||
- Starke Passwörter verwenden
|
||||
- Regelmäßige Backups der Datenbank erstellen
|
||||
|
||||
## Port ändern
|
||||
|
||||
Falls Port 3000 bereits belegt ist, können Sie den Port ändern:
|
||||
|
||||
1. Öffnen Sie `server.js`
|
||||
2. Ändern Sie die Zeile `const PORT = 3000;` auf den gewünschten Port
|
||||
3. Speichern und Server neu starten
|
||||
|
||||
## Datenbank-Speicherort
|
||||
|
||||
Die SQLite-Datenbank wird automatisch als `stundenerfassung.db` im Projekt-Verzeichnis erstellt.
|
||||
|
||||
**Backup erstellen:**
|
||||
Kopieren Sie einfach die Datei `stundenerfassung.db` an einen sicheren Ort.
|
||||
|
||||
## Problemlösung
|
||||
|
||||
### Server startet nicht
|
||||
- Prüfen Sie, ob Port 3000 bereits belegt ist
|
||||
- Prüfen Sie, ob Node.js installiert ist: `node --version`
|
||||
- Prüfen Sie, ob alle Dependencies installiert sind: `npm install`
|
||||
|
||||
### Login funktioniert nicht
|
||||
- Löschen Sie die Datei `stundenerfassung.db` und starten Sie den Server neu
|
||||
- Die Datenbank wird dann mit den Standard-Benutzern neu erstellt
|
||||
|
||||
### PDF-Download funktioniert nicht
|
||||
- Prüfen Sie die Browser-Konsole auf Fehler
|
||||
- Stellen Sie sicher, dass Popups für die Seite erlaubt sind
|
||||
|
||||
## Workflow
|
||||
|
||||
1. **Admin** legt neue Mitarbeiter an
|
||||
2. **Mitarbeiter** melden sich an und erfassen ihre Stunden
|
||||
3. Mitarbeiter sehen ihre Woche (Montag-Sonntag)
|
||||
4. Einträge werden automatisch beim Ausfüllen gespeichert
|
||||
5. Am Ende der Woche: "Woche abschicken" klicken
|
||||
6. **Verwaltung** sieht eingereichte Stundenzettel im Postfach
|
||||
7. Verwaltung kann PDFs erstellen und herunterladen
|
||||
|
||||
## Support
|
||||
|
||||
Bei Fragen oder Problemen:
|
||||
- Prüfen Sie die ausführliche README.md
|
||||
- Kontaktieren Sie Ihre IT-Abteilung
|
||||
22
doc/Stundenregeln.txt
Normal file
22
doc/Stundenregeln.txt
Normal file
@@ -0,0 +1,22 @@
|
||||
- Standarterfassung: (Ende - Start ) - Pause
|
||||
|
||||
- Überstunden nehmen
|
||||
- Wenn Überstunden eingetragen > (Wochenarbeitszeit / Arbeitstage) -> Muss noch Start und Ende und Pause eingetragen werden
|
||||
- Wenn Überstunden = (Wochenarbeitszeit / Arbeitstage) -> Tag als ausgefüllt zu betrachten
|
||||
- Wird nur für die anzeige benötigt
|
||||
- Stunden werden (Ende - Start ) - Pause berechnet.
|
||||
|
||||
- Urlaub
|
||||
- Wird als ausgefüllt betrachtet wenn ganzer Urlaubstag
|
||||
- Wenn halber Urlaubstag muss (Ende - Start ) - Pause eingetragen werden.
|
||||
- Stunden werden als (Wochenarbeitszeit / Arbeitstage) gerechnet wenn ganzer Tag
|
||||
- Wenn halber tag Ulaub ((Wochenarbeitszeit / Arbeitstage) / 2) zur ((Ende - Start ) - Pause) addiert
|
||||
- Wird von Verbleibendem Urlaub abgezogen
|
||||
|
||||
- Krank
|
||||
- Wird als ausgefüllt betrachtet
|
||||
- Stunden werden als (Wochenarbeitszeit / Arbeitstage) gerechnt
|
||||
|
||||
- Feiertage
|
||||
- Wird als ausgefüllt betrachtet
|
||||
- Stunden werden als (Wochenarbeitszeit / Arbeitstage) gerechnet
|
||||
17
doc/Stunderfassung todo.txt
Normal file
17
doc/Stunderfassung todo.txt
Normal file
@@ -0,0 +1,17 @@
|
||||
- Mitarbeiter Name in den QR code Sheets -> DONE
|
||||
- Pause vorbelegen (einstellbar in der Admin) -> DONE Wird anhand der Gesetztlichen vorgaben berechnet
|
||||
- Offset für die Verwaltung für Urlaubstage -> DONE
|
||||
- Stunden pro Tag und wie viele Tage arbeit -> DONE
|
||||
- Reisen für Wochenende -> DONE
|
||||
- LDAP Prüfung -> DONE GEHT?!
|
||||
- DSGVO Sicherheit -> DONE
|
||||
- Feiertage müssen als ausgefüllt zählen -> DONE
|
||||
- Mitarbeiter sollen PDF ansehen können. -> DONE
|
||||
- Wenn bereits heruntergeladen wurde und neue version da ist Meldung an Verwaltung. -> DONE Muss getestet werden
|
||||
- Wenn ganzer Tag Urlaub gesetzt wird steht erst 8h (Urlaub) und dann nur noch 8h
|
||||
|
||||
- Feiertage im PDF anzeigen -> DONE
|
||||
- Oben wenn woche eingereicht anzeigen als hilfestellung -> DONE
|
||||
- Ausgefüllte Tage anhand der Tage pro woche gültig setzten -> DONE Testen
|
||||
- Überstunden müssen anhand der Tagesstunden auch auf gültig setzten (Tag ausgefüllt wenn weniger als 8h) -> DONE sollte passen
|
||||
- Verplante Urlaubstage müssen auf abgezogen werden, wenn die Woche die gepalnt war eingereicht wurde. -> DONE Testen
|
||||
Reference in New Issue
Block a user