Imprimer Accéder à l'application

📖 Manuel d'Utilisation Complète

Guide exhaustif de l'application de pointage intelligent et de gestion RH — destiné aux administrateurs, pointeurs et direction.

Version 3.0 Mai 2026 Pointage Intelligent Sécurisé
Sommaire — Navigation Rapide

1. Présentation de l'Application

PointagePro est une application web avancée de gestion de pointage et de ressources humaines. Elle permet aux entreprises d'enregistrer les entrées et sorties des employés, de calculer automatiquement les heures travaillées et les salaires, de gérer les congés avec calcul automatique des soldes, et de suivre l'activité via des tableaux de bord détaillés et des rapports analytiques.

L'application est accessible depuis n'importe quel navigateur (ordinateur, tablette, smartphone) et peut être installée comme application mobile grâce à la technologie PWA (Progressive Web App).

Conseil : Pour une expérience optimale, installez l'application sur votre appareil via le bouton d'installation présent sur la page de connexion. Cela permet un accès rapide et un fonctionnement partiellement hors ligne.

Ce que vous pouvez faire avec PointagePro

Pointer les employés

Enregistrer les entrées et sorties avec recherche rapide, validation automatique et snapshot historique.

Gérer les employés

Créer, modifier, consulter les fiches employés avec photos et documents administratifs.

Gérer les congés

Suivi des soldes, prises de congé avec calcul automatique et règles FIFO.

Bilan mensuel

Rapport détaillé des heures et salaires par employé sur une période donnée.

Vision RH

Tableau de bord stratégique avec indicateurs de performance RH, coûts et tendances.

Journal d'audit

Toutes les actions sont tracées et consultables pour un suivi complet et la conformité.

Référentiels

Gestion des villes, services, contrats et jours fériés de l'entreprise.

Gestion des utilisateurs

Création, modification et suppression des comptes utilisateur avec contrôle d'accès.

2. Rôles et Niveaux d'Accès

L'application distingue deux rôles principaux, chacun ayant des droits spécifiques clairement définis :

RôleDescriptionAccès principalRestrictions
Administrateur Accès complet à toutes les fonctionnalités de l'application : création, modification, suppression, consultation, export, configuration. Dashboard, Vision RH, tous les menus de gestion Ne peut pas se supprimer, se désactiver ni se rétrograder lui-même
Pointeur Enregistrement des pointages, consultation de ses propres pointages, modification limitée, accès au tableau de bord réduit. Pointage, historique personnel, profil Ne peut pointer que pour la date du jour ; ne voit que ses propres pointages ; ne peut pas supprimer

Règle importante : Un pointeur ne peut enregistrer des pointages que pour la date du jour et ne peut voir que ses propres enregistrements. Seul l'administrateur peut antidater, modifier ou supprimer des pointages.

3. Authentification et Sécurité des Comptes

3.1 Se connecter

Accessible à l'URL /connexion. Saisissez votre nom d'utilisateur et votre mot de passe, puis cliquez sur "Se connecter".

1

Ouvrez l'application

Rendez-vous sur l'adresse fournie par votre entreprise.

2

Saisissez vos identifiants

Entrez votre nom d'utilisateur et votre mot de passe.

3

Cliquez sur "Se connecter"

Redirection vers le tableau de bord (admin) ou la page de pointage (pointeur).

Connexion réussie
  • Le compteur de tentatives échouées est réinitialisé
  • L'ID de session est régénéré (sécurité)
  • Un nouveau jeton CSRF est généré
  • Pointeur → redirigé vers /pointage/registre
  • Administrateur → redirigé vers /tableau-de-bord
Protection anti-bruteforce
  • Après 5 tentatives échouées, le compte est verrouillé
  • Durée de verrouillage : 15 minutes
  • Les tentatives sur compte verrouillé sont journalisées
  • Le compte reste verrouillé même si les tentatives sont correctes

3.2 Première connexion

Compte par défaut : nom d'utilisateur admin / mot de passe admin123. Changez immédiatement le mot de passe depuis votre profil après la première connexion.

3.3 Se déconnecter

Cliquez sur l'icône de déconnexion dans le menu latéral (desktop) ou l'en-tête (mobile). La session est immédiatement détruite et la page de connexion s'affiche.

3.4 Changer son mot de passe

Accessible via /profil → "Changer le mot de passe".

1

Saisissez votre ancien mot de passe

Vérifié côté serveur via hachage bcrypt.

2

Saisissez le nouveau mot de passe

Minimum 8 caractères, au moins une lettre et un chiffre.

3

Confirmez le nouveau mot de passe

Les deux saisies doivent être identiques.

4. Profil Utilisateur

Accessible à l'URL /profil. Tous les utilisateurs (administrateurs et pointeurs) peuvent consulter et modifier leur profil.

4.1 Fonctionnalités du profil

  • Consultation de vos informations personnelles (nom, username, rôle, date de dernière connexion…)
  • Changement de mot de passe : ancien mot de passe requis, nouveau mot de passe validé côté serveur
  • Déconnexion sécurisée avec validation CSRF

