📖 Manuel d'Utilisation Complète
Guide exhaustif de l'application de pointage intelligent et de gestion RH — destiné aux administrateurs, pointeurs et direction.
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ôle | Description | Accès principal | Restrictions |
|---|---|---|---|
| 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".
Ouvrez l'application
Rendez-vous sur l'adresse fournie par votre entreprise.
Saisissez vos identifiants
Entrez votre nom d'utilisateur et votre mot de passe.
Cliquez sur "Se connecter"
Redirection vers le tableau de bord (admin) ou la page de pointage (pointeur).
- 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
- 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".
Saisissez votre ancien mot de passe
Vérifié côté serveur via hachage bcrypt.
Saisissez le nouveau mot de passe
Minimum 8 caractères, au moins une lettre et un chiffre.
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
- Recherchez l'employé par nom, matricule ou numéro CIN (recherche AJAX dynamique avec résultats en temps réel)
- Sélectionnez l'employé dans les résultats
- 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
- Validez — une notification toast confirme le succès ou affiche l'erreur
5.3 Règles appliquées au Pointage
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.
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).
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.
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).
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.
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.
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).
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.
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
| Action | Administrateur | Pointeur |
|---|---|---|
| Modifier | Tous les pointages (date, heure, service, ville, pointeur…) | Ses propres pointages du jour uniquement |
| Supprimer | Oui — 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 :
Hub de gestion de l'équipe, accès rapide aux employés.
Synthèse pointages du jour, demandes de congés du mois, estimation salariale.
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
- Nom complet
- Téléphone et email
- Numéro CIN
- Situation familiale
- Photo d'identité (JPG, PNG, WebP)
- Matricule unique (auto-généré ou saisi)
- Date d'embauche
- Poste / Fonction
- Service, Ville, Contrat
- Salaire / Taux
- Type de salaire : Journalier, Heure ou Mensuel
- Mode de paiement : Espèce, Virement, Chèque
- RIB / Informations bancaires
- Numéro CNSS
- 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
Unicité du matricule
Chaque employé doit avoir un numéro de matricule unique. Vérification en AJAX et en base de données.
Unicité du CIN
Le numéro de carte d'identité nationale doit être unique dans le système.
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.
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é.
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 solde | Description | Couleur |
|---|---|---|---|
| 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
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).
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.
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.
Pas de chevauchement
Un employé ne peut pas avoir deux congés qui se chevauchent sur la même période.
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.
Jours ouvrables
Le calcul exclut automatiquement les dimanches et les jours fériés configurés dans le calendrier.
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).
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é
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
| Colonne | Description |
|---|---|
| Employé | Nom complet, matricule, CIN |
| Jours travaillés | Nombre de jours uniques avec au moins un pointage |
| Heures totales | Somme des minutes travaillées converties en heures |
| Salaire théorique | Calcul basé sur le taux et le type de salaire |
| Salaire réel | Salaire réellement dû selon les règles de l'entreprise |
| Dates présentes | Liste 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
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.
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).
Jours ouvrables
Les dimanches et jours fériés sont exclus du calcul. Un minimum de 26 jours ouvrables est garanti par période.
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 :
Coût réel = Nombre de jours × Taux journalier
Coût théorique = (Minutes travaillées / Minutes de base) × Taux journalier
Coût réel = Coût théorique = (Minutes travaillées / 60) × Taux horaire
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
Camembert : répartition présents / congés / absents (en pourcentage) sur la période.
Volume d'heures travaillées par jour sur la période sélectionnée.
Répartition des heures travaillées par service — Top 10.
Répartition des heures travaillées par ville.
Classement des employés les plus présents par heures travaillées.
Taux d'arrivée à l'heure vs retard. Seuil configurable (par défaut : 09:00).
Estimation du coût total réel et théorique sur la période.
Liste des employés actifs sans pointage aujourd'hui (sans congé justifié).
Pointages sans heure de sortie détectés comme anomalies.
Congés à venir dans les prochaines semaines.
Liste des employés actuellement en congé.
É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
Nom unique
Impossible de créer deux villes avec le même nom. Vérification automatique avant enregistrement.
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
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.
Liaison optionnelle
Un service peut être lié à une ville et/ou un contrat. Les deux champs sont optionnels et indépendants.
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
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
Nom unique
Chaque jour férié doit avoir un nom distinct. Impossible de créer un doublon. Vérification AJAX via /api/feries/verifier.
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).
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
Nom d'utilisateur unique
Chaque nom d'utilisateur doit être unique, sans espaces et non vide. Vérification AJAX via /utilisateurs/verifier.
Complexité du mot de passe
Minimum 8 caractères, au moins une lettre et un chiffre. Vérification côté serveur avant enregistrement.
Anti-suicide administrateur
Un administrateur ne peut pas : supprimer son propre compte, se désactiver lui-même, ni se rétrograder en pointeur.
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.
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
16.3 Règles appliquées
Assignation multiple
Un pointeur peut être assigné à zéro, un ou plusieurs services simultanément.
Remplacement intégral
L'assignation est remplacée intégralement à chaque mise à jour — pas d'accumulation. Cochez tous les services souhaités à chaque modification.
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
- Connexions réussies
- Échecs de connexion
- Déconnexions
- Changements de mot de passe
- Création, modification, suppression
- Activation / Désactivation
- Gestion des documents
- Badges et QR codes
- Enregistrement de pointage
- Modification de pointage
- Suppression de pointage
- Prise de congé
- Modification de congé
- Suppression de congé
- Recalcul de soldes
- Création, modification, suppression de compte
- Changement de rôle
- Basculement de statut
- 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
Pour les modifications, le journal affiche les valeurs "avant" et "après" avec surlignage visuel des changements.
Export jusqu'à 10 000 entrées au format XLS compatible Excel et LibreOffice.
Chaque action enregistre le type d'appareil utilisé (PC, mobile, tablette).
Adresse IP et User-Agent sont enregistrés pour les entrées critiques.
Consultez le détail complet d'une entrée de log avec horodatage précis et données structurées.
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
| Mesure | Description |
|---|---|
| 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 | ||||
| 1 | Pointage | P1 | Unicité stricte | Même employé + même date + même heure + même service + même ville = refus. Vérification AJAX + serveur. |
| 2 | Pointage | P2 | Non-chevauchement | Deux pointages ne peuvent pas avoir des horaires qui se superposent (uniquement pointages clos). |
| 3 | Pointage | P3 | Pas de double entrée | Un pointage ouvert (sans sortie) bloque la création d'un nouveau pointage. |
| 4 | Pointage | P4 | Zéro défaut minuit | Pas de traversée de minuit — créer deux pointages séparés. |
| 5 | Pointage | P5 | Contrainte pointeur | Un pointeur ne peut enregistrer que pour la date du jour. L'admin peut antidater. |
| 6 | Pointage | P6 | Snapshot historique | Taux, type salaire, service et ville sont figés au moment du pointage. |
| 7 | Pointage | P7 | Coupure à minuit | Heure de sortie 00:00 = minuit de la même date. |
| 8 | Pointage | P8 | Verrouillage transactionnel | Employé verrouillé (SELECT FOR UPDATE) pour éviter les doublons simultanés. |
| 9 | Pointage | P9 | Restriction pointeur | Un pointeur ne peut modifier que ses propres pointages du jour. |
| ▸ CONGÉS | ||||
| 10 | Congés | C1 | Taux d'acquisition | 1 jour travaillé = 0.0577 jour de congé (paramétrable dans les paramètres système). |
| 11 | Congés | C2 | Mise à jour quotidienne | Recalcul automatique chaque jour lors du premier accès admin. |
| 12 | Congés | C3 | Consommation FIFO | Les jours sont déduits des années les plus anciennes d'abord. |
| 13 | Congés | C4 | Non-chevauchement | Pas de deux congés simultanés pour le même employé. |
| 14 | Congés | C5 | Congé maladie sans déduction | Traçage uniquement — aucun impact sur le solde. |
| 15 | Congés | C6 | Avance sur congé | Si le solde est insuffisant, déduction anticipée sur l'année en cours. |
| 16 | Congés | C7 | Verrouillage transactionnel | Employé verrouillé pendant la prise de congé (intégrité du solde). |
| 17 | Congés | C8 | Audit de cohérence | Vérification que solde = historique. Écart toléré : 0.001 jour. |
| ▸ EMPLOYÉS | ||||
| 18 | Employés | E1 | Unicité du matricule | Chaque employé doit avoir un matricule unique. |
| 19 | Employés | E2 | Unicité du CIN | Numéro de carte d'identité unique dans le système. |
| 20 | Employés | E3 | Historisation salariale | Changement de salaire effectif au 1er du mois suivant. |
| 21 | Employés | E4 | Protection suppression | Impossible si l'employé a des pointages ou congés. |
| 22 | Employés | E5 | Désactivation | Masque l'employé des listes actives en conservant l'historique. |
| ▸ BILAN | ||||
| 23 | Bilan | B1 | Taux historique | Utilise le taux en vigueur au début de la période demandée. |
| 24 | Bilan | B2 | Pas de double-compte | Un même jour unique = un seul jour compté pour les journaliers. |
| 25 | Bilan | B3 | Jours ouvrables | Exclut dimanches et jours fériés. Minimum garanti : 26 jours. |
| 26 | Bilan | B4 | Prorata mensuel | Taux moyen pondéré en cas d'augmentation en cours de mois. |
| ▸ RÉFÉRENTIELS | ||||
| 27 | Villes | V1 | Unicité | Nom unique pour chaque ville. |
| 28 | Villes | V2 | Protection suppression | Impossible si utilisée par un service ou employé. |
| 29 | Services | S1 | Unicité | Nom unique pour chaque service. |
| 30 | Contrats | CT1 | Unicité | Code unique pour chaque type de contrat. |
| 31 | J. Fériés | F1 | Unicité | Nom unique pour chaque événement. |
| 32 | J. Fériés | F2 | Période flexible | Date début + date fin pour couvrir plusieurs jours. |
| 33 | J. Fériés | F3 | Exclusion jours ouvrables | Les fériés ne sont pas comptés comme jours ouvrés. |
| ▸ UTILISATEURS | ||||
| 34 | Utilisateurs | U1 | Username unique | Sans espaces, non vide, vérification en base. |
| 35 | Utilisateurs | U2 | Complexité mot de passe | 8+ caractères, au moins une lettre et un chiffre. |
| 36 | Utilisateurs | U3 | Anti-suicide admin | Un admin ne peut pas se supprimer, se désactiver ou se rétrograder. |
| 37 | Utilisateurs | U4 | Protection suppression | Impossible si l'utilisateur a des pointages ou des logs. |
| 38 | Utilisateurs | U5 | Verrouillage bruteforce | 15 min après 5 échecs de connexion. |
| ▸ POINTEURS | ||||
| 39 | Pointeurs | Pt1 | Assignation multiple | Un pointeur peut être assigné à zéro, un ou plusieurs services. |
| 40 | Pointeurs | Pt2 | Remplacement intégral | L'assignation est remplacée à chaque mise à jour (pas d'accumulation). |
| 41 | Pointeurs | Pt3 | Filtrage | Seuls les pointeurs actifs apparaissent dans la liste d'assignation. |
| ▸ SÉCURITÉ | ||||
| 42 | Sécurité | S1 | Protection CSRF | Jeton unique par session obligatoire sur tous les POST. |
| 43 | Sécurité | S2 | Content Security Policy | Scripts inline bloqués sauf avec nonce unique par requête. |
| 44 | Sécurité | S3 | Protection XSS | htmlspecialchars() sur toutes les sorties utilisateur. |
| 45 | Sécurité | S4 | Anti SQL Injection | Requêtes préparées PDO, aucune concaténation SQL. |
| 46 | Sécurité | S5 | Sessions sécurisées | HttpOnly, SameSite=Strict, Secure si HTTPS, régénération à la connexion. |
| 47 | Sécurité | S6 | Protection upload | Vé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
- Ouvrez l'application dans le navigateur
- Cliquez sur l'icône d'installation dans la barre d'adresse
- Confirmez l'installation
- Ouvrez l'application dans Chrome
- Appuyez sur le menu ⋮
- Sélectionnez "Ajouter à l'écran d'accueil"
- Ouvrez l'application dans Safari
- Appuyez sur l'icône Partager
- Sélectionnez "Sur l'écran d'accueil"
- 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
- 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
- "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.
- 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 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
- 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é
- 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)