18 KiB
Implémentation des parcours du BUT dans ScoDoc
Cette page est destinée aux développeurs et à tous ceux qui souhaitent comprendre le fonctionnement du logiciel. Elle ne concerne que les formations BUT, dites dans ScoDoc "APC" (pour approches par compétences).
ScoDoc est livré avec les référentiels de compétences de tous les parcours de toutes les spécialités de BUT. En effet, ces référentiels sont nationaux, publiés par le ministère (voir https://cache.media.enseignementsup-recherche.gouv.fr/file/SPE4-MESRI-17-6-2021/32/3/_Annexe_1_PN_BUT_version_post_CNESER_20210511_18-05-2021-1_1411323.pdf) et ne sont pas susceptibles d'adaptations locales.
Nous nous sommes basés sur les versions exportées du logiciel Orébut.
!!! note
Les objets notés CommeCeci
sont des modèles (classes SQLAlchemy)
implémentés par des tables SQL.
Structure des formations
Pour les formation en APC, on a d'une part le programme de formation, et de l'autre le référentiel de compétences.
Pour le BUT, le référentiel de formation n'est pas fixé nationalement. Une part est publiée (2/3) par le ministère, le reste est défini localement par les universités (adaptation locale).
Les formations ScoDoc (Formation
) sont constituées de
- UE :
UniteEns
- Modules (ressources, SAÉ, autres):
Module
- Modules (ressources, SAÉ, autres):
La formation définit les UE et modules pour l'ensemble des semestres d'un ou plusieurs parcours. De cette façon, on peut utiliser les mêmes éléments dans plusieurs parcours, et grouper les étudiants de plusieurs parcours dans le même semestre si on le souhaite.
En ScoDoc 9.3, on avait une bijection UE <-> Niveau de compétence (ApcNiveau
).
En 9.4, on aura une association UE <- parcours -> Niveau de compétence
-
Chaque parcours de BUT est défini par un ensemble de compétences.
-
Une compétence est décomposée en deux ou trois niveaux, chacun constitué de deux UE consécutives (sur semestres pair et impair de la même année scolaire).
Unités d'enseignement
Les UE sont des UE "LMD" habituelles; associées à des crédits ECTS, capitalisables. Pour chaque UE on calcule une note (moyenne d'UE) et on attribue une décision de jury (validée, ajournée, ...).
Modules et parcours
Les modules: on appelle ici "module" tout dispositif pédagogique évalué, dans le BUT ce sont les ressources et les SAÉ.
Chaque module peut être associé à un ou plusieurs parcours, via la table
d'association ApcParcours
<-> Module
(parcours_modules
, many-to-many).
Via Formation/Modification du module:
On peut ainsi vérifier que les parcours couvrent les AC, et faciliter les inscriptions des étudiants aux modules (par ex. page présentant les modules auxquels inscrire un groupe).
Cas des modules présents dans plusieurs parcours
Si un module est utilisé dans plusieurs parcours de la même formation BUT, cela ne pose aucun problème, sauf si ce module doit avoir des coefficients (vers les UEs) différents selon le parcours dans lequel il intervient. Dans ce cas, il sera conseillé de créer plusieurs versions du module, que l'on associera aux divers parcours.
Coefficients modules / UEs
Les coefficients sont des réels (non nullables), ModuleUECoef
.
Édition via Formation/Édition des coefficients des modules vers les UEs:
Formation
Le programme de formation est constitué des classes suivantes (en BUT et dans tous les types de formation. La notion de "matière" n'est pas utilisée en BUT).
Formation
(ex: "BUT R&T")UniteEns
(UE, ex: "Administrer les réseaux")Modules
(ressources, SAÉs) <->ApcAppCritique
, <->ApcAnneeParcours
On voit que les modules ont toujours une UE de rattachement. Cependant, en BUT, un module peut intervenir dans le calcul des notes de plusieurs UE, via une matrice de coefficients.
!!! example "Méthodes de Formation"
- Formation.query_ues_parcour(parcour: ApcParcours)
->(query) les UEs d'un
parcours de la formation.
Référentiel de compétences
Le référentiel de compétences (ApcReferentielCompetences
) défini les
compétences à valider (décomposées en niveaux) et les parcours BUT
(ApcParcours
). Il est structuré ainsi:
ApcReferentielCompetences
ApcCompetence
ApcSituationPro
ApcComposanteEssentielle
ApcNiveau
(année (BUT1, BUT2, ...), ordre (1,2) ou (1,2,3)) <->UE
ApcAppCritique
<->Module
ApcParcours
ApcAnneeParcours
(ordre=1,2,3) <->Module
ApcCompetence
<-ApcParcoursNiveauCompetence
(niveau 1, 2, 3) ->ApcAnneeParcours
Notons:
-
Le lien entre UE et Niveau de compétence (
ApcNiveau
). -
Le lien à entre Compétence et Année de Parcours à travers la table (many-to-many)
ApcParcoursNiveauCompetence
qui indique le niveau ce compétence concerné. -
Le lien entre les apprentissages critiques (
ApcAppCritique
) et les modules, qui permet d'établir les critères d'évaluation de chaque module.
FormSemestres
La formation est mise en œuvre dans des FormSemestre
(date début, fin,
enseignants responsables, ...) constitués de ModuleImpl
(module avec enseignant,
évaluations, ...).
FormSemestre
ModuleImpl
Evaluation
On a vu que la formation pouvait comporter plusieurs parcours. Un FormSemestre
peut implémenter un ou plusieurs parcours. On a en effet une table d'association
Parcours <-> FormSemestre (parcours_formsemestre
, many-to-many).
Via Semestre/Modifier le semestre:
!!! example "Méthodes de FormSemestre"
- FormSemestre.query_ues(with_sport=False) ->
liste des UEs de ce semestres
(tous parcours confondus).
- FormSemestre.query_ues_parcours_etud(etudid: int) ->
(query) UEs que suit
l'étudiant dans ce semestre BUT en fonction du parcours dans lequel il est
inscrit.
Inscriptions des étudiants
Les étudiants sont inscrits:
-
à des
FormSemestre
(FormSemestreInscription
, avec:- un état, "inscrit", "démission" ou "défaillant";
- un
ApcParcours
; - un code étape Apogée.
-
dans un ModuleImpl (
ModuleImplInscription
)
Un formsemestre est associé à un ensemble de parcours. L'étudiant peut être inscrit à l'un d'entre eux. Certaines formations commencent par une année de tronc commun, durant laquelle l'étudiant n'a pas encore choisi son parcours. On considérera que si l'étudiant n'est pas inscrit à un parcours, il est implicitement inscrit à tous les parcours du semestre.
Associations (nouvelles pour le BUT):
Pour la gestion des parcours BUT, on a introduit les associations suivantes, qui n'existaient pas dans ScoDoc 9.2:
- UE <->
ApcNiveau
: choix sur la pageue_edit
Module
||--o{ ensemble deApcParcours
Module
||--o{ApcAppCritique
: choix sur la pagemodule_edit
FormSemestre
||--o{ApcParcours
: choix sur la pageformsemestre_editwithmodules
FormSemestreInscription
||--||ApcParcours
: inscription au parcours, page à créer.
Cas d'usage
UEs à afficher sur les bulletins individuels
En ScoDoc 9.3.55 (ssi ref. comp. associé)
On part de ResultatsSemestreBUT.ues
, qui est la version cachée de
formsemestre.query_ues()
(toutes les UE du semestre) que l'on filtre
avec ResultatsSemestreBUT.etud_ues_ids(etudid)
: liste des id d'UE auxquelles
l'étudiant est inscrit (sans bonus).
etud_ues_ids()
accède à ResultatsSemestreBUT.ues_inscr_parcours_df
, la
matrice d'inscriptions (etuds, ue)
.
UEs à afficher sur les tableaux récap. de semestre
TODO
UEs à valider en jury BUT
TODO
Niveau de compétence d'un formsemestre
Le formsemestre est lié à un ensemble d'ApcParcours
.
La liste des niveaux (ApcNiveau
) associés aux UEs:
[ ue.niveau_competence
for ue in formsemestre.query_ues() if ue.niveau_competence ]
Inscription d'un étudiant aux ModuleImpls
L'inscription reste libre (chaque individu peut être inscrit à un sous-ensemble
quelconque des ModuleImpl
du FormSemestre
), mais il sera commode de pouvoir:
-
Créer des groupes de parcours (via
edit_partition_form
) -
Inscrire les étudiants d'un groupe à tous les modimpls du parcours: Les modimpls d'un parcours sont donnés par la méthode
modimpls_parcours
deFormSemestre
.
Comment ScoDoc détermine-t-il les modules d'un parcours ?
Un parcours étant associé à des compétences, et les niveaux compétences à des UE, on peut déterminer, pour un semestre de rang donné, l'ensemble des UE associées à un parcours.
Par ailleurs, chaque niveau de compétence est associé à un ensemble d'AC
(ApcAppCritique
), et chaque module est aussi associé à son ensemble d'AC.
Pour chaque parcours d'un FormSemestre
, on déterminera l'ensemble des ModuleImpl
de ce semestre ayant des AC communs avec ceux des niveaux de compétences
associés aux UE du semestre (sic). Notons que les niveaux de compétences sont
annuels, mais que les ModuleImpl
sont semestriels.
Vérifier que les ModuleImpls d'un parcours couvrent l'ensemble de ses ACs
Vérification utile en fin de formation.
En fin de formation, pour un étudiant
Soit un étudiant inscrit à un parcours. En fin de formation (S6), on peut facilement vérifier que les AC ont été couverts:
- Lister les
ModuleImpl
auxquels l'étudiant a été inscrit dans ses semestres (S1 à S6); - En déduire l'ensemble des AC évalués pour cet étudiant (indépendamment de sa réussite);
- Comparer aux AC du parcours tels que décrits dans le référentiel de compétence.
Au moment de la définition d'une formation
Le parcours du ref. de compétence indique un ensemble d'AC pour chaque niveau
(année). On pourra vérifier que les Module
s de chaque année suffisent à
couvrir le parcours. Mais si les Module
s ne sont pas associés à un parcours,
on ne peut pas aller plus loin.
Lister les UEs d'un parcours d'une formation
# Soit un parcours:
parcour = formation.referentiel_competence.parcours.filter_by(code="ROM").first()
# Listes UEs de ce parcours:
formation.query_ues_parcour(parcour)
# Liste des UEs du semestre 3:
formation.query_ues_parcour(parcour).filter_by(semestre_idx=2)
Lister les regroupements d'UE d'un étudiant (RCUE)
Pour une année donnée: l'étudiant est inscrit dans ScoDoc soit dans le semestre impair, soit pair, soit les deux (il est rare mais pas impossible d'avoir une inscription seulement en semestre pair, par exemple suite à un transfert ou un arrêt temporaire du cursus).
-
Déterminer l'autre semestre: semestre précédent ou suivant de la même année, formation compatible (même référentiel de compétence) dans lequel l'étudiant est inscrit.
-
Construire les couples d'UE (regroupements cohérents): apparier les UE qui ont le même
ApcParcoursNiveauCompetence
.
Un RegroupementCoherentUE
est simplement un couple d'UE du même niveau dans le
cursus (BUT1, BUT2 ou BUT3).
Déterminer si un étudiant peut passer dans l'année suivante
Note: on peut bien sûr toujours forcer le passage, pour traiter les cas particuliers (décision de jury manuelle).
Rappel: le passage est de droit si
- plus de la moitié des niveaux de compétences de l'année sont validés
- aucun regroupement d'UE (niveau de compétence) de l'année < 8 /20
- pour le passage en S5, avoir validé toutes les UE du BUT 1 (S1 et S2).
Il faut donc:
-
Construire les regroupements d'UE et calculer la moyenne des moyennes d'UE (a priori de même poids, cela n'est pas spécifié dans les textes).
-
Vérifier les conditions ci-dessus.
-
Pour le passage en S5, construire l'ensemble des semestres de formations relevant du même référentiel de compétences dans lesquels a été inscrit l'étudiant, et vérifier que les UE de S1 et S2 sont validées.
Cas particulier: formations dont le nombre d'ECTS varie selon le parcours
Ce cas a été soulevé à propos du BUT MMI, qui préconiserait par exemple, au S4, une compétence développer avec 10 ECTS dans le parcours "web", et 5 ECTS dans le parcours "crea".
Si on veut pouvoir utiliser la même formation, et éventuellement mélanger les
étudiants des différents parcours dans le même FormSemestre
(ce qui
simplifierait la gestion des modules communs), il faut modifier la modélisation:
Les ECTS sont actuellement des attributs de UEs.
Il faudrait avoir une association UniteEns
}o..o{ ApcParcours
qui contienne
les valeurs des ECTS.
Enregistrement des validations de compétences
Rappel: validations en formations classiques
Pour toutes les formations, ScoDoc enregistre les validations de semestres et
d'UE, via la classe ScolarFormSemestreValidation
, dont les instances stockent:
etudid, formsemestre_id, code, event_date
et pour les validations de semestres:
assidu, compense_formsemestre_id
ou pour les validations d'UE
ue_id, is_external
Les codes sont définis dans sco_codes_parcours.py
, avec les valeurs: ADC, ADJ, ADM, AJ, ATB, ATJ, ATT, CMP, DEF, NAR, RAT
(voir Gestion des Jurys
DUT).
Validation des niveaux de compétences
Pour le BUT, il faut enregistrer la validation des niveaux de compétences, constitués de regroupements cohérents d'UE ("RCUE"), qui sont les UEs de la même année de parcours associées à la même compétence.
On va stocker les validation des RCUE dans ApcValidationRCUE
:
etudid
formsemestre_id
(dernier déclenchant cette validation).ue_1
,ue_2
: les deux UE associées à ce niveau.ApcParcours
: optionnel, le parcours dans lequel se trouve la compétence.datetime
de la validation.code
de validation:ADM
,CMP
,AJ
.
Rappel: chaque UE est associé à un niveau de compétence
(ue.niveau_competence
), qui doit ici être le même.
Validation des années du BUT
Pour le BUT, ScoDoc enregistre les validations d'années ApcValidationAnnee
etudid
ordre
: 1, 2, 3 pour BUT1, BUT2, BUT3.formsemestre_id
(dernier déclenchant cette validation, None si extérieure)annee_scolaire
(int, année de début, eg 2021 pour "2021-2022")datetime
de la validation.code
de validation:PASD
,PAS1NCI
,RED
,REO
,DEM
,EXC
,ABAN
,ABL
.
Codes préconisés par l'AMUE pour le BUT
On associe lors du jury un code de décision:
-
À chaque UE:
VAL
,COMP
,AJ
,UESBL
. -
À chaque niveau de compétence (RCUE):
VAL
,AJ
,CODJ
. -
À chaque année:
PASD
: Passage en Année Supérieure de Droit (+ de 50% des UE VAL et RCUE Ajourné(s) >=8)PAS1NCI
: Passage en Année Supérieure avec au moins 1 Niveau de Compétence Insuffisant (RCUE<8)RED
: Redoublement de l'annéeREO
: REOrientation - décision automatique (revient à une exclusion), plus de 4 semestres RED ou décision de JuryDEM
: DEMission (lettre de l'étudiant).EXC
: EXClusion, décision réservée à des décisions disciplinairesABAN
: ABANdon constaté (sans lettre de démission)ABL
: Année BLanchie
-
Au diplôme:
ADM
Correspondance avec les codes de ScoDoc
ScoDoc utilise des codes documentés ici.
-
Pour les semestres:
ADM
,ADC
,ADJ
,ATT
,ATB
,ATJ
,AJ
,NAR
. En BUT, pas besoin de codes semestriels. On ajoutera un codeJSD
(Jury Sans Décision) pour simplement indiquer que le jury s'est tenu. Ce code ne sera pas exporté vers Apogée. -
Pour les UEs: codes d'état d'UE
ScoDoc | BUT AMUE | |
---|---|---|
ADM | VAL | UE validée automatiquement |
CMP | COMP | UE validée par compensation |
AJ | AJ | UE ajournée (échec) |
-
| UESBL | blanchissement (non dispo en ScoDoc 9) |
-
Pour les RCUE:
ScoDoc | BUT AMUE | |
---|---|---|
ADM | VAL | validée automatiquement |
CMP | CODJ | Niveau validée par "compensation" ??? |
AJ | AJ | RCUE ajournée (échec) |
Rappel: les codes exportés vers Apogée sont configurables (table de transcodage dans la config générale).
Diagramme de classes
Juste pour rire, car ce diagramme est quasiment inexploitable (dessin réalisé automatiquement en Mermaid).
erDiagram
FormSemestre ||--|{ ModuleImpl : contient
ModuleImpl ||--o{ Evaluation : contient
Module ||--o{ ModuleImpl : ""
Formation ||--o{ UE : ""
UE ||--|{ Module : ""
Formation {
str titre
str acronym
str code
}
Etudiant {
str nom
}
FormSemestre {
int dept_id
str titre
date date_debut
date date_fin
}
Etudiant }|..|{ ModuleImpl : ModuleImplInscription
Etudiant }|..|{ FormSemestre : FormSemestreInscription
FormSemestreInscription ||..o{ ApcParcours : "optionnel"
Formation ||--o{ FormSemestre : ""
ApcReferentielCompetences ||--o{ ApcCompetence : ""
ApcCompetence ||--o{ ApcNiveau : ""
ApcCompetence ||--o{ ApcSituationPro : ""
ApcCompetence ||--o{ ApcComposanteEssentielle : ""
ApcNiveau }o..|| UE : "optionnel"
ApcNiveau ||--o{ ApcAppCritique : ""
ApcAppCritique }o..o{ Module : "optionnel"
ApcReferentielCompetences ||--o{ ApcParcours : ""
ApcParcours ||--o{ ApcAnneeParcours : ""
ApcAnneeParcours {
int ordre
}
ApcCompetence }o--o{ ApcAnneeParcours : "ApcParcoursNiveauCompetence (1,2,3)"
Module }o--o{ ApcParcours : "parcours_modules"
FormSemestre }o--o{ ApcParcours : "parcours_formsemestre"
UE }o..o{ ApcParcours : "pour les ECTS"