Règle : Chaque utilisateur ne peut gérer que son propre profil. L'administrateur ne peut pas modifier le profil d'un autre utilisateur depuis ce menu.

5. Module Pointage

Le module Pointage est le cœur de l'application. Il permet d'enregistrer les entrées et sorties des employés sur leur lieu de travail avec traçabilité complète et snapshot historique.

Accès : Administrateur Pointeur

5.1 URL et accès

  • /pointage/registre — Interface de pointage principale (recherche + formulaire)
  • /pointage/historique — Historique complet des pointages
  • /pointage/modifier/{id} — Modifier un pointage existant
  • /api/pointage/verifier — API AJAX de vérification en temps réel

5.2 Enregistrer un pointage

Rechercher employé Sélectionner Date & Heure Service Ville Observation Valider
  1. Recherchez l'employé par nom, matricule ou numéro CIN (recherche AJAX dynamique avec résultats en temps réel)
  2. Sélectionnez l'employé dans les résultats
  3. Renseignez la date de travail (pré-remplie avec la date du jour pour les pointeurs), l'heure d'entrée, l'heure et date de sortie (optionnelles), le service, la ville et une observation éventuelle
  4. Validez — une notification toast confirme le succès ou affiche l'erreur

5.3 Règles appliquées au Pointage

Règle P1 — Unicité stricte

Pas de doublon

Impossible d'enregistrer deux pointages identiques (même employé, même jour, même heure, même service et même ville). Vérification AJAX en temps réel.

Règle P2 — Non-chevauchement

Pas de chevauchement horaire

Impossible d'avoir deux pointages dont les horaires se superposent pour le même employé. La vérification s'applique uniquement aux pointages clos (avec heure de sortie renseignée).

Règle P3 — Pas de double entrée

Clôture obligatoire

Si un employé a un pointage sans heure de sortie (ouvert), un nouveau pointage est bloqué. L'utilisateur doit d'abord clôturer le pointage précédent.

Règle P4 — Zéro faute minuit

Pas de traversée de minuit

Un pointage ne peut pas traverser minuit dans un même enregistrement. Créez deux pointages séparés (ex : entrée 22h/sortie 23h59 puis entrée 00h00/sortie 2h).

Règle P5 — Contrainte pointeur

Date du jour uniquement

Un pointeur ne peut enregistrer que pour la date du jour. L'administrateur peut antidater les pointages. Si l'heure de sortie est 00:00, elle est interprétée comme minuit de la même date.

Règle P6 — Snapshot historique

Figeage des données

Au moment du pointage, le système enregistre le taux de salaire, le type de salaire, le nom du service et de la ville en vigueur. Ces valeurs ne changent pas même si les données sont modifiées ultérieurement.

Règle P7 — Coupure à minuit

Interprétation de 00:00

Si l'heure de sortie est 00:00 ou 00:00:00, elle est interprétée comme minuit de la même date (23:59:59 + 1 seconde).

Règle P8 — Verrouillage transactionnel

Protection anti-race-condition

Lors de la création, l'employé est verrouillé en base (SELECT ... FOR UPDATE) pour éviter les doublons en cas de soumission simultanée.

Règle P9 — Restriction pointeur

Modification limitée

Un pointeur ne peut modifier que ses propres pointages du jour. Un administrateur peut modifier tout pointage.

5.4 Consultation de l'historique

URL : /pointage/historique. L'historique des pointages liste tous les enregistrements. Filtres disponibles :

  • Date — Période de début et de fin
  • Service — Filtrer par service
  • Ville — Filtrer par ville
  • Pointeur — Filtrer par utilisateur ayant enregistré (admin uniquement)
  • Recherche textuelle — Par nom d'employé

Règle : Un pointeur ne voit que ses propres enregistrements. L'administrateur voit tous les pointages de tous les utilisateurs.

5.5 Modifier et supprimer un pointage

ActionAdministrateurPointeur
ModifierTous les pointages (date, heure, service, ville, pointeur…)Ses propres pointages du jour uniquement
SupprimerOui — suppression définitive avec traçabilitéNon

5.6 API de vérification

L'URL /api/pointage/verifier permet une vérification AJAX en temps réel de :

  • Déjà pointé : vérifie si un pointage identique existe déjà
  • Chevauchement : détecte les chevauchements horaires avec les pointages clos
  • Pointage ouvert : indique si l'employé a déjà un pointage sans heure de sortie

6. Tableau de Bord

Le tableau de bord est le point d'entrée principal de l'application. Il offre une synthèse en temps réel de l'activité de l'entreprise.

6.1 Vue Administrateur

URL : /tableau-de-bord

Statistiques globales

Nombre d'employés actifs, présents aujourd'hui, en congé, absents non justifiés et alertes (pointages ouverts).

Répartition par service/ville

Visualisation des effectifs actifs et inactifs par service et par ville.

Pointages du jour

Liste des derniers pointages enregistrés aujourd'hui, triés du plus récent.

Absents du jour

Employés sans pointage et sans congé enregistré pour aujourd'hui.

Pointages ouverts

Employés qui ont pointé une entrée mais pas encore de sortie — nécessite une clôture.

6.2 Vue Pointeur (mobile)

