""" Einheitliche Startzeit-Normalisierung für Aktivität (CSV, Legacy-Import, Dedupe). Anbieter-agnostisch: beliebige ISO-/Export-Strings über dateutil. """ from __future__ import annotations from datetime import time as dt_time from typing import Optional from dateutil import parser as du_parser def normalize_activity_start(start_raw: str) -> tuple[str, Optional[dt_time]]: """ Roh-String „Start“ aus Exporten → (YYYY-MM-DD, TIME ohne μs) für DB Dedupe/INSERT. Leerer Input → ("", None). Fallback bei Parse-Fehler: erstes Datum aus ersten 10 Zeichen. """ s = (start_raw or "").strip() if not s: return "", None try: parsed = du_parser.parse(s, dayfirst=False) t = parsed.time().replace(microsecond=0) return parsed.date().isoformat(), t except (ValueError, TypeError, OverflowError): if len(s) >= 10: return s[:10], None return "", None