Zum Inhalt springen

Cookpit / Timbrage Zeiterfassung

Falls Ihr Campingplatz Cookpit (Timbrage) zum Stempeln der Arbeitszeiten einsetzt, holt dieser Adapter die Stempelereignisse alle 15 Minuten in das Zeiterfassungs-Modul von CampOne. Lohnabrechnungs-fertige Summen, ohne Doppelerfassung.

Falls Sie Cookpit nicht einsetzen, liefert CampOne ein eigenes Stempel-Widget auf dem Tagesdashboard mit — die Mitarbeitenden tippen beim Eintreffen auf “Einstempeln” und beim Verlassen auf “Ausstempeln”; die nachgelagerten Auswertungen sind in beiden Fällen identisch.

  • Abruf der Stempelereignisse aus Cookpit alle 15 Minuten (idempotent — wiederholte Läufe erzeugen keine Duplikate)
  • Speicherung in der Tabelle TimeEntry neben manuellen Einträgen
  • Separate Erfassung von Korrekturen (jedes PATCH erzeugt eine Audit-Zeile TimeEntryAdjustment)
  • Zeitsummen pro Person mit Datumsfilter
  • Ein Einstempeln/Ausstempeln-Widget auf dem Dashboard für jeden Mandanten

Cookpit betreibt kein öffentliches Entwicklerportal — Sie nehmen direkt Kontakt auf:

Was Sie anfragen sollten:

  1. Den technischen API-Vertrag (wir gehen aktuell von GET /api/v1/clock-events mit Header X-API-Key aus)
  2. Einen Sandbox-Mandanten und einen API-Schlüssel für einen Pilot-Standort
  3. Bestätigung der Basis-URL (unsere derzeitige Annahme: https://api-test.cookpit.ch)
  4. Die Position zum Push-Modus: Akzeptiert Cookpit eingehende Schichten von uns, oder ist die Anbindung nur lesend?

Eine vorgefertigte E-Mail-Vorlage liegt unter docs-internal/handoffs/integrations-outreach-emails.md.

Einstellungen → Integrationen → Anbieter-Adapter → Cookpit:

FeldBeschreibung
UmgebungTest / Production
Standort-IDCookpits Kennung Ihres Campingplatzes
API-SchlüsselDer pro Mandant ausgestellte Token
Benutzer-ZuordnungEin JSON-Objekt, das Cookpit-Benutzer-IDs auf CampOne-Benutzer-IDs abbildet, z. B. {"cookpit_42": 17, "cookpit_43": 22}

Klicken Sie auf Speichern und dann auf Verbindung prüfen.

Alle 15 Minuten fragt eine Celery-Aufgabe Cookpit: “Gibt es neue Stempelereignisse seit dem letzten Cursor?”. Für jedes gefundene Ereignis:

  1. Die Cookpit-Benutzer-ID in der Benutzer-Zuordnung nachschlagen, um den CampOne-Benutzer zu finden.
  2. Ist der Benutzer nicht zugeordnet, wird das Ereignis übersprungen und protokolliert (so können Sie ihn nachpflegen und den Lauf wiederholen).
  3. Einen TimeEntry mit dem Schlüssel (tenant, source='cookpit', external_ref) anlegen oder aktualisieren. Wiederholte Importe sind idempotent.
  4. Den Cursor weitersetzen, damit der nächste Lauf nur neue Ereignisse abruft.

Das Integrationsprotokoll zeigt, wie viele Ereignisse pro Lauf importiert wurden.

Das Dashboard-Widget legt TimeEntry-Zeilen mit source='manual' an. Gleiche Datenstruktur, gleiche Auswertungen. Führt ein Standort später Cookpit ein, schalten Sie auf der Karte um — alte manuelle Einträge bleiben erhalten.

Mandanten-Administratoren dürfen jeden TimeEntry bearbeiten (z. B. ein vergessenes Ausstempeln nachtragen). Jede Bearbeitung erzeugt eine TimeEntryAdjustment-Zeile mit Vorher/Nachher-Schnappschuss und der ändernden Person — ein vollständiger Audit-Trail bei Streitfällen rund um die Lohnabrechnung.

  • Das Senden von Schichten an Cookpit ist als Roadmap-Punkt vermerkt — der Adapter wirft NotImplementedError, bis Cookpit den eingehenden Vertrag bestätigt.
  • Der Cookpit-API-Vertrag ist derzeit aus den üblichen Mustern in der Zeiterfassung abgeleitet; rechnen Sie mit einer kleinen Anpassung in services/client.py, sobald der Anbieter die genaue Antwortstruktur bestätigt.
  • VCR-aufgezeichnete Tests gegen die echte Cookpit-Sandbox kommen, sobald Zugangsdaten vorliegen.