Skip to content

ADR-0004 – time_logs als zentrale Zeitquelle (Personal- + Projektzeit)

Status

Accepted (Migrationen 040/041, Mitte 2026).

Kontext

Zeit entsteht in Work7 an mehreren Stellen: Anwesenheit (Kommen/Gehen), Live-Stoppuhr, manuelle Nachträge, Kalender-Kopplung und auf Projekte gebuchte Leistungsstunden (für Rapport/Abrechnung). Eine fragmentierte Modellierung (getrennte Tabellen je Quelle) hätte Aggregation, WhatsApp-Erfassung und Abrechnung erschwert.

Entscheidung

Eine zentrale Tabelle time_logs mit Diskriminator entry_type ∈ {personal, project} und capture_mode ∈ {manual_hours, live_timer, manual_range, calendar_pair}.

  • Genau ein aktiver Personal-Timer pro (company, user) (Partial-Unique-Index).
  • Eine Projektzeit je (company, user, project, day); 1:1-Verknüpfung zur Rapportzeile über rapport_entry_id.
  • source ∈ {manual, whatsapp}; recorded_by_user_id für Fremderfassung.
  • 12-Stunden-Auto-Close offener Personalzeit per Cron.
  • Idempotenter Backfill aus bestehenden rapport_entries.

Konsequenzen

  • ➕ Einheitliche Aggregation/Reporting; gemeinsame Logik für Web + WhatsApp; klare Brücke Zeit → Rapport → Rechnung; Kalender-come/go direkt verknüpft.
  • ➖ Queries müssen stets entry_type filtern; Altspalten aus Migration 001 (break_minutes, activity_type, approved_by_id, tags) bleiben teils ungenutzt; Auto-Close hängt am start-all.js-Cron-Runner.

Verwandte Notes

Work7 · Software für Handwerksbetriebe