| alle 3 Minuten, docs/hetzner-migration-runbook.md:463 belegt | Scan-Postfach-Poller (Cron) | cron (externer Zeitplan, kein Webhook) | Büro — eine Sammelmeldung pro Lauf für neue Scan-Eingänge, plus Warnung bei Mails ohne verwertbaren Anhang | nein — legt neue Belege an, hat keinen Job-Bezug | Live |
| alle 30 Sekunden (docs/DEPLOYMENT.md:112-120: ein minütlicher Cron ruft ihn zweimal mit 30s Pause dazwischen auf) | Mail-Outbox-Worker (Cron) | fällige Warteschlangen-Einträge (max. 10 je Lauf); zusätzlich ein Reaper, der seit über 5 Minuten hängende Einträge zurücksetzt | niemanden direkt — bei endgültigem Fehlschlag (8 Versuche) wird der zugehörige Vorgang (z.B. ein Dokument) als fehlgeschlagen markiert und im Aktivitätsprotokoll festgehalten | n/a — die Warteschlange hat keinen Auftragsbezug, der gefiltert werden müsste | Live |
| alle 5 Minuten, bestätigt durch die Server-Crontab | Überzogen-Erkennung (Cron) | Aufträge im Status "gebucht" oder "in Bearbeitung", deren geplantes Ende mehr als 5 Minuten in der Vergangenheit liegt; importierte COMPOS-Altaufträge/-Termine sind ausgenommen | niemanden direkt — der Statuswechsel selbst macht den Auftrag in den Listen als überzogen sichtbar | nein — kein Treffer auf "vaulted"; betrifft in der Praxis aber nur laufende, nicht archivierte Aufträge | Live |
| empfohlen 1×/Tag (Kopfkommentar), tatsächliche Crontab-Zeile nicht gefunden | Vault-Sweep — Archivierung alter Aufträge (Cron) | cron (externer Zeitplan; Probelauf per einfachem Aufruf, Echtlauf nur mit eigenem Zusatzparameter) | niemanden | ist die Vaultung selbst — setzt vaulted_at; ein separater Sicherheitsparameter verhindert versehentliches scharfes Ausführen | Live |
| empfohlen alle 15 Minuten (Kopfkommentar), damit das 60-Minuten-Zeitfenster lückenlos abgedeckt wird | WhatsApp-Termin-Erinnerung (Cron) | cron (prüft je Lauf ein Zeitfenster rund um „Termin in einer Stunde") | Kunde — per WhatsApp-Link, tatsächlich aktuell ausschließlich per E-Mail | nein — kein Treffer im Code | Teilweise |
| externer OS-Cron, konkrete Crontab-Zeile nicht gefunden | Zulassungsschein-Aufräumung (Cron) | cron (externer Zeitplan) | niemanden | nein — löscht unabhängig vom Vault-Status | Live |
| geplant 1×/Tag früh (docs/plan/hetzner-deploy-prompt-20260614.md:73), tatsächliche Crontab-Zeile nicht verifiziert; zusätzlich montags der Wochen- und am 1. des Monats der Monatscheck | Umsatzziel-Erinnerung (Cron) | cron (externer Zeitplan) | Büro — In-App-Meldung ohne Zielrolle, sichtbar für alle Büro-Rollen; die zugehörigen Zahlen liegen erst hinter der Statistik-Ansicht | nein — wertet Kassenbuch-Summen aus, kein Bezug zu einzelnen Aufträgen | Live |
| geplant täglich um 3:45 Uhr (Bearer-Auth), laut Audit vom 2026-08-24 aber nicht zuverlässig aktiv — nur von Hand über die Oberfläche ausgelöst | Konsistenz-Prüfung (Cron) | zehn feste Prüfregeln gegen die Datenbank, z.B. Auftrag ohne Kunde, doppelte Bühnenbelegung, abgerechnet ohne Freigabe, Lücke in der Belegnummernkette | niemanden per Mail — Befunde landen in der Störungsliste, ein nicht gespeicherter Befund meldet sich als eigener Fehler | nicht geprüft — die Prüfregeln laufen über eigene SQL-Abfragen, nicht über den üblichen Datenzugriff | Teilweise |
| geplant täglich um 7:00 Uhr (laut Deploy-Plan), laut Audit vom 2026-08-24 aber nicht zuverlässig aktiv; Parameter ?leadDays= steuert den Vorlauf (Standard 7 Tage) | Erinnerungs-Dispatch (Cron) | rund elf unabhängige Quellen: Service fällig, Reifen abholen/abrechnen, eigene Aufgaben, Geburtstag, Feiertage, Pickerl/§57a, Fahrzeugverträge, Saison-Reifenwechsel, Mahnwesen, Akonto-Restbetrag | Büro immer In-App, zusätzlich E-Mail/Push je nach Quelle konfiguriert; Kunden teils per WhatsApp-Link statt direktem Versand | teilweise — nur die Akonto-Erinnerung filtert erkennbar auf "vaulted"; bei den übrigen Quellen kein Treffer im gelesenen Code | Teilweise |
| kein Cron — wirkt sofort bei jedem versuchten Statuswechsel, ausgeloest von Buero, Kunde, Werkstatt oder anderen Automatisierungen | Auftragsstatus (Ablauf eines Auftrags) | Buero/Chef im Admin (Kalender-Statusmenue, Auftragsdetail, Kontroll-Gate), Kunde per Freigabe-Link im Kundenportal (Kundenfreigabe), die Fertigmeldung am Mechaniker-Tablet, Rechnungslegung sowie automatische Erkennungen wie die Ueberzogen-Erkennung | niemanden direkt per Mail oder Push — jeder tatsaechliche Wechsel landet im Aktivitaets-Verlauf des Auftrags | unklar — die gelesene Uebergangsfunktion selbst prueft nicht auf vaulted, das koennte ausschliesslich Sache der Leselisten sein | Live |
| laufend/ereignisgesteuert, kein Cron-Takt | Benachrichtigungen: Push, Aktivitäts-Log & Live-Ansicht | system (ein Ereignis wie eine Statusänderung löst die Glocke aus), user action (Wiedervorlage anlegen/erledigen) | Büro und Werkstatt über die In-App-Glocke (rollengefiltert), zusätzlich Push falls eingerichtet | unklar — für die Wiedervorlagen/Aktivitäten selbst hier nicht geprüft | Teilweise |
| täglich um 00:05 Wien-Zeit (Kopfkommentar) — bewusst 5 Minuten nach Mitternacht, damit die Zeitumstellung im Frühjahr/Herbst den Lauf nicht verpasst | Tageswechsel (Cron) | cron (externer Zeitplan) | niemanden | nein — betrifft nur aktive, noch nicht abgerechnete Aufträge | Live |
| Täglich um 3:15 Uhr, externer OS-Cron auf dem Server | DSGVO-Aufbewahrungsfristen (Cron) | Kunden-/Fahrzeugdatensätze, deren jüngster steuerlicher Beleg die 7-Jahres-Frist überschreitet, sowie abgelaufene Einwilligungen, alte Zulassungsschein-Scans und liegen gebliebene KI-Uploads | niemanden per Mail — liefert nur einen Bericht in der Antwort des Aufrufs | nein — im gelesenen Code kein Treffer auf "vaulted"; die Sperre läuft stattdessen über die fiskalische Spur (abgerechnete Aufträge/Rechnungsempfänger werden übersprungen) | Teilweise |
| unklar — Code-Kommentar nennt nur 'z.B. nächtlich via externen Scheduler', kein fester Zeitpunkt im Repo hinterlegt | KI-Gedächtnis-Verdichtung (Cron) | cron (externer Scheduler ruft die Route auf, kein Klick im Büro) | niemand direkt — die neuen Karten liegen als Entwurf zur späteren Durchsicht bereit, es geht keine eigene Meldung raus | teilweise — nur die Auftragsmuster-Karten filtern im Code sichtbar auf nicht-archivierte Aufträge, bei den anderen beiden Verdichtungen ist das nicht zu erkennen | Live |
| unklar — Kopfkommentar empfiehlt 1–2 Minuten, tatsächliche Crontab-Zeile nicht gefunden | RepDoc-Abgleich (Cron) | cron (externer Zeitplan ruft die Route auf, kein Webhook) | niemanden — keine Benachrichtigung im Code gefunden | nein — kein Treffer im Code, Abgleich prüft nur Zahlungsstatus des Angebots | Teilweise |
| unklar — Route läuft per Cron-Aufruf (Bearer/CRON_SECRET) oder Admin-Cookie, kein fester Zeitpunkt im gelesenen Code | Morgen-Briefing (Cron) | cron (externer Aufruf mit Geheimwort oder mit einer Büro-Sitzung, die das Recht ''Berichte einsehen'' hat) | Büro und Chef mit dem Recht 'Berichte einsehen' — als In-App-Meldung mit Sprung zum Assistenten | ja (indirekt) — nutzt dieselben Lese-Werkzeuge wie der reguläre Bot-Meister-Chat, für die Hausregel 2 gilt; hier nicht einzeln nachgeprüft | Live |
| Werktags (Mo-Fr) um 10:00 Uhr, externer OS-Cron auf dem Server | Nachbestell-Erinnerung (Cron) | mindestens ein Artikel im Teile-Katalog liegt unter seinem hinterlegten Mindestbestand | eine einzige In-App-Sammel-Benachrichtigung fürs Büro (höchstens einmal pro Tag, solange die letzte noch ungelesen ist), kein Mailversand | n/a — der Teile-Katalog hat kein Archiv-Feld | Live |
| Werktags (Mo-Fr) um 10:15 Uhr, externer OS-Cron auf dem Server | Lieferschein-Erinnerung (Cron) | Lieferscheine, die seit 5 Tagen erfasst, aber noch nicht als erledigt markiert sind | In-App-Benachrichtigung im Büro-Panel je betroffenem Lieferschein, kein Mailversand | n/a — Lieferscheine haben kein eigenes Archiv-Feld, der Zugriff auf die ganze Funktion ist bereits über den Vault gesperrt | Live |
| Werktags (Mo-Fr) um 18:00 Uhr, externer OS-Cron auf dem Server | Tagesabschluss-Erinnerung (Cron) | Heutige Aufträge, deren Status noch nicht "abgerechnet" ist (importierte COMPOS-Alttermine ausgenommen); zusätzlich zwei unabhängige Herzschlag-Prüfungen | Büro-Postfach per Sammelmail; zusätzlich zwei separate In-App-Warnungen an den Inhaber, falls das Scan-Postfach über 6 Stunden oder die Mail-Warteschlange über 2 Stunden nicht bearbeitet wurde | nein — im gelesenen Code kein Treffer auf "vaulted" | Live |
| Werktags (Mo-Fr) um 9:00 Uhr, externer OS-Cron auf dem Server (crontab "0 9 * * 1-5") | Rechnungs-Erinnerung (Cron) | Aufträge mit Status "fertig", deren Fertigstellung länger als 24 Stunden zurückliegt | Büro-Postfach per Sammelmail (eine Mail mit allen betroffenen Aufträgen), kein Kundenkontakt | nein — im gelesenen Code kein Treffer auf "vaulted" | Live |
| Werktags (Mo-Fr) um 9:30 Uhr, externer OS-Cron auf dem Server | Mahnvorschläge (Cron) | Rechnungen, deren aktuelle Mahnstufe fällig für die nächste Stufe ist | In-App-Benachrichtigung im Büro-Panel mit Link zur Rechnungsliste, kein Mailversand | ja — j.vaulted_at IS NULL in lib/db/dunning.ts | Live |