feat(absences) : module de gestion des absences + MCP + conformité RGPD/légale #7
Reference in New Issue
Block a user
Delete Branch "feat/absence-management"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Module de gestion des absences (type Payfit)
Cette MR introduit un module complet de gestion des absences, supprime le portail client, ajoute des outils MCP CRUD, durcit le RGPD sur
/api/userset applique une première vague de mise en conformité légale.Lots livrés (7 commits)
de98924) — entités/enum/services du module :AbsenceType,AbsenceRequest,AbsenceBalance,AbsencePolicy,AbsenceDayCalculator,PublicHolidayProvider, providers/processors API Platform, commande d'acquisition.2a0b202) — front du module (pages/absences,/team-absences, drawers, helpers), retrait complet de la feature portail client (ROLE_CLIENT,ClientTicket).2b148fa) — tools MCP pour créer/lister/valider les demandes./api/users(11fdf8d) — annuaire minimal (id + username) pour les non-admins ; champs RH (hireDate,contractType,annualLeaveDays,initialLeaveBalance,roles, etc.) réservés àROLE_ADMINet à/api/me; suppression defamilySituation/nbChildren./help+ revue de conformité (4858f73) — chapitre Absences dans l'aide ; audit légal documenté.e9aaccc) — design des corrections retenues (périmètre 1-6).f9773b3) — événements familiaux ne décrémentent plus de solde (seul le CP le fait) ; décès = motif obligatoire (REST + MCP), plus de forfait trompeur ; ajout du type Naissance ; congé parental = suspension sans solde ; garde-fou demi-journée sur jour non décompté ; CCN documentée (Syntec IDCC 1486).Vérifications
make test: 52 tests verts.php bin/console lint:container: OK.build:dist) : OK.⚠️ Backlog légal NON traité (à planifier avant mise en prod paie)
AccrueLeaveCommandcrédite aujourd'huiannualLeaveDays/12sans tenir compte des arrêts.🤖 Generated with Claude Code
Suite à la revue de conformité du module absences. Fuite corrigée : GET /api/users et /api/users/{id} n'avaient aucun contrôle d'accès alors que le groupe user:list exposait les données RH/familiales (date d'embauche, contrat, soldes de CP, rôles…). Tout utilisateur authentifié pouvait donc lire ces informations sur tous ses collègues. - chaque champ RH (isEmployee, hireDate, endDate, contractType, workTimeRatio, annualLeaveDays, referencePeriodStart, initialLeaveBalance) ainsi que roles est désormais exposé via #[ApiProperty(security: "is_granted('ROLE_ADMIN') or object == user")] : visible uniquement par un admin ou par l'utilisateur lui-même. id et username restent publics (sélecteurs d'assigné, avatars). Minimisation : suppression de familySituation et nbChildren, collectés et exposés (form RH, API, outil MCP) mais utilisés par aucun calcul. - entité User + enum FamilySituation + migration de drop des colonnes - Serializer MCP, update-user (MCP), EmployeeDrawer, DTO, fixtures, i18n Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>