Sur mobile, le pointeur voit un résumé simplifié :

  • Total des pointages effectués aujourd'hui
  • Liste détaillée des pointages du jour (ouverts en premier, puis les plus récents)

6.3 Hub Mobile — Sections admin

Sur mobile, le tableau de bord est découpé en hubs spécialisés :

Équipe

Hub de gestion de l'équipe, accès rapide aux employés.

Gestion

Synthèse pointages du jour, demandes de congés du mois, estimation salariale.

Configuration

Accès rapide aux jours fériés et aux paramètres système.

7. Module Employés

Le module Employés permet de gérer l'ensemble de la base de données des employés : création, modification, consultation, activation/désactivation, documents administratifs et génération de badges.

Accès : Administrateur uniquement pour la création/modification/suppression. Les pointeurs ont un accès en consultation.

7.1 Liste des employés

URL : /employes

  • Affichage paginé de tous les employés (100 par page)
  • Recherche par nom, matricule, CIN, téléphone
  • Filtrage par ville, service ou type de contrat
  • Indicateurs : nombre de pointages et congés par employé

7.2 Créer un employé

URL : /employes/creer

Informations personnelles
  • Nom complet
  • Téléphone et email
  • Numéro CIN
  • Situation familiale
  • Photo d'identité (JPG, PNG, WebP)
Informations professionnelles
  • Matricule unique (auto-généré ou saisi)
  • Date d'embauche
  • Poste / Fonction
  • Service, Ville, Contrat
Rémunération
  • Salaire / Taux
  • Type de salaire : Journalier, Heure ou Mensuel
  • Mode de paiement : Espèce, Virement, Chèque
  • RIB / Informations bancaires
  • Numéro CNSS
Documents
  • Upload multiple (contrat, CV, diplômes, etc.)
  • Formats acceptés : JPG, PNG, PDF, DOC, DOCX, XLS, XLSX, CSV
  • Taille maximale : 15 Mo par fichier

7.3 Règles appliquées aux Employés

Règle E1

Unicité du matricule

Chaque employé doit avoir un numéro de matricule unique. Vérification en AJAX et en base de données.

Règle E2

Unicité du CIN

Le numéro de carte d'identité nationale doit être unique dans le système.

Règle E3

Historisation salariale

Un changement de salaire ou de type de salaire est effectif au 1er du mois suivant. L'ancien segment est clôturé avec une date de fin. Les pointages antérieurs conservent l'ancien taux.

Règle E4

Protection contre la suppression

Un employé ne peut pas être supprimé s'il possède des pointages ou des congés. Il doit être désactivé plutôt que supprimé.

Règle E5

Désactivation

La désactivation (actif = 0) masque l'employé des listes actives tout en conservant l'historique complet.

7.4 Fiche employé

URL : /employes/voir/{id}

La fiche employé regroupe toutes les informations :

  • Photo et informations personnelles complètes
  • Documents administratifs téléchargeables
  • Soldes de congés par année
  • Historique des pointages (paginé)
  • Historique des congés

7.5 Modifier un employé

URL : /employes/modifier/{id}

Tous les champs sont modifiables. Règle clé : si le salaire ou le type de salaire est modifié, le changement prend effet au 1er du mois suivant — les pointages antérieurs conservent l'ancien taux grâce à l'historique salarial.

7.6 Badge et QR Code

  • URL badge : /employes/carte/{id}
  • URL QR Code : /employes/qr/{id}

Chaque employé dispose d'une carte d'identification imprimable avec photo et QR code. Utilisée pour : badge papier plastifié, scan rapide via l'application, identification visuelle.

7.7 Activer / Désactiver

Un employé peut être désactivé (il reste dans l'historique mais n'apparaît plus dans les listes actives). Cette action est réservée à l'administrateur. La suppression définitive n'est possible que si l'employé n'a aucun pointage ni congé enregistré.

8. Module Congés

Le module Congés gère l'intégralité du cycle de vie des congés : acquisition automatique des soldes, prises de congé avec calcul FIFO, suivi et historique complet.

Accès : Administrateur uniquement

URL : /conges

8.1 Types de congés

Type de congéImpact sur le soldeDescriptionCouleur
Congé annuel Déduit Congé payé standard, déduit du solde annuel selon la méthode FIFO Vert
Congé maladie Aucun Arrêt maladie, simplement tracé dans l'historique sans consommation de solde Rouge
Avance sur congé Anticipé Congé pris avant acquisition — déduit des acquisitions futures Orange

8.2 Règles appliquées aux Congés

Règle C1

Calcul automatique des soldes

Chaque jour travaillé génère des droits à congé selon le taux d'acquisition paramétrable (par défaut : 0.0577 jour/jour travaillé, soit ~1.5 jour/mois).

Règle C2

Mise à jour quotidienne

Les soldes de congés sont recalculés automatiquement une fois par jour, déclenchés par la première connexion d'un administrateur.

Règle C3

Consommation FIFO

Les jours de congé sont d'abord déduits des années les plus anciennes (First In, First Out). Si le solde est insuffisant, déduction en avance sur l'année en cours.

Règle C4

