Darstellung
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 überrapport_entry_id. source∈ {manual,whatsapp};recorded_by_user_idfü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_typefiltern; Altspalten aus Migration 001 (break_minutes,activity_type,approved_by_id,tags) bleiben teils ungenutzt; Auto-Close hängt amstart-all.js-Cron-Runner.