114 lines
3.0 KiB
Markdown
114 lines
3.0 KiB
Markdown
# 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
|