Mise à jour modélisation BUT

This commit is contained in:
Emmanuel Viennet 2023-05-12 10:06:10 +02:00
parent f6cbeccd61
commit c0381cf0f9
6 changed files with 273 additions and 158 deletions

View File

@ -5,6 +5,12 @@ posent un certain nombre de problèmes spécifiques liés aux caractéristiques
atypiques du BUT. Nous listons ci-dessous quelques points qu'il est important atypiques du BUT. Nous listons ci-dessous quelques points qu'il est important
d'avoir à l'esprit. d'avoir à l'esprit.
## Compétences et référentiels
Avant toute chose, et avant de tenir un jury BUT, s'assurer que la formation est
bien configurée, liée à son référentiel de compétences et que chaque UE est bien
associée à un niveau de compétence (dans le bon parcours le cas échéant).
## Pas de moyennes générales en BUT ## Pas de moyennes générales en BUT
En BUT, les seules notes définies sans ambigüité sont: En BUT, les seules notes définies sans ambigüité sont:

View File

@ -119,7 +119,7 @@ flask user-password lecteur_rt
puis puis
```bash ```bash
http -a lecteur_rt:azer POST 'http://localhost:5000/ScoDoc/api/tokens' http -a lecteur_rt:mot_de_passe POST 'http://localhost:5000/ScoDoc/api/tokens'
# récupérer le token... # récupérer le token...
http GET http://localhost:5000/ScoDoc/api/RT/formsemestres/query "Authorization:Bearer xxxxxxxxxxx" http GET http://localhost:5000/ScoDoc/api/RT/formsemestres/query "Authorization:Bearer xxxxxxxxxxx"
@ -166,10 +166,18 @@ identifiés par un id unique dans le cache Redis. Ce cache est persistant, il
faut donc invalider les objets quand on écrit des données susceptibles de les faut donc invalider les objets quand on écrit des données susceptibles de les
modifier, et penser à le vider quand on modifie le code. modifier, et penser à le vider quand on modifie le code.
Par exemple: Par exemple:
```
```bash
git pull git pull
flask clear-cache flask clear-cache
``` ```
La commande `redis-cli FLUSHALL` permet aussi de vider le cache sans avoir à La commande `redis-cli FLUSHALL` permet aussi de vider le cache sans avoir à
lancer flask (plus rapide). lancer flask (plus rapide).
!!! note "Voir aussi"
- [Informations pour les développeurs](Internals.md)
- [API ScoDoc 9](ScoDoc9API.md)
- [Modélisation du BUT](ModelisationParcoursBUT.md)
- [Contacts](Contact.md)

View File

