Skip to content

Absences ​

Une absence dit qu'une personne ne travaillait pas un jour donné : un congé, un arrêt maladie, ou autre chose. Elle sert à juger les heures d'une semaine : 28 heures sur une semaine avec un jour de congé, ce n'est pas un manque.

Une ligne par jour ​

Le manager enregistre une période (du lundi 5 au vendredi 9), mais l'API garde une ligne par jour dans la table absences. Les écrans regroupent ensuite les jours qui se suivent.

Pourquoi une ligne par jour ? Les autres règles raisonnent par jour : une semaine validée bloque des jours, l'objectif de la semaine baisse par jour d'absence. Supprimer un seul jour d'une période devient aussi une simple suppression de ligne.

ChampContenu
datele jour
kindleave (congé), sick (maladie) ou other
recorded_by_id, recorded_by_namele manager qui l'a enregistrée (le nom est une copie, qui survit à la suppression de son compte)

Jamais de motif

L'API ne garde que le type, jamais la raison d'une absence. Une donnée médicale n'a rien à faire dans un outil de pointage : c'est une protection des employés que le sujet demande.

Les règles ​

RègleErreur
Seuls les jours de semaine (lundi au vendredi) de la période sont enregistrés422 no_weekday si la période n'en a aucun
La fin n'est pas avant le début422 before_start
Une période fait 31 jours au plus : une erreur de saisie (une année au lieu d'une semaine) reste limitée422 too_long (max: 31)
Un jour n'a qu'une absence par personneindex unique absences_user_id_date_index
Enregistrer : les managers de la personne, ou le GM, jamais soi (comme les heures)403
Aucun jour de la période dans une semaine validée409 week_validated

Tout ou rien : si un seul jour de la période est refusé (déjà absent, semaine validée), aucun n'est enregistré. Toute la période est écrite dans une seule transaction.

Ce qu'une absence change ​

  • L'objectif de la semaine baisse de 7 heures par jour d'absence (35 heures pour une semaine complète) : c'est le tableau de bord qui en tient compte.
  • Une absence n'est pas du temps travaillé : elle ne compte jamais dans les heures supplémentaires.
  • La personne reçoit une notification (cloche et e-mail).

Les routes ​

RouteEffet
GET /api/users/:id/absences?start=…&end=…les absences d'une personne (période facultative)
POST /api/users/:id/absencesenregistrer une période : {"absence": {"start_date", "end_date", "kind"}}
DELETE /api/absences/:idsupprimer un jour

Fichiers : lib/timemanager/absences.ex et lib/timemanager/absences/absence.ex.