Pas de chevauchement

Un employé ne peut pas avoir deux congés qui se chevauchent sur la même période.

Règle C5

Validation des dates

La date de fin doit être postérieure ou égale à la date de début. Le nombre de jours ne peut pas dépasser la durée calendaire de la période.

Règle C6

Jours ouvrables

Le calcul exclut automatiquement les dimanches et les jours fériés configurés dans le calendrier.

Règle C7

Verrouillage transactionnel

L'employé est verrouillé en écriture pendant la prise de congé pour garantir l'intégrité du solde (évite les doubles déductions simultanées).

Règle C8

Audit de cohérence

Un audit intégré vérifie que le total des consommations correspond à l'historique des prises. Tout écart supérieur à 0.001 jour est signalé.

8.3 Procédure de prise de congé

Sélectionner employé Période Nombre de jours Type de congé Valider

Le système vérifie automatiquement le chevauchement et le solde disponible avant d'enregistrer.

8.4 Modification et suppression

  • La modification d'un congé recalcule automatiquement la consommation FIFO avec la nouvelle ventilation.
  • La suppression d'un congé rétablit le solde automatiquement par recalcul complet.

9. Bilan Mensuel

Le bilan mensuel est un rapport détaillé qui synthétise, pour chaque employé, les heures travaillées et les salaires calculés sur une période donnée, en utilisant l'historique des taux et types de salaire.

Accès : Administrateur uniquement

URL : /bilan/mensuel

9.1 Filtres disponibles

  • Période : date de début et date de fin
  • Ville : filtrer par ville
  • Service : filtrer par service
  • Contrat : filtrer par type de contrat
  • Recherche textuelle : nom, matricule, CIN

9.2 Colonnes du bilan

ColonneDescription
EmployéNom complet, matricule, CIN
Jours travaillésNombre de jours uniques avec au moins un pointage
Heures totalesSomme des minutes travaillées converties en heures
Salaire théoriqueCalcul basé sur le taux et le type de salaire
Salaire réelSalaire réellement dû selon les règles de l'entreprise
Dates présentesListe des dates où l'employé a pointé

9.3 Calculs salariaux par type

Journalier

Théorique : minutes travaillées × (taux / minutes de base)
Réel : nombre de jours uniques × taux journalier. Un même jour n'est compté qu'une seule fois, même si l'employé a plusieurs pointages.

Horaire

Théorique = Réel : minutes travaillées × (taux horaire / 60). Les deux montants sont identiques.

Mensuel

Réel : salaire fixe complet (même si l'employé n'a pas travaillé tout le mois). Théorique : calculé en prorata journalier avec gestion des augmentations en cours de mois.

9.4 Règles appliquées au Bilan

Règle B1

Taux historique

Le bilan utilise le taux et le type de salaire en vigueur au premier jour de la période demandée, récupérés via l'historique salarial.

Règle B2

Pas de double-compte journalier

Pour les salariés journaliers, un même jour est compté une seule fois, même en cas de pointages multiples (entrée/sortie midi + après-midi).

Règle B3

Jours ouvrables

Les dimanches et jours fériés sont exclus du calcul. Un minimum de 26 jours ouvrables est garanti par période.

Règle B4

Prorata mensuel

En cas d'augmentation en cours de mois, le taux moyen pondéré est calculé jour par jour.

9.5 Estimation de la masse salariale (Vision RH)

Les formules de calcul appliquées :

Journalier

Coût réel = Nombre de jours × Taux journalier

Coût théorique = (Minutes travaillées / Minutes de base) × Taux journalier

Horaire

Coût réel = Coût théorique = (Minutes travaillées / 60) × Taux horaire

Mensuel

Coût réel = Taux mensuel fixe

Coût théorique = (Minutes travaillées / (Jours standards × Minutes de base)) × Taux mensuel

10. Vision RH — Pilotage Stratégique

La Vision RH est un tableau de bord stratégique offrant une vue d'ensemble des indicateurs RH pour la direction.

Accès : Administrateur uniquement

URL : /visionrh

10.1 Indicateurs disponibles

Taux de présence

Camembert : répartition présents / congés / absents (en pourcentage) sur la période.

Courbe des heures

Volume d'heures travaillées par jour sur la période sélectionnée.

Par service

Répartition des heures travaillées par service — Top 10.

Par ville

Répartition des heures travaillées par ville.

Top employés

Classement des employés les plus présents par heures travaillées.

Ponctualité

Taux d'arrivée à l'heure vs retard. Seuil configurable (par défaut : 09:00).

Masse salariale

Estimation du coût total réel et théorique sur la période.

Non pointés

Liste des employés actifs sans pointage aujourd'hui (sans congé justifié).

Sorties oubliées

Pointages sans heure de sortie détectés comme anomalies.

Prévisions congés

Congés à venir dans les prochaines semaines.

Congés en cours

Liste des employés actuellement en congé.

Comparatif

Évolution du volume d'heures par rapport à la période précédente.

10.2 Filtres

Toutes les données de la Vision RH peuvent être filtrées par période (date début et date fin) pour analyser une semaine, un mois ou toute période personnalisée.