@ -1,13 +1,13 @@
# Implémentation des parcours du BUT dans ScoDoc # Implémentation des parcours du BUT dans ScoDoc
Cette page est *destinée aux développeurs* et à tous ceux qui souhaitent Cette page est *destinée aux développeurs* et à tous ceux qui souhaitent
comprendre le fonctionnement du logiciel. Elle ne concerne que les formations comprendre le fonctionnement du logiciel. Elle ne concerne que les formations
BUT, dites dans ScoDoc "APC" (pour *approches par compétences*). 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
ScoDoc est livré avec les référentiels de compétences de tous les parcours de toutes toutes les spécialités de BUT. En effet, ces référentiels sont nationaux,
les spécialités de BUT. En effet, ces référentiels sont nationaux, publiés par publiés par le ministère (voir
le ministère (voir [https://www.enseignementsup-recherche.gouv.fr/fr/bo/22/Special4/ESRS2211617A.htm](https://www.enseignementsup-recherche.gouv.fr/fr/bo/22/Special4/ESRS2211617A.htm))
[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](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. et ne sont pas susceptibles d'adaptations locales.
Nous nous sommes basés sur les versions exportées du logiciel Orébut. Nous nous sommes basés sur les versions exportées du logiciel Orébut.
@ -26,28 +26,40 @@ est publiée (2/3) par le ministère, le reste est défini localement par les
universités (*adaptation locale*). universités (*adaptation locale*).
Les formations ScoDoc (`Formation`) sont constituées de Les formations ScoDoc (`Formation`) sont constituées de
- UE : `UniteEns`
- Modules (ressources, SAÉ, autres): `Module` - UE : `UniteEns`
- Modules (ressources, SAÉ, autres): `Module`
La formation définit les UE et modules pour l'ensemble 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 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 mêmes éléments dans plusieurs parcours, et grouper les étudiants de plusieurs
parcours dans le même semestre si on le souhaite. 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 ## Unités d'enseignement
Les UE sont des UE "LMD" habituelles; associées à des crédits ECTS, 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 capitalisables. Pour chaque UE on calcule une note (moyenne d'UE) et on attribue
une décision de jury (validée, ajournée, ...). une décision de jury (validée, ajournée, ...).
### ECTS et parcours
Les ECTS sont toujours associés aux UEs, et non au semestre ou aux modules.
Dans ScoDoc, il est obligatoire de spécifier le nombre d'ECTS des de chaque UE
(sauf les UE bonus qui n'ont jamais d'ECTS).
Le nombre d'ECTS est généralement fixe, mais il peut varier selon le parcours
!!! note "ECTS variable 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".
Cette possibilité est prévue pour ScoDoc version 9.4.72
Chaque UE a un attribut ECTS qui donne la valeur par défaut. On a aussi une
valeur ECTS dans la table d'association `UEParcours`qui lie `UniteEns` et
`ApcParcours`.
Si cette valeur est présente, l'attribut ECTS de l'UE est ignoré.
## Modules et parcours ## Modules et parcours
@ -66,26 +78,29 @@ auxquels inscrire un groupe).
### Cas des modules présents dans plusieurs parcours ### Cas des modules présents dans plusieurs parcours
Si un module est utilisé dans plusieurs parcours de la même formation BUT, cela Il est fréquent qu'un module peut être utilisé dans plusieurs parcours de la
ne pose aucun problème, _sauf_ si ce module doit avoir des coefficients (vers même formation BUT. Il peut contribuer à une UE de tronc commun, ou un
les UEs) différents selon le parcours dans lequel il intervient. Dans ce cas, sous-ensemble d'UEs. Dans certains spécialités, le coefficient d'un module vers
*il sera conseillé de créer plusieurs versions du module*, que l'on associera une UE varie selon le parcours: dans ce cas, il faudra créer plusieurs UEs
aux divers parcours. associées au même niveau de compétence, et renseigner les coefficients
correspondants. les étudiants seront inscrits à l'une ou l'autre des UEs suivant
leur parcours.
## Coefficients modules / UEs ## Coefficients modules / UEs
Les coefficients sont des réels (non nullables), `ModuleUECoef`. Les coefficients sont des réels (non nullables), `ModuleUECoef`.
Édition via *Formation*/*Édition des coefficients des modules vers les UEs*:<br> Édition via *Formation*/*Édition des coefficients des modules vers les UEs*:<br>
<img src="/fig/formation_edit_coefs.png" width="30%"> <img src="/fig/formation_edit_coefs.png" width="30%">
## Formation ## Formation
Le programme de formation est constitué des classes suivantes (en BUT et dans 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). tous les types de formation. La notion de "matière" n'est pas utilisée en BUT).
- `Formation` (ex: "BUT R&T") - `Formation` (ex: "BUT R&T")
- `UniteEns` (UE, ex: "Administrer les réseaux") - `UniteEns` (UE, ex: "Administrer les réseaux")
- `Modules` (ressources, SAÉs) *<-> `ApcAppCritique`*, *<-> `ApcAnneeParcours`* - `Modules` (ressources, SAÉs) *<-> `ApcAppCritique`*, *<-> `ApcAnneeParcours`*
On voit que les modules ont toujours une UE de rattachement. Cependant, en BUT, 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 un module peut intervenir dans le calcul des notes de plusieurs UE, via une
@ -96,39 +111,90 @@ matrice de coefficients.
parcours de la formation. parcours de la formation.
## Référentiel de compétences ## Référentiel de compétences
Le référentiel de compétences (`ApcReferentielCompetences`) défini les Le référentiel de compétences (`ApcReferentielCompetences`) défini les
compétences à valider (décomposées en niveaux) et les parcours BUT compétences à valider (décomposées en niveaux) et les parcours BUT
(`ApcParcours`). Il est structuré ainsi: (`ApcParcours`). Il est structuré ainsi:
- `ApcReferentielCompetences` - `ApcReferentielCompetences`
- `ApcCompetence` - `ApcCompetence`
- `ApcSituationPro` - `ApcSituationPro`
- `ApcComposanteEssentielle` - `ApcComposanteEssentielle`
- `ApcNiveau` (année (BUT1, BUT2, ...), ordre (1,2) ou (1,2,3)) *<-> `UE`* - `ApcNiveau` (année (BUT1, BUT2, ...), ordre (1,2) ou (1,2,3)) *<-> `UE`*
- `ApcAppCritique` *<-> `Module`* - `ApcAppCritique` *<-> `Module`*
- `ApcParcours` - `ApcParcours`
- `ApcAnneeParcours` (ordre=1,2,3) *<-> `Module`* - `ApcAnneeParcours` (ordre=1,2,3) *<-> `Module`*
- *`ApcCompetence`* <- `ApcParcoursNiveauCompetence` (niveau 1, 2, 3) -> *`ApcAnneeParcours`* - *`ApcCompetence`* <- `ApcParcoursNiveauCompetence` (niveau 1, 2, 3) -> *`ApcAnneeParcours`*
Notons: Notons:
- Le lien entre UE et Niveau de compétence (`ApcNiveau`). - Le lien (*one-to-one*) entre `UniteEns`(UE) et Niveau de compétence (`ApcNiveau`).
- Le lien à entre Compétence et Année de Parcours à travers la table - Le lien entre Compétence et Année de Parcours à travers la table
(*many-to-many*) `ApcParcoursNiveauCompetence` qui indique le niveau ce (*many-to-many*) `ApcParcoursNiveauCompetence` qui indique le niveau ce
compétence concerné. compétence concerné.
- Le lien entre les apprentissages critiques (`ApcAppCritique`) et les - Le lien *many-to-many* UE et `Parcours`, qui permet de spécifier les ECTS de
l'UE dans un parcours donné et est utilisé pour vérifier la formation
(couverture de tous les niveau en suivant un parcours donné, somme des ECTS).
- Le lien entre les apprentissages critiques (`ApcAppCritique`) et les
modules, qui permet d'établir les critères d'évaluation de chaque module. modules, qui permet d'établir les critères d'évaluation de chaque module.
### Niveaux de compétences et UEs
Une compétence est constituée de plusieurs niveaux (`ApcNiveau`), typiquement 2
ou 3. En BUT, chaque niveau correspond à deux UEs sur deux semestres de la même
année d'un parcours.
- 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).
Lors des jurys, on enregistre les validations d'UE. Les UE sont liées à des
niveaux de compétences. Lorsque les deux UEs sont validées, le niveau est
validé: c'est le RCUE (*regroupement cohérents d'UEs*).
Pour valider un diplôme de BUT, il faut avoir validé tous les niveaux de toutes
les compétences du parcours choisi.
Une UE est associée à un et un seul niveau de compétence. Elle peut être
associée à un nombre quelconque de parcours.
Remarques:
- Certains niveaux (et donc UEs) sont présents dans tous les parcours: ce sont
les niveaux de *tronc commun*.
- Une UE associée à un niveau peut avoir des ECTS différents selon le parcours
(voir [note ci-dessus](#ects-et-parcours))
- Dans certaines spécialités, les coefficients des modules vers la même UE
peuvent varier selon le parcours. Dans ce cas, on créera une UE par parcours
(UE associée au même niveau), afin de pouvoir spécifier des coefficients
distincts.
#### Vérifications effectués par ScoDoc
En plus des contraintes strictes liées aux relations modélisées,
ScoDoc vérifiera que
- Dans une formation, chaque niveau d'un parcours soit associé à deux et
seulement deux UEs de ce parcours de la même année scolaires (BUT1, BUT2 ou
BUT3).
- Le nombre total d'ECTS de chaque parcours soit bien 180 (3 années de 60 ECTS).
- Toutes les UEs sont bien associée à un niveau.
## FormSemestres ## FormSemestres
La formation est mise en œuvre dans des `FormSemestre` (date début, fin, La formation est mise en œuvre dans des `FormSemestre` (date début, fin,
enseignants responsables, ...) constitués de `ModuleImpl` (module avec enseignant, enseignants responsables, ...) constitués de `ModuleImpl` (module avec enseignant,
évaluations, ...). évaluations, ...).
- `FormSemestre` - `FormSemestre`
- `ModuleImpl` - `ModuleImpl`
- `Evaluation` - `Evaluation`
On a vu que la formation pouvait comporter plusieurs parcours. Un `FormSemestre` 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 peut implémenter un ou plusieurs parcours. On a en effet une table d'association
@ -144,16 +210,16 @@ Via *Semestre*/*Modifier le semestre*:<br>
l'étudiant dans ce semestre BUT en fonction du parcours dans lequel il est l'étudiant dans ce semestre BUT en fonction du parcours dans lequel il est
inscrit. inscrit.
## Inscriptions des étudiants ## Inscriptions des étudiants
Les étudiants sont inscrits: Les étudiants sont inscrits:
- à des `FormSemestre` (`FormSemestreInscription`, avec: - à des `FormSemestre` (`FormSemestreInscription`, avec:
- un état, "inscrit", "démission" ou "défaillant"; - un état, "inscrit", "démission" ou "défaillant";
- un `ApcParcours`; - un `ApcParcours`;
- un code étape Apogée. - un code étape Apogée.
- dans un ModuleImpl (`ModuleImplInscription`) - dans un ModuleImpl (`ModuleImplInscription`)
Un formsemestre est associé à un ensemble de parcours. L'étudiant peut être 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 inscrit à l'un d'entre eux. Certaines formations commencent par une année de
@ -161,17 +227,28 @@ 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 considérera que si l'étudiant n'est pas inscrit à un parcours, il est
implicitement inscrit à tous les parcours du semestre. implicitement inscrit à tous les parcours du semestre.
## Associations (nouvelles pour le BUT): ## Associations (nouvelles pour le BUT)
Pour la gestion des parcours BUT, on a introduit les associations suivantes, Pour la gestion des parcours BUT, on a introduit les associations suivantes,
qui n'existaient pas dans ScoDoc 9.2: qui n'existaient pas dans ScoDoc 9.2:
- UE <-> `ApcNiveau` : choix sur la page `ue_edit` - `UniteEns` }o--o{ ensemble de `ApcParcours` : choix sur la page `ue_edit`
- `Module` ||--o{ ensemble de `ApcParcours` - `UniteEns` }o--|| `ApcNiveau` : choix sur la page `ue_edit`
- `Module` ||--o{ `ApcAppCritique` : choix sur la page `module_edit` - `Module` ||--o{ ensemble de `ApcParcours`
- `FormSemestre` ||--o{ `ApcParcours` : choix sur la page - `Module` ||--o{ `ApcAppCritique` : choix sur la page `module_edit`
`formsemestre_editwithmodules` - `FormSemestre` ||--o{ `ApcParcours` : choix sur la page
- `FormSemestreInscription` ||--|| `ApcParcours` : inscription au parcours, page à créer. `formsemestre_editwithmodules`
- `FormSemestreInscription` ||--|| `ApcParcours` : inscription au parcours, géré
via la partition `Parcours`.
```mermaid
erDiagram
UniteEns }o--o{ ApcParcours : UEParcours
UniteEns }o--|| ApcNiveau : ""
Formation ||--o{ UniteEns : ""
FormSemestre }o--|| Formation : ""
UniteEns }o--|{ Module : ModuleUECoef
```
## Cas d'usage ## Cas d'usage
@ -188,35 +265,39 @@ l'étudiant est inscrit (sans bonus).
matrice d'inscriptions `(etuds, ue)`. matrice d'inscriptions `(etuds, ue)`.
### UEs à afficher sur les tableaux récap. de semestre ### UEs à afficher sur les tableaux récap. de semestre
TODO TODO
### UEs à valider en jury BUT ### UEs à valider en jury BUT
TODO
TODO
### Niveau de compétence d'un formsemestre ### Niveau de compétence d'un formsemestre
Le formsemestre est lié à un ensemble d'`ApcParcours`. Le formsemestre est lié à un ensemble d'`ApcParcours`.
La liste des niveaux (`ApcNiveau`) associés aux UEs: La liste des niveaux (`ApcNiveau`) associés aux UEs:
```
```py
[ ue.niveau_competence [ ue.niveau_competence
for ue in formsemestre.query_ues() if ue.niveau_competence ] for ue in formsemestre.query_ues() if ue.niveau_competence ]
``` ```
### Inscription d'un étudiant aux ModuleImpls ### Inscription d'un étudiant aux ModuleImpls
L'inscription reste libre (chaque individu peut être inscrit à un sous-ensemble L'inscription reste libre (chaque individu peut être inscrit à un sous-ensemble
quelconque des `ModuleImpl` du `FormSemestre`), mais il sera commode de pouvoir: quelconque des `ModuleImpl` du `FormSemestre`), mais il sera commode de pouvoir:
- Créer des groupes de parcours (via `edit_partition_form`) - Créer des groupes de parcours (via `edit_partition_form`)
- Inscrire les étudiants d'un groupe à tous les modimpls du parcours: - 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` de Les modimpls d'un parcours sont donnés par la méthode `modimpls_parcours` de
`FormSemestre`. `FormSemestre`.
### Comment ScoDoc détermine-t-il les modules d'un parcours ? ### Comment ScoDoc détermine-t-il les modules d'un parcours ?
Un parcours étant associé à des compétences, et les niveaux compétences à des 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 UE, on peut déterminer, pour un semestre de rang donné, l'ensemble des UEs
associées à un parcours. associées à un parcours.
Par ailleurs, chaque niveau de compétence est associé à un ensemble d'AC Par ailleurs, chaque niveau de compétence est associé à un ensemble d'AC
@ -236,11 +317,11 @@ Vérification utile en fin de formation.
Soit un étudiant inscrit à un parcours. En fin de formation (S6), on peut Soit un étudiant inscrit à un parcours. En fin de formation (S6), on peut
facilement vérifier que les AC ont été couverts: facilement vérifier que les AC ont été couverts:
- Lister les `ModuleImpl` auxquels l'étudiant a été inscrit dans ses semestres - Lister les `ModuleImpl` auxquels l'étudiant a été inscrit dans ses semestres
(S1 à S6); (S1 à S6);
- En déduire l'ensemble des AC évalués pour cet étudiant (indépendamment de sa - En déduire l'ensemble des AC évalués pour cet étudiant (indépendamment de sa
réussite); réussite);
- Comparer aux AC du parcours tels que décrits dans le référentiel de compétence. - 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 #### Au moment de la définition d'une formation
@ -250,7 +331,8 @@ couvrir le parcours. Mais si les `Module`s ne sont pas associés à un parcours,
on ne peut pas aller plus loin. on ne peut pas aller plus loin.
### Lister les UEs d'un parcours d'une formation ### Lister les UEs d'un parcours d'une formation
```
```py
# Soit un parcours: # Soit un parcours:
parcour = formation.referentiel_competence.parcours.filter_by(code="ROM").first() parcour = formation.referentiel_competence.parcours.filter_by(code="ROM").first()
# Listes UEs de ce parcours: # Listes UEs de ce parcours:
@ -283,9 +365,9 @@ particuliers (décision de jury manuelle).
**Rappel:** le passage est de droit si **Rappel:** le passage est de droit si
- [x] plus de la moitié des niveaux de compétences de l'année sont validés - [x] plus de la moitié des niveaux de compétences de l'année sont validés
- [x] aucun regroupement d'UE (niveau de compétence) de l'année < 8 /20 - [x] aucun regroupement d'UE (niveau de compétence) de l'année < 8 /20
- [x] pour le passage en S5, avoir validé toutes les UE du BUT 1 (S1 et S2). - [x] pour le passage en S5, avoir validé toutes les UE du BUT 1 (S1 et S2).
Il faut donc: Il faut donc:
@ -298,36 +380,22 @@ Il faut donc:
relevant du même référentiel de compétences dans lesquels a été inscrit 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. 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 ## Enregistrement des validations de compétences
### Rappel: validations en formations classiques ### Rappel: validations en formations classiques
Pour toutes les formations, ScoDoc enregistre les validations de semestres et Pour toutes les formations, ScoDoc enregistre les validations de semestres et
d'UE, via la classe `ScolarFormSemestreValidation`, dont les instances stockent: d'UE, via la classe `ScolarFormSemestreValidation`, dont les instances stockent:
- `etudid, formsemestre_id, code, event_date` - `etudid, formsemestre_id, code, event_date`
et pour les validations de semestres: et pour les validations de semestres:
- `assidu, compense_formsemestre_id` - `assidu, compense_formsemestre_id`
ou pour les validations d'UE ou pour les validations d'UE
- `ue_id, is_external` - `ue_id, is_external`
Les codes sont définis dans `sco_codes_parcours.py`, avec les valeurs: `ADC, 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 ADJ, ADM, AJ, ATB, ATJ, ATT, CMP, DEF, NAR, RAT` (voir [Gestion des Jurys
@ -341,64 +409,64 @@ même année de parcours associées à la même compétence.
On va stocker les validation des RCUE dans `ApcValidationRCUE`: On va stocker les validation des RCUE dans `ApcValidationRCUE`:
- `etudid` - `etudid`
- `formsemestre_id` (dernier déclenchant cette validation). - `formsemestre_id` (dernier déclenchant cette validation).
- `ue_1`, `ue_2` : les deux UE associées à ce niveau. - `ue_1`, `ue_2` : les deux UE associées à ce niveau.
- `ApcParcours` : optionnel, le parcours dans lequel se trouve la compétence. - `ApcParcours` : optionnel, le parcours dans lequel se trouve la compétence.
- `datetime` de la validation. - `datetime` de la validation.
- `code` de validation: `ADM`, `CMP`, `AJ`. - `code` de validation: `ADM`, `CMP`, `AJ`.
Rappel: chaque UE est associé à un niveau de compétence Rappel: chaque UE est associé à un niveau de compétence
(`ue.niveau_competence`), qui doit ici être le même. (`ue.niveau_competence`), qui doit ici être le même.
### Validation des années du BUT ### Validation des années du BUT
Pour le BUT, ScoDoc enregistre les validations d'années `ApcValidationAnnee` Pour le BUT, ScoDoc enregistre les validations d'années `ApcValidationAnnee`
- `etudid` - `etudid`
- `ordre`: 1, 2, 3 pour BUT1, BUT2, BUT3. - `ordre`: 1, 2, 3 pour BUT1, BUT2, BUT3.
- `formsemestre_id` (dernier déclenchant cette validation, None si extérieure) - `formsemestre_id` (dernier déclenchant cette validation, None si extérieure)
- `annee_scolaire` (int, année de début, eg 2021 pour "2021-2022") - `annee_scolaire` (int, année de début, eg 2021 pour "2021-2022")
- `datetime` de la validation. - `datetime` de la validation.
- `code` de validation: `PASD`, `PAS1NCI`, `RED`, `REO`, `DEM`, `EXC`, `ABAN`, `ABL`. - `code` de validation: `PASD`, `PAS1NCI`, `RED`, `REO`, `DEM`, `EXC`, `ABAN`, `ABL`.
### Codes préconisés par l'AMUE pour le BUT ### Codes préconisés par l'AMUE pour le BUT
On associe lors du jury un code de décision: On associe lors du jury un code de décision:
- À chaque UE: `VAL`, `COMP`, `AJ`, `UESBL`. - À chaque UE: `VAL`, `COMP`, `AJ`, `UESBL`.
- À chaque niveau de compétence (RCUE): `VAL`, `AJ`, `CODJ`. - À chaque niveau de compétence (RCUE): `VAL`, `AJ`, `CODJ`.
- À chaque année: - À 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ée
- `REO`: REOrientation - décision automatique (revient à une exclusion), plus de 4 semestres RED ou décision de Jury
- `DEM`: DEMission (lettre de l'étudiant).
- `EXC`: EXClusion, décision réservée à des décisions disciplinaires
- `ABAN`: ABANdon constaté (sans lettre de démission)
- `ABL`: Année BLanchie
- Au diplôme: `ADM`
- `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ée
- `REO`: REOrientation - décision automatique (revient à une exclusion), plus de 4 semestres RED ou décision de Jury
- `DEM`: DEMission (lettre de l'étudiant).
- `EXC`: EXClusion, décision réservée à des décisions disciplinaires
- `ABAN`: ABANdon constaté (sans lettre de démission)
- `ABL`: Année BLanchie
- Au diplôme: `ADM`
#### Correspondance avec les codes de ScoDoc #### Correspondance avec les codes de ScoDoc
ScoDoc utilise des codes [documentés ici](GestionJury.md). ScoDoc utilise des codes [documentés ici](GestionJury.md).
- Pour les semestres: `ADM`, `ADC`, `ADJ`, `ATT`, `ATB`, `ATJ`, `AJ`, `NAR`. En - Pour les semestres: `ADM`, `ADC`, `ADJ`, `ATT`, `ATB`, `ATJ`, `AJ`, `NAR`. En
BUT, pas besoin de codes semestriels. On ajoutera un code `JSD` (*Jury Sans BUT, pas besoin de codes semestriels. On ajoutera un code `JSD` (*Jury Sans
Décision*) pour simplement indiquer que le jury s'est tenu. Ce code ne sera pas Décision*) pour simplement indiquer que le jury s'est tenu. Ce code ne sera pas
exporté vers Apogée. exporté vers Apogée.
- Pour les UEs: **codes d'état d'UE** - Pour les UEs: **codes d'état d'UE**
ScoDoc | BUT AMUE | &nbsp; ScoDoc | BUT AMUE | &nbsp;
----------|-----|----- ----------|-----|-----
ADM | VAL | UE validée automatiquement | ADM | VAL | UE validée automatiquement |
CMP | COMP| UE validée par compensation| CMP | COMP| UE validée par compensation|
AJ | AJ | UE ajournée (échec) | AJ | AJ | UE ajournée (échec) |
- | UESBL | blanchissement (non dispo en ScoDoc 9) | | UESBL | blanchissement (non dispo en ScoDoc 9) |
- Pour les RCUE: - Pour les RCUE:
ScoDoc | BUT AMUE | &nbsp; ScoDoc | BUT AMUE | &nbsp;
----------|-----|----- ----------|-----|-----
@ -409,11 +477,10 @@ AJ | AJ | RCUE ajournée (échec) |
Rappel: les codes exportés vers Apogée sont configurables (table de transcodage dans la Rappel: les codes exportés vers Apogée sont configurables (table de transcodage dans la
config générale). config générale).
## Diagramme de classes ## Diagramme de classes
Juste pour rire, car ce diagramme est quasiment inexploitable (dessin réalisé (dessin réalisé automatiquement en Mermaid; toutes les classes ScoDoc ne
automatiquement en Mermaid). figurent pas ici).
```mermaid ```mermaid
erDiagram erDiagram
@ -429,6 +496,8 @@ erDiagram
str code str code
} }
ApcReferentielCompetences ||--|{ Formation : ""
Etudiant { Etudiant {
str nom str nom
} }
@ -450,7 +519,7 @@ erDiagram
ApcCompetence ||--o{ ApcNiveau : "" ApcCompetence ||--o{ ApcNiveau : ""
ApcCompetence ||--o{ ApcSituationPro : "" ApcCompetence ||--o{ ApcSituationPro : ""
ApcCompetence ||--o{ ApcComposanteEssentielle : "" ApcCompetence ||--o{ ApcComposanteEssentielle : ""
ApcNiveau }o..|| UE : "optionnel" ApcNiveau ||..o{ UE : ""
ApcNiveau ||--o{ ApcAppCritique : "" ApcNiveau ||--o{ ApcAppCritique : ""
ApcAppCritique }o..o{ Module : "optionnel" ApcAppCritique }o..o{ Module : "optionnel"
@ -458,12 +527,19 @@ erDiagram
ApcParcours ||--o{ ApcAnneeParcours : "" ApcParcours ||--o{ ApcAnneeParcours : ""
ApcAnneeParcours { ApcAnneeParcours {
int ordre int ordre "année BUT"
} }
ApcCompetence }o--o{ ApcAnneeParcours : "ApcParcoursNiveauCompetence (1,2,3)" ApcCompetence }o--o{ ApcAnneeParcours : "ApcParcoursNiveauCompetence (1,2,3)"
Module }o--o{ ApcParcours : "parcours_modules" Module }o--o{ ApcParcours : "parcours_modules"
FormSemestre }o--o{ ApcParcours : "parcours_formsemestre" FormSemestre }o--o{ ApcParcours : "parcours_formsemestre"
UE }o..o{ ApcParcours : "pour les ECTS" UE }o--o{ ApcParcours : "avec en option ECTS"
``` ```
!!! note "Voir aussi"
- [Informations pour les développeurs](Internals.md)
- [API ScoDoc 9](ScoDoc9API.md)
- [Le Bachelor Universitaire de Technologie (BUT)](BUT.md)
- [Contacts](Contact.md)

View File

@ -1,5 +1,5 @@
# Paramétrage des bulletins de notes # Paramétrage des bulletins de notes
Ces réglages permettent de configurer la présentation des relevés de notes au Ces réglages permettent de configurer la présentation des relevés de notes au
format PDF. format PDF.
@ -20,7 +20,7 @@ paramétrables à l'aide de formats utilisant un balisage XML assez simple.
## Marges et position du pied de page ## Marges et position du pied de page
Les bulletins sont formattés pour du papier A4. Les bulletins sont formatés pour du papier A4.
Les marges sont réglables via les valeurs dans la section "Marges additionnelles Les marges sont réglables via les valeurs dans la section "Marges additionnelles
des bulletins". Ces valeurs s'ajoutent aux marges par défaut qui sont assez des bulletins". Ces valeurs s'ajoutent aux marges par défaut qui sont assez
@ -109,7 +109,7 @@ Variable | &nbsp;
date_dmy | date courante, au format jj/mm/aaaa date_dmy | date courante, au format jj/mm/aaaa
date_iso | date courante, au format aaaa-mm-jj date_iso | date courante, au format aaaa-mm-jj
## Balises XML utilisées dans les formats ## Balises XML utilisées dans les formats
Le balisage XML est celui de [ReportLab](http://www.reportlab.com/) Le balisage XML est celui de [ReportLab](http://www.reportlab.com/)
(intra-paragraph markup, voir page 70 du [guide (intra-paragraph markup, voir page 70 du [guide
@ -168,13 +168,16 @@ Notez qu'il est possible de ne préciser que l'une des deux dimensions hauteur o
largeur. Dans ce cas, la dimension manquante est déduite du ratio (rapport largeur. Dans ce cas, la dimension manquante est déduite du ratio (rapport
hauteur/largeur) de l'image originale. Voir un exemple d'utilisation plus bas. hauteur/largeur) de l'image originale. Voir un exemple d'utilisation plus bas.
### Fond de page. ### Fond de page
Les modalités d'utilisation des fonds de pages sont similaires pour les PV, les lettres individuelles de décision et les bulletins.
Celles-ci sont décrites ici: [Paramétrage des PV. Images de fond de page](ParametragePV.md) Les modalités d'utilisation des fonds de pages sont similaires pour les PV, les
lettres individuelles de décision et les bulletins. Celles-ci sont décrites ici:
[Paramétrage des PV. Images de fond de page](ParametragePV.md)
## Exemples ## Exemples
### Exemple 1: Bulletins par défaut ### Exemple 1: Bulletins par défaut
Les bulletins édités par défaut sont obtenus avec: Les bulletins édités par défaut sont obtenus avec:
* Paragraphe de titre: * Paragraphe de titre:
@ -221,9 +224,8 @@ Année scolaire: %(anneescolaire)s
</para> </para>
``` ```
### Exemple 2: ancien bulletins
### Exemple 2: ancien bulletins
Les bulletins édités par défaut avant le 20/9/2009 étaient obtenus avec: Les bulletins édités par défaut avant le 20/9/2009 étaient obtenus avec:
* Paragraphe de titre: * Paragraphe de titre:
@ -259,7 +261,8 @@ Les bulletins édités par défaut avant le 20/9/2009 étaient obtenus avec:
``` ```
### Exemple 3: en-tête avec logo ### Exemple 3: en-tête avec logo
Même structure que le premier exemple, avec un logo. Notez que les dimensions du logo (en mm ou cm) doivent avoir le même rapport (hauteur/largeur) que l'image utilisée, sans quoi l'apparence est déformée. Même structure que le premier exemple, avec un logo. Notez que les dimensions du logo (en mm ou cm) doivent avoir le même rapport (hauteur/largeur) que l'image utilisée, sans quoi l'apparence est déformée.
* Paragraphe de titre: * Paragraphe de titre:
@ -284,3 +287,12 @@ Année scolaire: %(anneescolaire)s
</para> </para>
``` ```
!!! note "Voir aussi"
- [Gestion des logos](GestionLogos.md)
- [Guide administrateur ScoDoc](GuideAdminSys.md)
- [Guide du responsable de formation](GuideAdminFormation.md)
- [Guide utilisateur](GuideUtilisateur.md)
- [Contacts](Contact.md)
- <a href="https://www.youtube.com/playlist?list=PLw49h6RbvswhasBk9bXj7PzOD8GDW3kG1" target="_blank">Tutoriels sur YouTube <img src="/img/tube.png" alt="" style="margin-top:0px; margin-bottom:0px; border-width:0px;"/></a>

View File

@ -30,9 +30,14 @@ L'URL complète est de la forme:
Il est nécessaire de disposer d'un compte utilisateur avec les droits adéquats. Il est nécessaire de disposer d'un compte utilisateur avec les droits adéquats.
Les droits à accorder dépendent des fonctionnalités nécessaires. la permission `ScoView` est généralement suffisante car elle permet toutes les consultations. Les droits à accorder dépendent des fonctionnalités nécessaires. la permission
Cependant si, par l'API, on veut effectuer des opérations de modification ou encore consulter les comptes utilisateurs, d'autres droits (`ScoChangeGroups`, `ScoUsersView`, `ScoSuperAdmin`, ...) peuvent être requis. `ScoView` est généralement suffisante car elle permet toutes les consultations.
La consultation du [tableau récapitulatif](#tableau-recapitulatif-des-entrees-de-lapi) ou la ligne `permission`de chaque entrée vous donnera la permission requise pour chaque opération. Cependant si, par l'API, on veut effectuer des opérations de modification ou
encore consulter les comptes utilisateurs, d'autres droits (`ScoChangeGroups`,
`ScoUsersView`, `ScoSuperAdmin`, ...) peuvent être requis. La consultation du
[tableau récapitulatif](#tableau-recapitulatif-des-entrees-de-lapi) ou la ligne
`permission`de chaque entrée vous donnera la permission requise pour chaque
opération.
En général, il est recommandé de créer un rôle, de lui attribuer les permissions En général, il est recommandé de créer un rôle, de lui attribuer les permissions
que l'on veut utiliser, puis de créer un utilisateur ayant ce rôle. que l'on veut utiliser, puis de créer un utilisateur ayant ce rôle.
@ -40,7 +45,7 @@ que l'on veut utiliser, puis de créer un utilisateur ayant ce rôle.
En ligne de commande, cela peut se faire comme suit (voir détail des commandes En ligne de commande, cela peut se faire comme suit (voir détail des commandes
[sur le guide de configuration](GuideConfig.md)). [sur le guide de configuration](GuideConfig.md)).
``` ```bash
# se connecter comme utilisateur scodoc # se connecter comme utilisateur scodoc
su - scodoc su - scodoc
@ -68,7 +73,7 @@ Si vous êtes intéressé par le développement, voir
* [la section sur les tests unitaires de l'API](TestsScoDoc.md#tests-de-lapi-scodoc9); * [la section sur les tests unitaires de l'API](TestsScoDoc.md#tests-de-lapi-scodoc9);
* [la documentation interne](Internals.md#vues-de-lapi-et-permissions). * [la documentation interne](Internals.md#vues-de-lapi-et-permissions).
!!! note "Voir aussi" !!! note
- Si vous utilisez le CAS, pensez à laisser les comptes utilisateurs API se - Si vous utilisez le CAS, pensez à laisser les comptes utilisateurs API se
connecter via ScoDoc sans CAS. Pour cela, cocher l'option connecter via ScoDoc sans CAS. Pour cela, cocher l'option
@ -143,8 +148,8 @@ L'API est accessible à l'adresse:
`https://scodoc.monsite.tld/ScoDoc/api/<fonction>`, et aussi via les *routes `https://scodoc.monsite.tld/ScoDoc/api/<fonction>`, et aussi via les *routes
départementales* de la forme départementales* de la forme
`https://scodoc.monsite.tld/ScoDoc/<dept_acronyme>/api/<fonction>` pour un accès `https://scodoc.monsite.tld/ScoDoc/<dept_acronyme>/api/<fonction>` pour un accès
avec des droits restreints au département indiqué. La liste des `<fonction>` est avec des droits restreints au département indiqué. La liste des `<fonctions>` est
donnée dans [Référence](#reference). donnée ci-dessous dans [Référence](#reference).
#### Authentification #### Authentification

View File

@ -58,6 +58,14 @@ peu différent de celui des tests unitaire: on test un *client* de l'API. Il fau
donc un serveur, tournant sur la même machine ou sur une machine distante. Ce donc un serveur, tournant sur la même machine ou sur une machine distante. Ce
serveur doit avoir été configuré avec des données de test. serveur doit avoir été configuré avec des données de test.
### TL;DR
Si votre install de développement est bien configurée, il suffit de lancer
```bash
tools/test_api.sh
```
### Configuration du serveur pour tester l'API ### Configuration du serveur pour tester l'API
1. modifier `/opt/scodoc/.env` pour indiquer 1. modifier `/opt/scodoc/.env` pour indiquer