# Implémentation jurys BUT *Quelques notes informelles sur la gestion des jurys BUT.* Fichiers sources: ```txt app/but/jury_but.py app/but/cursus_but.py ``` ## Validations enregistrées - UEs : comme pour les formations classiques - RCUE: `ApcValidationRCUE(etudid, formsemestre, ue1, ue2)` - Le formsemestre est optionnel: c'est celui d'où a été émise la validation. - Pour retrouver le niveau, passer par l'UE: `ue1.niveau_competence` - Années BUT: `ApcValidationAnnee` - liée au référentiel de compétence. ## La page saisie jury BUT (annuelle) Partir de la liste des niveaux à valider pour cet étudiant dans sa scolarité, selon le parcours de l'étudiant. Le parcours est donné par son inscription dans le semestre courant (celui duquel on lance la saisie). Chaque compétence forme une ligne, comme sur la fiche étudiant. Le semestre courant donne l'année scolaire (2022, ...) et l'année BUT courante (1, 2, 3) On affiche les colonnes suivantes (exemple d'un jury de BUT2 S4): | BUT1 | BUT2 S2 | BUT2 S3 | BUT2 RCUE | autorisation | BUT3 | |---------------|---------|---------|-----------|--------------|-------------| | Compétence 1 | rcue | UE1.3 | UE1.4 | code | feu vert S5 | | Compétence 2 | ... | ... | ... | ... | ... | sur chaque code un popup explicatif (date de validation) Actuellement (9.4), l'état du BUT1 (et BUT2 quand on sera en BUT3) n'est pas rappelé sur cet affichage. ### Rappel sur les validations de jury En BUT, on va utiliser 3 types de décisions de jury: sur les UEs, les RCUEs et les années de BUT. Une décision sur une UE concerne l'UE d'un semestre, d'une année scolaire donnée: on peut enregistre une décision AJ sur l'UE12 en 2022, puis ADM sur l'UE12 d'an nouveau formsemestre en 2023. Ce n'est pas le cas pour les décisions concernant le cursus BUT: on valide (ou non) l'année BUT1, puis BUT2 puis BUT3. Un redoublant pour avoir son BUT1 en AJ, puis il passera en ADM l'année suivante. Pareil pour les RCUEs. Autrement dit, le code d'une année BUT ou d'un RCUE, pour un étudiant donné, est unique. ### Validations d'UE antérieures Les validations d'UEs externes existaient avant ScoDoc 9. Elles sont utilisées quand un étudiant arrive en transfert avec une UE validée mais pas un semestre complet (ne pas confondre avec les "semestres extérieurs" qui sont gérés comme des formsemestres ordinaires). Les UE antérieures sont présentes dans les bulletins BUT. ### Tenue du jury Le jury part d'un formsemestre (dit origine). Dans ce formsemestre, `etud` est inscrit à un parcours (ou au tronc commun): on sait quels niveaux il doit valider durant année. Le jury (pour un niveau) peut éditer: - l'UE du formsemestre origine (qui peut être déjà validée en cas de modification) - l'UE du formsemestre précédent si l'origine est impaire et que ce formsemestre impair n'est pas verrouillé (sinon, affichée mais en lecture seule) - le RCUE #### Édition décision d'UE Le menu jury (activé par défaut) pour une UE affichera: - Si en cours: la moyenne courante, la décision recommandée basée sur cette note - Si validée ailleurs que dans le semestre en cours: le code et la moyenne enregistrés. - Si pas en cours, menu désactivé, pas d'édition de la décision d'UE. #### Édition décision de RCUE Le menu RCUE est désactivé par défaut: calcul automatique en fonction des décisions d'UE. Le code enregistré (rappel: chaque RCUE n'a qu'un code enregistré, contrairement aux UEs) est affiché (code couleur s'ile st différent d ecelui calculé). La modification du code RCUE peut entrainer la modification des codes des UEs qui le constituent: code RCUE `ADJ` => UEs non validante passées en `ADJR` (géré par `DecisionRCUE.record` et en js dans `jury_but.js`). ) La modification de codes d'UE devrait ou pourrait modifier le code RCUE proposé, mais ce n'est pas implémenté en 9.4.92. ### Classes Ordre de construction: - `DecisionsProposeesAnnee` - `RegroupementCoherentUE` - `DecisionsProposeesRCUE(rcue)` - `DecisionsProposeesUE` #### `RegroupementCoherentUE(etud, ApcNiveau, ues_pair, ues_impair)` Modélise un couple d'UEs associées au même niveau de compétence du référentiel. L'ancienne classe `RegroupementCoherentUE` (définie dans `models/but_validation.py`) ne répondait pas au besoin car elle était construite sur la base de deux formsemestres. - On part de toutes les UEs de nos formations associées à ce niveau. On peut avoir un nombre quelconque d'UEs paires et impaires associées à ce niveau. - Les UEs associées à ce niveau peuvent être: - validées (externes, ou dans un formsemestre connu), avec une moyenne enregistrée - ou en cours: dans un formsemestre suivi par l'étudiant, avec une moyenne d'UE calculable. Notons qu'il peut arriver qu'aucune des UEs n'appartiennent au semestre origine (capitalisations, validations antérieures). Dans ce cas, leurs décisions ne sont pas toujours éditables, mais le RCUE l'est. Pour chaque côté (impair, pair), on va chercher: - l'UE en cours pendant l'année scolaire du formsemestre origine s'il y en a une (ie cherche dans les formations des formsemestres de même année scolaire que l'origine) - la validation de jury enregistrée pour cette UE en cours - la validation d'UE validante enregistrée (capitalisation ou antérieure, peu importe) NB: s'il y a plusieurs UEs en cours (double inscription, erreur): prend celle du formsemestre commencé le plus récemment. État d'un `RegroupementCoherentUE`: - **complete** : False si on n'a pas les deux UEs #### Opérations sur `RegroupementCoherentUE` - init: - Chercher l'UE en cours pour pair, impair: `ue_cur_pair`, `ue_cur_impair`, et leurs validations `validation_ue_cur_pair`, `validation_ue_cur_impair`. - Chercher pour pair, impair la meilleure validation d'UE enregistrée dans un autre formsemestre. `validation_ue_best_pair` - complete = les deux UEs validées ou en cours cette année - moy_rcue: moyenne des moyennes d'UE #### DecisionsProposeesAnnee - `decisions_ues` : considérer les UEs associées aux niveaux et non celles des semestres. Notez que même si l'étudiant n'est pas inscrit ("dispensé") à une UE dans le formsemestre origine, elle doit apparaitre sur la page jury. - `rcues_annee`: liste des `RegroupementCoherentUE` - `decisions_rcue_by_niveau` #### DecisionsProposeesRCUE - `record`: modifie les codes d'UE en fonction du RCUE: *si le RCUE est `ADJ`, les UEs non validées sont passées à `ADJR`. - Les validations d'UEs antérieures ou capitalisées ne sont pas concernées car déjà valides. - Si le formsemestre contenant l'UE à modifier est verrouillé, on modifie quand même et on émet un warning. - Les RCUE/UE du niveau inférieur peuvent aussi être modifiées (c'est déjà le cas, `ADSUP`). #### DecisionsProposeesUE L'objet peut représenter une validation capitalisée ou antérieure: il est alors en lecture seule. Pour chaque RCUE, on a les deux UEs à considérer dans `ue_1`, `ue_2`. - Modifier affichage UE "en lecture seule" - Ne pas restreindre la recherche aux UEs du formsemestre. - Le calcul de la moyenne en utilisant `ResultatsSemestreBUT` n'est évidemment utilisé que pour l'UE en cours.