10.3 Calcul de la masse salariale

Le module Vision RH calcule une estimation du coût salarial sur la période en appliquant les taux journaliers, horaires ou mensuels selon le type de chaque employé, en distinguant le coût réel (basé sur les jours de présence) et le coût théorique (basé sur les minutes travaillées).

11. Gestion des Villes

Les villes sont des référentiels utilisés pour catégoriser les lieux de travail des employés et affecter les pointages géographiques.

Accès : Administrateur uniquement

URL : /villes

11.1 Actions disponibles

  • Consultation de la liste complète des villes
  • Création d'une nouvelle ville
  • Modification d'une ville existante
  • Suppression d'une ville (si non référencée)
  • Vérification AJAX de l'unicité du nom

11.2 Règles appliquées

Règle V1

Nom unique

Impossible de créer deux villes avec le même nom. Vérification automatique avant enregistrement.

Règle V2

Protection contre la suppression

Impossible de supprimer une ville si elle est utilisée par un service ou un employé. Il faut d'abord supprimer ou reassigner les dépendances.

11.3 Opérations AJAX

L'URL /villes/verifier permet de vérifier en temps réel si un nom de ville est déjà utilisé avant la soumission du formulaire.

11.4 Suppression

Attention : La suppression d'une ville est irréversible. Si des employés ou des services sont liés à cette ville, la suppression sera refusée.

12. Gestion des Services

Les services représentent les départements ou unités organisationnelles de l'entreprise. Ils peuvent être liés à une ville et/ou un contrat.

Accès : Administrateur uniquement

URL : /services

12.1 Actions disponibles

  • Consultation de la liste des services (avec recherche et pagination)
  • Création d'un nouveau service
  • Modification d'un service
  • Suppression d'un service (si non référencé)
  • Vérification AJAX de l'unicité du nom

12.2 Formulaire de création

Le formulaire comprend les champs suivants :

  • Nom du service (obligatoire)
  • Description (optionnelle)
  • Ville associée (optionnel, liaison avec le référentiel villes)
  • Contrat associé (optionnel, liaison avec le référentiel contrats)

12.3 Règles appliquées

Règle S1

Nom unique

Impossible de créer deux services avec le même nom. Vérification AJAX en temps réel avec l'URL /services/verifier.

Règle S2

Liaison optionnelle

Un service peut être lié à une ville et/ou un contrat. Les deux champs sont optionnels et indépendants.

Règle S3

Protection contre la suppression

La suppression d'un service est refusée si des employés y sont rattachés ou si des pointages historiques y font référence.

12.4 Affichage

La liste des services affiche pour chaque entrée : le nom, la description, la ville associée, le contrat associé, ainsi que le nombre d'employés et de pointages associés. La pagination affiche jusqu'à 100 services par page.

13. Gestion des Contrats

Les contrats définissent les types de relation de travail (CDI, CDD, Freelance, Stage, etc.) et sont utilisés comme référentiel pour les employés.

Accès : Administrateur uniquement

URL : /contrats

13.1 Actions disponibles

  • Consultation de la liste des contrats (triés par code)
  • Création d'un nouveau type de contrat
  • Modification d'un contrat existant
  • Suppression d'un contrat (si non utilisé par un employé)

13.2 Champs du formulaire

  • Code : identifiant unique court (ex : "CDI", "CDD6M", "FREELANCE") — obligatoire
  • Description : texte libre décrivant le type de contrat

13.3 Règles appliquées

Règle CT1

Code unique

Chaque contrat doit avoir un code distinct. La vérification est automatique lors de la création et de la modification. La suppression est refusée si des employés utilisent ce contrat.

14. Gestion des Jours Fériés

Le calendrier des jours fériés est utilisé pour le calcul des jours ouvrables dans les bilans et la gestion des congés. Un jour férié peut couvrir une période (date de début → date de fin) pour gérer les ponts et les vacances prolongées.

Accès : Administrateur uniquement

URL : /configuration/feries

14.1 Actions disponibles

  • Liste des jours fériés (du plus récent au plus ancien)
  • Création d'un jour férié ou d'une période
  • Modification d'un jour férié existant
  • Suppression d'une entrée
  • Vérification AJAX de l'unicité du nom

14.2 Règles appliquées

Règle F1

Nom unique

Chaque jour férié doit avoir un nom distinct. Impossible de créer un doublon. Vérification AJAX via /api/feries/verifier.

Règle F2

Période flexible

Un jour férié a une date de début et une date de fin, ce qui permet de couvrir des périodes de plusieurs jours (ponts, vacances).

Règle F3

Exclusion des jours ouvrables

Les jours fériés sont automatiquement exclus du calcul des jours ouvrables, tant pour les congés que pour les bilans mensuels.

Règle de nommage recommandée : Utilisez des noms explicites (ex : "Jour de l'An 2026", "Pont de l'Ascension 2026") pour une identification claire dans les rapports et les interfaces mobiles.

15. Gestion des Utilisateurs

Ce module permet de gérer les comptes utilisateurs de l'application (identifiants de connexion, rôles et sécurité). Il est séparé du module Employés qui gère les données RH.

