3.0 KiB
3.0 KiB
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 abrufenPOST /api/entries- Neuen Eintrag erstellenPUT /api/entries/:id- Bestehenden Eintrag aktualisierenDELETE /api/entries/:id- Eintrag löschenGET /api/export?from=YYYY-MM-DD&to=YYYY-MM-DD- Einträge als CSV exportieren
Lokale Ausführung
Voraussetzungen
- Node.js 18+ installiert
Installation
- Abhängigkeiten installieren:
npm install
- Server starten:
npm start
- Browser öffnen und navigieren zu:
http://localhost:3000
Ausführung mit Docker
Docker-Image erstellen:
docker build -t zeiterfassung .
Container starten:
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