# 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
