Gestion méthodique du personnel
[30 minutes]
Le service de gestion du personnel d'une entreprise désire s'équiper d'un outil lui permettant de gérer informatiquement ses employés, leurs salaires et leurs congés. Les spécifications suivantes ont pu être mises en exergue par une analyse des besoins réalisée auprès des utilisateurs du service du personnel.
Généralités :
tout employé est identifié par un nom, un prénom et une date de naissance ;
tout employé remplit une fonction et appartient à un service ;
pour chaque employé on gère la date d'embauche et la quotité (c'est à dire le pourcentage de temps travaillé par rapport au temps plein, en cas de travail à temps partiel).
Gestion des salaires :
pour chaque employé on gère l'historique de ses salaires dans l'entreprise, chaque salaire étant affecté à une période de temps ;
un salaire est composé d'un salaire brut, de charges patronales et de charges salariales ;
on cherchera à partir des ces données à obtenir également le salaire chargé (brut + charges patronales), et le salaire net (brut - charges salariales), et ce en particulier pour le salaire en cours (celui que touche actuellement le salarié).
Gestion des congés :
pour chaque employé, on mémorise chaque congé pris (posant qu'un congé concerne toujours une ou plusieurs journées entières) ;
chaque employé a le droit aux jours de congés suivants :
25 jours (pour une quotité de 1) et 25 x quotité sinon,
chaque fonction ouvre les droits à un certain nombre de jours de RTT,
chaque service ouvre les droits à un certain nombre de jours de RTT,
chaque tranche de 5 ans passés dans l'entreprise donne droit à 1 jour supplémentaire,
les employés de plus de 40 ans ont un jour supplémentaire, et ceux de plus de 50 ans deux.
pour chaque employé on cherchera à connaître le nombre total de jours de congés autorisés, le nombre de jours pris et le nombre de jours restants sur l'année en cours.
Question
Réaliser le diagramme de classes permettant de modéliser ce problème.
Solution
Exemple :
@startuml
hide circle
class Employé {
nom : text
prénom : text
ddn : date
date_embauche : date
quotité : pourcentage
age() : posint
congés_restants() : posint
congés_pris() : posint
poser_congés(début:date, fin:date)
}
note left : (nom, prénom, ddn) unique
class Fonction {
nom : text {unique}
rtt : postint
}
Employé "1" - "1..*" Fonction : " remplit "
class Service {
nom : text {unique}
rtt : posint
}
Employé "1" - "1..*" Service : " appartient "
class Salaire {
début : date
fin : date
brut : decimal
part_patronale : decimal
part_salariale : decimal
salaire_chargé() : decimal
salaire_net() : decimal
salaire_en_cours?() : boolean
}
Employé "1" -- "*" Salaire : " reçoit "
class Congé {
début : date
fin : date
nb_jours() : posint
}
Employé "1" -- "*" Congé : " prend "
@enduml
Remarque :
On remarquera la méthodes poser_congés qui modélise une opération dont l'importance dans l'énoncé justifie une mise en exergue.
Bien entendu, il n'existe pas de solution unique à ce problème. Par exemple si seul le salaire en cours est réellement intéressant, on pourra affecter les méthodes salaireCharge et salaireNet à la classe Employe plutôt que Salaire.
Rappel : Pourquoi représenter des méthodes en UML en base de données ?
Pour rendre l'UML plus explicite, la méthode est alors une technique d'annotation
Pour montrer qu'elles sont importantes et s'en souvenir au moment du développement de l'application (on met ainsi en exergue certaines fonctions énoncées lors de la clarification)
Parce qu'elle peuvent donner lieu à des vues intéressantes en relationnel