Einfache und gesetzeskonforme Arbeitszeiterfassung nach dem österreichischen Arbeitszeitgesetz (AZG).
- Tägliche Arbeitszeit mit Beginn, Ende und Pausen
- Zuordnung zu Baustellen und Kunden
- Automatische Berechnung der Netto-Arbeitszeit
- Notizen und Anfahrtszeiten
- Pausenvalidierung (§11 AZG): Warnung bei zu kurzer Pause (>6h = min. 30min Pause)
- Tägliche Arbeitszeit (§9 AZG):
- Warnung bei >10 Stunden
- Verletzung bei >12 Stunden
- Wöchentliche Arbeitszeit (§9 AZG):
- Warnung bei >48 Stunden
- Verletzung bei >60 Stunden
- Konfigurierbare Pausenregeln
- Konfigurierbare Soll-Arbeitszeit (Woche/Monat)
- Trennung von Normalstunden und Überstunden
- Wochen- und Monatsstatistiken
- Hash-verkettetes Protokoll aller Änderungen (Blockchain-ähnlich)
- CREATE, UPDATE, DELETE und VALIDATION-Ereignisse
- IP-Adressen-Tracking
- Integritätsprüfung der Hash-Kette
- Rechtskonformer CSV-Export
- Übersicht aller AZG-Verstöße und Warnungen
- Filter nach Mitarbeiter und Zeitraum
- Statistiken (Gesamt/Kritisch/Warnungen)
- CSV-Export aller Zeiteinträge
- PDF-Zeitnachweis zum Drucken
- Audit-Log Export mit Integritätsnachweis
- Mitarbeiter-Verwaltung mit sicheren Passwörtern
- Kunden- und Baustellen-Stammdaten
- Einstellbare Arbeitszeit-Parameter
- Backend: Node.js + Express
- Datenbank: SQLite (Standard) oder PostgreSQL
- Frontend: Vanilla JavaScript (Single Page App)
- Hosting: PM2, Docker oder Cloudflare Tunnel
# Image bauen
docker build -t arbeitszeit:latest .
# Container starten
docker run -d -p 3000:3000 -v ./data:/data arbeitszeit:latestAutomatisches Deployment mit Cloudflare Tunnels für isolierte Kundeninstanzen:
# Neuen Kunden anlegen (interaktiv, erfordert cloudflared login)
./provision.sh kundenname
# Mit Demo-Daten
./provision.sh demo --with-dummydata
# Mit API Token (vollautomatisch)
export CLOUDFLARE_API_TOKEN=xxx
export CLOUDFLARE_ACCOUNT_ID=xxx
./provision.sh kundenname --with-dummydataJeder Kunde erhält:
- Isolierten Docker-Container
- Eigene SQLite-Datenbank
- HTTPS via Cloudflare Tunnel (
az-<kunde>.strali.solutions)
Siehe DOCKER.md für vollständige Dokumentation.
# Dependencies installieren
npm install
# Server starten
npm start
# Oder mit PM2
pm2 start server.js --name arbeitszeit| Variable | Standard | Beschreibung |
|---|---|---|
PORT |
3000 | Server-Port |
DATABASE_PATH |
./arbeitszeit.db | SQLite-Datenbankpfad |
DB_TYPE |
sqlite | Datenbank-Backend (sqlite oder postgres) |
DB_HOST |
localhost | PostgreSQL Host |
DB_PORT |
5432 | PostgreSQL Port |
DB_NAME |
arbeitszeit | PostgreSQL Datenbankname |
DB_USER |
postgres | PostgreSQL Benutzer |
DB_PASSWORD |
- | PostgreSQL Passwort |
Für detaillierte PostgreSQL-Konfiguration und Migration siehe DATABASE.md.
# SQLite → PostgreSQL migrieren
node migrate-db.js --from sqlite --to postgres --verbosePOST /api/login- AnmeldenPOST /api/logout- Abmelden
GET /api/zeiteintraege- Eigene EinträgePOST /api/zeiteintraege- Neuer Eintrag (mit Validierung)PUT /api/zeiteintraege/:id- Eintrag bearbeitenDELETE /api/zeiteintraege/:id- Eintrag löschen
GET /api/admin/zeiteintraege- Alle EinträgeGET /api/admin/mitarbeiter- Mitarbeiter verwaltenGET /api/admin/verstoesse- AZG-Verstöße abrufenGET /api/admin/audit- Audit-LogGET /api/admin/audit/verify- Integrität prüfenGET /api/admin/audit/export- Audit-Export
MIT License - siehe LICENSE