diff --git a/app/comp/bonus_spo.py b/app/comp/bonus_spo.py
index 56558ac53..416253b80 100644
--- a/app/comp/bonus_spo.py
+++ b/app/comp/bonus_spo.py
@@ -774,6 +774,34 @@ class BonusIUTRennes1(BonusSportAdditif):
"""Calcul bonus optionnels (sport, langue vivante, engagement étudiant),
règle IUT de l'Université de Rennes 1 (Lannion, Rennes, St Brieuc, St Malo).
+
Pour les semestres à partir de sept. 2024:
+
+ Article 5 : Bonification des activités hors programmes nationaux :
+
+
+ Pour calculer la moyenne M de chaque UE des semestres pairs, il convient
+ d'ajouter la validation de note obtenue qui s'effectuera suivant la
+ formule :
+
+ M = Mo + ((S-10)/10)/(Nombre d'UE du semestre)
+
+ où Mo est la moyenne de l'UE avant prise en compte de la note et S est
+ la note finale attribuée par l'activité bonifiée (si S > 10).
+
+
+ Sont éligibles à cette bonification une activité sportive dans le cadre
+ universitaire, une langue vivante optionnelle et l'engagement étudiant
+ (dans le cadre défini par la commission de la formation et de la vie
+ universitaire (CFVE) de l'Université de Rennes annexe 3).
+
+
+ Pour l'étudiant pouvant prétendre à plusieurs bonifications, seule la
+ meilleure des notes sera prise en compte. Toutefois, une bonification
+ liée à l'engagement est cumulable avec une autre bonification.
+
+
+
+ Pour les semestres avant 2024:
- Les étudiants peuvent suivre un ou plusieurs activités optionnelles notées
dans les semestres pairs.
@@ -796,17 +824,26 @@ class BonusIUTRennes1(BonusSportAdditif):
# S'applique aussi en classic, sur la moy. gen.
def compute_bonus(self, sem_modimpl_moys_inscrits, modimpl_coefs_etuds_no_nan):
- """calcul du bonus"""
+ """calcul du bonus, avec changement de règle en sept 2024"""
+ # Nouvelle règle à partir de sept. 2024
# Prend la note de chaque modimpl, sans considération d'UE
if len(sem_modimpl_moys_inscrits.shape) > 2: # apc
sem_modimpl_moys_inscrits = sem_modimpl_moys_inscrits[:, :, 0]
# ici sem_modimpl_moys_inscrits est nb_etuds x nb_mods_bonus, en APC et en classic
note_bonus_max = np.max(sem_modimpl_moys_inscrits, axis=1) # 1d, nb_etuds
nb_ues = len(self.formsemestre.get_ues(with_sport=False))
-
+ if nb_ues == 0:
+ self.bonus_ues = pd.DataFrame()
+ self.bonus_moy_gen = pd.Series()
+ return
+ proportion_point = (
+ 1 / (10.0 * nb_ues)
+ if self.formsemestre.date_debut > datetime.date(2024, 8, 1)
+ else self.proportion_point
+ )
bonus_moy_arr = np.where(
note_bonus_max > self.seuil_moy_gen,
- (note_bonus_max - self.seuil_moy_gen) * self.proportion_point,
+ (note_bonus_max - self.seuil_moy_gen) * proportion_point,
0.0,
)
# Seuil: bonus dans [min, max] (défaut [0,20])