Accès : Administrateur uniquement

URL : /utilisateurs

15.1 Actions disponibles

  • Liste paginée des utilisateurs (avec recherche par nom, username, rôle)
  • Création d'un nouveau compte utilisateur
  • Consultation du profil d'un utilisateur
  • Modification d'un utilisateur (nom, rôle, mot de passe)
  • Basculement du statut (Actif/Inactif)
  • Suppression d'un compte (si pas d'historique)

15.2 Règles appliquées

Règle U1

Nom d'utilisateur unique

Chaque nom d'utilisateur doit être unique, sans espaces et non vide. Vérification AJAX via /utilisateurs/verifier.

Règle U2

Complexité du mot de passe

Minimum 8 caractères, au moins une lettre et un chiffre. Vérification côté serveur avant enregistrement.

Règle U3

Anti-suicide administrateur

Un administrateur ne peut pas : supprimer son propre compte, se désactiver lui-même, ni se rétrograder en pointeur.

Règle U4

Protection contre la suppression

Un utilisateur ne peut pas être supprimé s'il a créé des pointages ou des entrées dans le journal d'audit.

Règle U5

Verrouillage automatique

Après 5 tentatives de connexion échouées, le compte est automatiquement verrouillé pendant 15 minutes.

15.3 Formulaire de création

  • Nom complet : affiché dans l'interface
  • Nom d'utilisateur : identifiant de connexion (sans espaces)
  • Mot de passe : au moins 8 caractères avec lettres et chiffres
  • Rôle : Administrateur ou Pointeur

15.4 Basculement du statut

L'administrateur peut activer ou désactiver un utilisateur. La désactivation bloque la connexion sans supprimer l'historique. Un administrateur ne peut pas se désactiver lui-même.

16. Gestion des Pointeurs

Ce module permet d'assigner des services aux utilisateurs ayant le rôle "pointeur". Un pointeur ne verra et ne pourra pointer que les employés des services qui lui sont assignés.

Accès : Administrateur uniquement

URL : /pointeurs

16.1 Principe de fonctionnement

Un pointeur peut être assigné à zéro, un ou plusieurs services. Il ne pourra enregistrer des pointages que pour les employés appartenant aux services qui lui sont assignés. Les assignations sont stockées dans la table pointeurs_services.

16.2 Procédure d'assignation

Sélectionner un pointeur Cocher les services Enregistrer

16.3 Règles appliquées

Règle Pt1

Assignation multiple

Un pointeur peut être assigné à zéro, un ou plusieurs services simultanément.

Règle Pt2

Remplacement intégral

L'assignation est remplacée intégralement à chaque mise à jour — pas d'accumulation. Cochez tous les services souhaités à chaque modification.

Règle Pt3

Filtrage des utilisateurs

Seuls les utilisateurs actifs avec le rôle pointeur apparaissent dans la liste des pointeurs à assigner.

16.4 Impact sur le pointage

Lorsqu'un pointeur enregistre un pointage pour un employé ne faisant pas partie de ses services assignés, la requête est rejetée. Cette restriction est appliquée au niveau du contrôleur et du modèle.

17. Journal d'Audit

Le journal d'audit assure la traçabilité de toutes les actions critiques réalisées dans l'application. Il constitue un outil fondamental pour la conformité, la détection d'anomalies et les enquêtes internes.

Accès : Administrateur uniquement

URL : /logs

17.1 Actions tracées

Authentification
  • Connexions réussies
  • Échecs de connexion
  • Déconnexions
  • Changements de mot de passe
Employés
  • Création, modification, suppression
  • Activation / Désactivation
  • Gestion des documents
  • Badges et QR codes
Pointages
  • Enregistrement de pointage
  • Modification de pointage
  • Suppression de pointage
Congés
  • Prise de congé
  • Modification de congé
  • Suppression de congé
  • Recalcul de soldes
Utilisateurs
  • Création, modification, suppression de compte
  • Changement de rôle
  • Basculement de statut
Référentiels
  • Villes, services, contrats, jours fériés
  • Assignations pointeurs

17.2 Filtres disponibles

  • Par utilisateur ayant effectué l'action
  • Par table concernée (employés, pointages, conges, utilisateurs, etc.)
  • Par période (date début / date fin)
  • Recherche textuelle dans les métadonnées de l'action

17.3 Fonctionnalités avancées

Diff

Pour les modifications, le journal affiche les valeurs "avant" et "après" avec surlignage visuel des changements.

Export Excel

Export jusqu'à 10 000 entrées au format XLS compatible Excel et LibreOffice.

Appareil

Chaque action enregistre le type d'appareil utilisé (PC, mobile, tablette).

Réseau

Adresse IP et User-Agent sont enregistrés pour les entrées critiques.

Visionneuse

Consultez le détail complet d'une entrée de log avec horodatage précis et données structurées.

Historique congé

Visualisez l'historique des congés d'un employé directement depuis le journal.

18. Sécurité de l'Application

PointagePro intègre de multiples couches de sécurité pour protéger les données et garantir l'intégrité du système à tous les niveaux.

18.1 Mesures de sécurité implémentées

