# 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 ## Installation & Ausführung ### Repository klonen ```bash git clone https://gitea.fx-se.de/maggot/timetracker.git cd timetracker ``` ### Option 1: Mit Docker Compose (Empfohlen) **Voraussetzungen:** - Docker und Docker Compose installiert **Starten:** ```bash docker-compose up -d ``` **Logs ansehen:** ```bash docker-compose logs -f ``` **Stoppen:** ```bash docker-compose down ``` **Stoppen und Daten löschen:** ```bash docker-compose down -v ``` Die Anwendung läuft auf: ``` http://localhost:3000 ``` ### Option 2: Mit Docker (manuell) **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. ### Option 3: Lokale Ausführung (ohne Docker) **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 ``` ## 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