diff --git a/app/comp/bonus_spo.py b/app/comp/bonus_spo.py
index 7cbac1c79..6cf0767f0 100644
--- a/app/comp/bonus_spo.py
+++ b/app/comp/bonus_spo.py
@@ -730,7 +730,7 @@ class BonusIUTRennes1(BonusSportAdditif):
seuil_moy_gen = 10.0
proportion_point = 1 / 20.0
classic_use_bonus_ues = False
- # Adapté de BonusTarbes, mais s'applique aussi en classic
+ # 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"""
# Prend la note de chaque modimpl, sans considération d'UE
@@ -771,18 +771,59 @@ class BonusLaRochelle(BonusSportAdditif):
"""Calcul bonus modules optionnels (sport, culture), règle IUT de La Rochelle.
- - Si la note de sport est comprise entre 0 et 10 : pas d'ajout de point.
- - Si la note de sport est comprise entre 10 et 20 : ajout de 1% de cette
- note sur la moyenne générale du semestre (ou sur les UE en BUT).
+ - Si la note de sport est comprise entre 0 et 10 : pas d’ajout de point.
+ - Si la note de sport est comprise entre 10 et 20 :
+
+ - Pour le BUT, application pour chaque UE du semestre :
+
+ - pour une note entre 18 et 20 => + 0,10 points
+ - pour une note entre 16 et 17,99 => + 0,08 points
+ - pour une note entre 14 et 15,99 => + 0,06 points
+ - pour une note entre 12 et 13,99 => + 0,04 points
+ - pour une note entre 10 et 11,99 => + 0,02 points
+
+
+ - Pour les DUT/LP :
+ ajout de 1% de la note sur la moyenne générale du semestre
+
+
+
"""
name = "bonus_iutlr"
displayed_name = "IUT de La Rochelle"
+
seuil_moy_gen = 10.0 # si bonus > 10,
seuil_comptage = 0.0 # tous les points sont comptés
proportion_point = 0.01 # 1%
+ def compute_bonus(self, sem_modimpl_moys_inscrits, modimpl_coefs_etuds_no_nan):
+ """calcul du bonus"""
+ # La date du semestre ?
+ if self.formsemestre.formation.is_apc():
+ if 0 in sem_modimpl_moys_inscrits.shape:
+ # pas d'étudiants ou pas d'UE ou pas de module...
+ return
+ # Calcule moyenne pondérée des notes de sport:
+ with np.errstate(invalid="ignore"): # ignore les 0/0 (-> NaN)
+ bonus_moy_arr = np.sum(
+ sem_modimpl_moys_inscrits * modimpl_coefs_etuds_no_nan, axis=1
+ ) / np.sum(modimpl_coefs_etuds_no_nan, axis=1)
+ np.nan_to_num(bonus_moy_arr, nan=0.0, copy=False)
+ bonus_moy_arr[bonus_moy_arr < 10.0] = 0.0
+ bonus_moy_arr[bonus_moy_arr >= 18.0] = 0.10
+ bonus_moy_arr[bonus_moy_arr >= 16.0] = 0.08
+ bonus_moy_arr[bonus_moy_arr >= 14.0] = 0.06
+ bonus_moy_arr[bonus_moy_arr >= 12.0] = 0.04
+ bonus_moy_arr[bonus_moy_arr >= 10.0] = 0.02
+ self.bonus_additif(bonus_moy_arr)
+ else:
+ # DUT et LP:
+ return super().compute_bonus(
+ sem_modimpl_moys_inscrits, modimpl_coefs_etuds_no_nan
+ )
+
class BonusLeHavre(BonusSportAdditif):
"""Bonus sport IUT du Havre sur les moyennes d'UE
@@ -1067,14 +1108,15 @@ class BonusStNazaire(BonusSportMultiplicatif):
factor_max = 0.1 # 10% max
-class BonusTarbes(BonusSportAdditif):
+class BonusTarbes(BonusIUTRennes1):
"""Calcul bonus optionnels (sport, culture), règle IUT de Tarbes.