MesureDescription
HTTPS forcé Redirection automatique HTTP → HTTPS via le fichier .htaccess.
Protection CSRF Jeton unique par session, vérifié sur chaque requête POST. Régénéré à la connexion.
Content Security Policy Seuls les scripts avec un nonce unique par requête sont autorisés à s'exécuter.
Protection XSS Toutes les sorties utilisateur passent par htmlspecialchars().
Protection SQL Injection Requêtes préparées PDO avec paramètres liés — aucune concaténation SQL.
Anti brute-force Verrouillage du compte pendant 15 min après 5 tentatives échouées.
Sessions sécurisées Cookies HttpOnly, SameSite=Strict, Secure si HTTPS. Régénération de l'ID à la connexion.
Protection .env Accès direct au fichier .env bloqué par le serveur (erreur 403).
Upload sécurisé Vérification extension + MIME type, nom aléatoire, taille limitée à 15 Mo.
Headers HTTP X-Content-Type-Options: nosniff, Referrer-Policy, X-Frame-Options.
Journalisation complète Toutes les actions critiques sont tracées avec IP, User-Agent, données avant/après.

18.2 Bonnes pratiques recommandées

Sécurité recommandée :

  • Changez immédiatement le mot de passe administrateur par défaut après la première connexion
  • Utilisez des mots de passe forts pour tous les comptes (12+ caractères, mix de types)
  • Ne partagez jamais vos identifiants de connexion
  • Déconnectez-vous après chaque utilisation sur un appareil partagé
  • Vérifiez régulièrement les logs d'audit pour détecter des activités suspectes
  • Activez le HTTPS en production avec un certificat valide
  • Effectuez des sauvegardes régulières de la base de données
  • Gardez le logiciel et les dépendances à jour

19. Récapitulatif de Toutes les Règles Métier

Cette section regroupe l'ensemble des 47 règles appliquées dans l'application, classées par module et par référence unique.

# Module Code Règle Détail
▸ POINTAGE
1PointageP1Unicité stricteMême employé + même date + même heure + même service + même ville = refus. Vérification AJAX + serveur.
2PointageP2Non-chevauchementDeux pointages ne peuvent pas avoir des horaires qui se superposent (uniquement pointages clos).
3PointageP3Pas de double entréeUn pointage ouvert (sans sortie) bloque la création d'un nouveau pointage.
4PointageP4Zéro défaut minuitPas de traversée de minuit — créer deux pointages séparés.
5PointageP5Contrainte pointeurUn pointeur ne peut enregistrer que pour la date du jour. L'admin peut antidater.
6PointageP6Snapshot historiqueTaux, type salaire, service et ville sont figés au moment du pointage.
7PointageP7Coupure à minuitHeure de sortie 00:00 = minuit de la même date.
8PointageP8Verrouillage transactionnelEmployé verrouillé (SELECT FOR UPDATE) pour éviter les doublons simultanés.
9PointageP9Restriction pointeurUn pointeur ne peut modifier que ses propres pointages du jour.
▸ CONGÉS
10CongésC1Taux d'acquisition1 jour travaillé = 0.0577 jour de congé (paramétrable dans les paramètres système).
11CongésC2Mise à jour quotidienneRecalcul automatique chaque jour lors du premier accès admin.
12CongésC3Consommation FIFOLes jours sont déduits des années les plus anciennes d'abord.
13CongésC4Non-chevauchementPas de deux congés simultanés pour le même employé.
14CongésC5Congé maladie sans déductionTraçage uniquement — aucun impact sur le solde.
15CongésC6Avance sur congéSi le solde est insuffisant, déduction anticipée sur l'année en cours.
16CongésC7Verrouillage transactionnelEmployé verrouillé pendant la prise de congé (intégrité du solde).
17CongésC8Audit de cohérenceVérification que solde = historique. Écart toléré : 0.001 jour.
▸ EMPLOYÉS
18EmployésE1Unicité du matriculeChaque employé doit avoir un matricule unique.
19EmployésE2Unicité du CINNuméro de carte d'identité unique dans le système.
20EmployésE3Historisation salarialeChangement de salaire effectif au 1er du mois suivant.
21EmployésE4Protection suppressionImpossible si l'employé a des pointages ou congés.
22EmployésE5DésactivationMasque l'employé des listes actives en conservant l'historique.
▸ BILAN
23BilanB1Taux historiqueUtilise le taux en vigueur au début de la période demandée.
24BilanB2Pas de double-compteUn même jour unique = un seul jour compté pour les journaliers.
25BilanB3Jours ouvrablesExclut dimanches et jours fériés. Minimum garanti : 26 jours.
26BilanB4Prorata mensuelTaux moyen pondéré en cas d'augmentation en cours de mois.
▸ RÉFÉRENTIELS
27VillesV1UnicitéNom unique pour chaque ville.
28VillesV2Protection suppressionImpossible si utilisée par un service ou employé.
29ServicesS1UnicitéNom unique pour chaque service.
30ContratsCT1UnicitéCode unique pour chaque type de contrat.
31J. FériésF1UnicitéNom unique pour chaque événement.
32J. FériésF2Période flexibleDate début + date fin pour couvrir plusieurs jours.
33J. FériésF3Exclusion jours ouvrablesLes fériés ne sont pas comptés comme jours ouvrés.
▸ UTILISATEURS
34UtilisateursU1Username uniqueSans espaces, non vide, vérification en base.
35UtilisateursU2Complexité mot de passe8+ caractères, au moins une lettre et un chiffre.
36UtilisateursU3Anti-suicide adminUn admin ne peut pas se supprimer, se désactiver ou se rétrograder.
37UtilisateursU4Protection suppressionImpossible si l'utilisateur a des pointages ou des logs.
38UtilisateursU5Verrouillage bruteforce15 min après 5 échecs de connexion.
▸ POINTEURS
39PointeursPt1Assignation multipleUn pointeur peut être assigné à zéro, un ou plusieurs services.
40PointeursPt2Remplacement intégralL'assignation est remplacée à chaque mise à jour (pas d'accumulation).
41PointeursPt3FiltrageSeuls les pointeurs actifs apparaissent dans la liste d'assignation.
▸ SÉCURITÉ
42SécuritéS1Protection CSRFJeton unique par session obligatoire sur tous les POST.
43SécuritéS2Content Security PolicyScripts inline bloqués sauf avec nonce unique par requête.
44SécuritéS3Protection XSShtmlspecialchars() sur toutes les sorties utilisateur.
45SécuritéS4Anti SQL InjectionRequêtes préparées PDO, aucune concaténation SQL.
46SécuritéS5Sessions sécuriséesHttpOnly, SameSite=Strict, Secure si HTTPS, régénération à la connexion.
47SécuritéS6Protection uploadVérification extension + MIME, nom aléatoire, taille ≤ 15 Mo.

