Aller au contenu

Suivi du temps Cookpit / Timbrage

Si votre camping utilise Cookpit (Timbrage) pour le pointage du personnel, cet adaptateur récupère ces événements dans le module de suivi du temps de CampOne toutes les 15 minutes. Des totaux prêts pour la paie, sans double saisie.

Si vous n’utilisez pas Cookpit, CampOne propose un widget de pointage intégré au tableau de bord quotidien — le personnel clique sur « Pointage entrée » à l’arrivée, « Pointage sortie » au départ, et les mêmes rapports en aval fonctionnent.

  • Récupération des pointages depuis Cookpit toutes les 15 minutes (idempotente — les ré-exécutions ne créent pas de doublons)
  • Stockage dans la table TimeEntry de CampOne, à côté des saisies manuelles
  • Suivi distinct des ajustements (chaque PATCH écrit une ligne d’audit TimeEntryAdjustment)
  • Récapitulatifs de temps par utilisateur, avec filtres par date
  • Un widget de pointage entrée / sortie côté personnel, sur le tableau de bord, pour tout tenant

Cookpit ne publie pas de portail développeur public — le contact est direct :

Ce qu’il faut leur demander :

  1. Le contrat technique de l’API (nous partons aujourd’hui sur GET /api/v1/clock-events avec en-tête X-API-Key)
  2. Un tenant bac à sable + une clé API pour un site pilote
  3. La confirmation de l’URL de base (https://api-test.cookpit.ch est notre meilleure hypothèse actuelle)
  4. Leur position sur la pousse : acceptent-ils des shifts entrants depuis chez nous, ou s’agit-il uniquement de pull ?

Un modèle d’e-mail prêt à envoyer se trouve dans docs-internal/handoffs/integrations-outreach-emails.md.

Réglages → Intégrations → Adaptateurs fournisseurs → Cookpit :

ChampDescription
EnvironmentTest / Production
Location IDL’identifiant Cookpit de votre camping
API keyLe jeton délivré par Cookpit, par tenant
User mappingUn objet JSON associant les identifiants utilisateur Cookpit aux utilisateurs CampOne, par ex. {"cookpit_42": 17, "cookpit_43": 22}

Cliquez sur Save, puis sur Test connection.

Toutes les 15 minutes, une tâche Celery interroge Cookpit : « de nouveaux pointages depuis le dernier curseur ? ». Pour chaque événement trouvé :

  1. Recherche de l’identifiant utilisateur Cookpit dans votre user mapping pour obtenir l’utilisateur CampOne.
  2. Si l’utilisateur n’est pas mappé, l’événement est ignoré et journalisé (vous pouvez ensuite le mapper et relancer).
  3. Création ou mise à jour d’une TimeEntry indexée sur (tenant, source='cookpit', external_ref). Les ré-imports sont idempotents.
  4. Mise à jour du curseur pour que la prochaine récupération ne ramène que les nouveaux événements.

Le journal d’intégration affiche le nombre d’événements importés à chaque récupération.

Le widget du tableau de bord crée des lignes TimeEntry avec source='manual'. Même structure de données, mêmes rapports en aval. Si un site adopte Cookpit plus tard, vous activez la bascule sur cette carte ; les anciennes saisies manuelles restent intactes.

Les administrateurs du tenant peuvent éditer n’importe quelle TimeEntry (par ex. corriger un pointage de sortie oublié). Chaque modification écrit une ligne TimeEntryAdjustment avec un instantané avant / après et l’utilisateur à l’origine du changement — piste d’audit complète pour les litiges de paie.

  • La pousse de shifts vers Cookpit est documentée comme un point de feuille de route — l’adaptateur lève NotImplementedError jusqu’à ce que Cookpit confirme le contrat entrant.
  • Le contrat de l’API Cookpit est aujourd’hui inféré à partir des schémas habituels du suivi du temps ; attendez-vous à un petit ajustement de services/client.py lorsque l’éditeur confirmera la forme exacte des réponses.
  • Des tests enregistrés en VCR contre le bac à sable Cookpit réel seront ajoutés dès réception des identifiants.