# Zeiterfassung Eine Full-Stack-Zeiterfassungsanwendung, entwickelt mit Node.js, Express, SQLite und containerisiert mit Docker. ## Funktionen - ✅ Erfassung von Arbeitszeiten (Datum, Startzeit, Endzeit) - ✅ Automatische Pausenberechnung nach deutschem Arbeitszeitgesetz - ✅ Maximum von 10 Stunden Nettoarbeitszeit - ✅ Filterung nach Zeitraum - ✅ CSV-Export mit deutscher Formatierung - ✅ Responsive Benutzeroberfläche mit Tailwind CSS - ✅ Moderner Datums-/Zeitauswahl (Flatpickr) - ✅ Docker-Containerisierung ## Technologie-Stack - **Backend**: Node.js, Express.js - **Datenbank**: SQLite (better-sqlite3) - **Frontend**: Vanilla JavaScript, HTML, Tailwind CSS - **Containerisierung**: Docker ## Projektstruktur ``` /zeiterfassung ├── public/ │ ├── index.html # Hauptbenutzeroberfläche │ └── app.js # Frontend-Logik ├── db/ │ └── schema.sql # Datenbankschema ├── server.js # Express-Server mit API-Endpunkten ├── Dockerfile # Multi-Stage Docker Build ├── package.json └── README.md ``` ## Deutsche Pausenregelung Die Anwendung berechnet automatisch die Pausenzeiten gemäß deutschem Arbeitszeitgesetz: - **> 6 Stunden Arbeitszeit**: 30 Minuten Pause werden abgezogen - **> 9 Stunden Arbeitszeit**: 45 Minuten Pause werden abgezogen - **Nettostunden sind auf maximal 10,0 Stunden begrenzt** ## API-Endpunkte - `GET /api/entries?from=YYYY-MM-DD&to=YYYY-MM-DD` - Alle Einträge im Zeitraum abrufen - `POST /api/entries` - Neuen Eintrag erstellen - `PUT /api/entries/:id` - Bestehenden Eintrag aktualisieren - `DELETE /api/entries/:id` - Eintrag löschen - `GET /api/export?from=YYYY-MM-DD&to=YYYY-MM-DD` - Einträge als CSV exportieren ## Lokale Ausführung ### Voraussetzungen - Node.js 18+ installiert ### Installation 1. Abhängigkeiten installieren: ```bash npm install ``` 2. Server starten: ```bash npm start ``` 3. Browser öffnen und navigieren zu: ``` http://localhost:3000 ``` ## Ausführung mit Docker ### Docker-Image erstellen: ```bash docker build -t zeiterfassung . ``` ### Container starten: ```bash docker run -p 3000:3000 -v $(pwd)/db:/app/db zeiterfassung ``` Das `-v` Flag bindet das Datenbankverzeichnis ein, um Daten zwischen Container-Neustarts zu erhalten. ### Anwendung aufrufen: ``` http://localhost:3000 ``` ## CSV-Export-Format Die exportierte CSV-Datei enthält folgende Spalten: - **Datum**: Datum im Format TT.MM.JJJJ - **Startzeit**: Startzeit im Format HH:MM - **Endzeit**: Endzeit im Format HH:MM - **Pause in Minuten**: Pausenzeit in Minuten - **Gesamtstunden**: Nettostunden mit Komma als Dezimaltrennzeichen (z.B. 8,50) ## Entwicklung Die Anwendung verwendet: - **Flatpickr** für die Datums- und Zeitauswahl mit mobilfreundlichen Oberflächen - **Tailwind CSS** für das Styling (geladen über CDN) - **SQLite** für leichtgewichtige, dateibasierte Datenpersistenz - Alle Berechnungen werden serverseitig durchgeführt, um die Datenintegrität zu gewährleisten ## Lizenz MIT