20. PWA — Application Progressive Web

PointagePro est une Progressive Web App (PWA) : elle peut être installée sur votre appareil comme une application native et fonctionne partiellement hors ligne grâce au service worker intégré.

20.1 Installation

Sur ordinateur (Chrome / Edge)
  1. Ouvrez l'application dans le navigateur
  2. Cliquez sur l'icône d'installation dans la barre d'adresse
  3. Confirmez l'installation
Sur mobile Android
  1. Ouvrez l'application dans Chrome
  2. Appuyez sur le menu
  3. Sélectionnez "Ajouter à l'écran d'accueil"
Sur iPhone / iPad (Safari)
  1. Ouvrez l'application dans Safari
  2. Appuyez sur l'icône Partager
  3. Sélectionnez "Sur l'écran d'accueil"
Avantages
  • Icône personnalisée sur l'écran d'accueil
  • Mode plein écran (sans barre de navigation)
  • Cache des ressources pour un chargement plus rapide
  • Fonctionnement partiel hors ligne

20.2 Fonctionnalités hors ligne

Grâce au service worker (sw.js), les ressources statiques (CSS, images, code JavaScript) sont mises en cache. En cas de perte de connexion, l'application peut toujours afficher les pages déjà visitées. Les données nouvellement saisies sont mises en attente et synchronisées automatiquement lors du retour en ligne.

21. Dépannage — Problèmes Courants

Impossible de se connecter
  • Vérifiez que le nom d'utilisateur et le mot de passe sont corrects
  • Si "compte verrouillé" apparaît : attendez 15 minutes puis réessayez
  • Contactez un administrateur pour un déverrouillage manuel si nécessaire
  • Vérifiez que les cookies sont activés dans votre navigateur
Pointage refusé
  • "Déjà pointé" : doublon existant pour ce créneau. Vérifiez l'historique.
  • "Chevauchement" : horaires superposés avec un autre pointage clos. Modifiez le pointage existant ou ajustez les horaires.
  • "Pointage ouvert" : l'employé a une entrée sans sortie. Clôturez d'abord le pointage précédent.
  • "Règle de nuit" : le pointage traverse minuit. Créez deux pointages séparés.
Un employé n'apparaît pas dans la recherche
  • Vérifiez qu'il n'est pas désactivé (actif = 0)
  • Vérifiez qu'il n'a pas de date de sortie définie
  • Le pointeur peut être filtré par service — vérifiez ses assignations pointeur
  • Essayez une recherche par CIN ou matricule si le nom ne fonctionne pas
Le solde de congés semble incorrect
  • Le recalcul a lieu une fois par jour. Si un pointage vient d'être créé, le solde sera mis à jour le lendemain.
  • Vérifiez le taux d'acquisition dans les paramètres (par défaut : 0.0577 jour/jour travaillé)
  • Vous pouvez forcer un recalcul en contactant l'administrateur
Erreur 403 / "Jeton CSRF invalide"
  • La session a expiré. Reconnectez-vous.
  • Si le problème persiste, videz le cache du navigateur (Ctrl+Maj+Suppr)
  • Vérifiez que JavaScript est activé
La page ne s'affiche pas correctement
  • Videz le cache du navigateur (Ctrl+Shift+R pour un hard reload)
  • Désinstallez et réinstallez l'application PWA si vous utilisez la version installée
  • Essayez un navigateur différent (Chrome, Firefox, Edge recommandés)