Un problème de vérité unique
La gestion des absences échoue toujours au même endroit : il n’existe pas d’état unique et fiable.
Le solde est dans un tableur, mis à jour par quelqu’un quand il y pense. Les demandes sont dans des messages, validées par des réponses du type « ok pour moi ». Le planning est ailleurs. La paie reconstitue à partir de tout cela.
Les conséquences sont prévisibles.
Le solde contesté. Un salarié compte différemment de l’employeur. La discussion est désagréable et personne n’a tort de bonne foi, parce que les deux comptent à partir de sources différentes.
Le conflit de planning découvert tard. Deux personnes de la même équipe absentes la même semaine, constaté quinze jours avant, quand les billets sont pris.
La demande oubliée. Envoyée à un responsable en déplacement, jamais validée, et le salarié part en supposant que c’était accepté.
La reconstitution en paie, chaque mois, à partir de sources dispersées.
Aucun de ces problèmes n’est un problème de logiciel manquant. C’est un problème de source de vérité, et c’est exactement ce qu’une automatisation installe.
Ce qu’on automatise
La demande, depuis un canal simple, avec le solde disponible affiché au moment où la personne remplit.
Le contrôle. Solde, délai de prévenance, jours imposés, période de fermeture, règles d’effectif, chevauchements.
L’acheminement vers le bon valideur, avec relance et escalade.
La mise à jour des agendas, du planning d’équipe et du tableau d’absence partagé.
Le décompte selon vos règles, en temps réel.
Les alertes. Soldes qui vont expirer, congés à poser avant une échéance, compteurs anormaux.
L’export de paie consolidé.
La vue d’équipe. Qui est absent quand, visible par tous, sans motif.
Comment ça marche techniquement — pour qui veut le détail
Le modèle de données. Un journal de mouvements plutôt qu’un solde stocké : acquisitions, prises, annulations, reports, régularisations, chacune une ligne horodatée et motivée. Le solde est la somme du journal à une date. Ce choix est ce qui permet de répondre à « pourquoi mon solde est-il de 12,5 » en affichant le détail, et de recalculer l’historique après correction d’une règle sans avoir rien perdu. Un solde stocké et mis à jour est une garantie de divergence à terme.
Les règles d’acquisition. Paramétrées par type de compteur, avec une date d’effet : période de référence, rythme d’acquisition, plafond, règles de report, jours de fractionnement et d’ancienneté. La convention collective et les accords d’entreprise se traduisent en règles datées — un accord qui change au 1er janvier ne doit pas modifier rétroactivement les compteurs de l’année écoulée, ce qui suppose que chaque règle porte sa période de validité.
Le décompte. En jours ouvrés ou ouvrables selon votre convention, avec un calendrier de jours fériés paramétrable — et les particularités locales, comme les jours supplémentaires en Alsace-Moselle, qui sont une source classique d’erreur. Les demi-journées se modélisent proprement en stockant des demi-unités plutôt qu’en bricolant des fractions.
Les chevauchements et l’effectif. Les périodes d’absence sont des daterange en PostgreSQL. Une contrainte d’exclusion GIST empêche qu’un salarié ait deux absences qui se chevauchent — au niveau de la base, pas du code. Le contrôle d’effectif est une requête d’agrégation sur intervalles : pour chaque jour de la période demandée, compter les présents de l’équipe et comparer au minimum requis. Évaluée à la saisie, elle donne un retour immédiat.
La concurrence. Deux demandes simultanées qui, ensemble, violeraient l’effectif minimum mais que chacune isolément respecterait : c’est le cas que les contrôles applicatifs naïfs laissent passer. La validation s’exécute dans une transaction au niveau d’isolation sérialisable, ou avec un verrou consultatif sur l’équipe concernée. Sans cela, le contrôle est une illusion dès qu’il y a plus d’un utilisateur.
Le circuit de validation. Machine à états explicite, table d’échéances pour les relances consommée par un travailleur régulier via FOR UPDATE SKIP LOCKED, escalade au niveau supérieur après un délai. Un valideur absent a un suppléant déclaré — règle qui paraît évidente et qui manque dans la plupart des organisations, ce qui bloque les demandes pendant les congés du responsable, situation particulièrement ironique.
Les agendas. Publication en CalDAV ou via Microsoft Graph d’un calendrier d’absences d’équipe, sans motif, avec les événements portant un UID stable pour que modification et annulation mettent à jour plutôt que de dupliquer. Chacun voit qui est absent, personne ne voit pourquoi.
Les données de santé. Le schéma ne comporte aucun champ de motif médical, de diagnostic ou de nature d’arrêt. Un type d’absence « arrêt de travail » et des dates suffisent au décompte et à la paie. Le justificatif, s’il est déposé, est stocké chiffré avec un accès restreint à la personne habilitée et une durée de conservation courte, et sa consultation est journalisée. C’est un point où l’absence de champ vaut mieux que n’importe quelle politique d’accès.
L’export paie. Format attendu par le logiciel ou le cabinet, avec période, compteurs, éléments variables et identifiants stables. L’export est rejouable et idempotent : le regénérer ne crée pas de doublon, ce qui est indispensable quand une correction arrive après un premier envoi.