From 2e44ff4f51cf4e34d727d41e39517a8ca17f0565 Mon Sep 17 00:00:00 2001 From: viennet Date: Fri, 19 Nov 2021 11:18:02 +0100 Subject: [PATCH] Documention future API REST --- .gitignore | 194 +++++++++++++++++++++++++++++- docs/ScoDoc9API.md | 294 ++++++++++++++++++++++----------------------- 2 files changed, 337 insertions(+), 151 deletions(-) diff --git a/.gitignore b/.gitignore index 485dee6..a1414d4 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,193 @@ -.idea +# ---> Emacs +# -*- mode: gitignore; -*- +*~ +\#*\# +/.emacs.desktop +/.emacs.desktop.lock +*.elc +auto-save-list +tramp +.\#* + +# Org-mode +.org-id-locations +*_archive + +# flymake-mode +*_flymake.* + +# eshell files +/eshell/history +/eshell/lastdir + +# elpa packages +/elpa/ + +# reftex files +*.rel + +# AUCTeX auto folder +/auto/ + +# cask packages +.cask/ +dist/ + +# Flycheck +flycheck_*.el + + + + +# ---> Python +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# Mac OSX OS generated files +.DS_Store? +Thumbs.db +*.DS_Store + +# Other source repository archive directories (protects when importing) +.hg +.svn +CVS + +# MkDocs ScoDoc +site/ diff --git a/docs/ScoDoc9API.md b/docs/ScoDoc9API.md index 037ddc2..53bb603 100644 --- a/docs/ScoDoc9API.md +++ b/docs/ScoDoc9API.md @@ -12,14 +12,14 @@ L'API fournit des données JSON, sauf exception (bulletins). Les objets ScoDoc manipulables sont identifiés par des id: * etudid: étudiant - * form_id: un programme de formation (page "programmes"); + * formation_id: un programme de formation (page "programmes"); * ue_id: une UE dans un programme; * matiere_id: une matière dans un programme; * module_id: un module dans un programme. - * formsmestre_id: un "semestre" de formation. + * formsemestre_id: un "semestre" de formation. -L'URL complète est de la forme: `https://scodoc.example.com/ScoDoc/api/fonction +L'URL complète est de la forme: `https://scodoc.example.com/ScoDoc/api/fonction`. # Fonctions de l'API ScoDoc 7 portées en ScoDoc 9 @@ -37,10 +37,10 @@ Certaines ont plusieurs "routes" (URl), car ScoDoc 7 tolérait divers accès. - `Absences/XMLgetAbsEtud` (deviendra `api/absences/ etudid>`, en json) - `Notes/evaluation_listenotes` (non existante en ScoDoc9, trop complexe) - `Notes/formsemestre_id` (deviendra `api/formsemestre`) - - `Notes/formsemestre_bulletinetud` (deviendra `api/formsemestre_bulletinetud`) + - `Notes/formsemestre_bulletinetud` (deviendra `api/etud//bul/`) - `Notes/XMLgetFormsemestres` (non existante en ScoDoc9, redondant avec `api/formsemestre` ?) - - `etud_info` ou `XMLgetEtudInfos` ou `Absences/XMLgetEtudInfos` ou `Notes/XMLgetEtudInfos` (deviendra `/api/etud/ etudid>`) - - `groups_view` + - `etud_info` ou `XMLgetEtudInfos` ou `Absences/XMLgetEtudInfos` ou `Notes/XMLgetEtudInfos` (deviendra `/api/etud/`) + - `groups_view` (deviendra `groups`) Les routes ci-dessus s'entendent à partir de l'URL de base de votre ScoDoc, c'est à dire `https://votre.site.fr/ScoDoc//Scolarite/`, et répondent en GET et @@ -49,16 +49,20 @@ en POST. Note: - `Absences/listeBillets` est un formulaire et ne fait pas partie de l'API. -# Résumé des fonctions d'API ScoDoc 9 (work in progress) +# Fonctions d'API ScoDoc 9 (work in progress) Basé sur le ticket [#149](https://scodoc.org/git/viennet/ScoDoc/issues/149) -## Définition des points d'accès à l'API REST (jwt): -**Note: à reformatter: le tableau n'est pas lisible et exploitable** +La documentation ci-dessous concerne la **future** version De ScoDoc. + +## Accès à l'API REST Elle sera accessible à l'adresse: https://scodoc.monsite.tld/ScoDoc/api/fonction -# Codes HTTP +### Authentification + TODO décrire procédure d'authentification et tokens jwt. + +### Codes HTTP Chaque appel à l'API donne lieu à une réponse retournant un code spécifique en fonction du résultat obtenu. L'analyse de ce code vous permet de vous assurer que la requête a été traitée avec succès. Tous les codes >= 400 indiquent que la requête n'a pas été traitée avec succès par nos serveurs. @@ -74,8 +78,6 @@ Tous les codes >= 400 indiquent que la requête n'a pas été traitée avec succ * [503](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/503) : L'API est momentanément indisponible, réessayez dans quelques minutes. -# Description d'accès aux données - ## Départements * **`departement`** * **Méthode:** GET @@ -134,7 +136,7 @@ Tous les codes >= 400 indiquent que la requête n'a pas été traitée avec succ "date_debut": "2008-09-01" } ], - "etudid": "EID8768", + "etudid": "8768", "domicile": "2 Rue Madame", "villedomicile": "Paris", "telephonemobile": "" @@ -142,7 +144,7 @@ Tous les codes >= 400 indiquent que la requête n'a pas été traitée avec succ ``` - * **`etud_bul`** + * **`etud//bul`** * **Méthode:** GET * **Paramètres:** `etudid`, `sem_id` * **Format URL:** `/api/etud//bul/` @@ -152,7 +154,7 @@ Tous les codes >= 400 indiquent que la requête n'a pas été traitée avec succ - * **`etud_photo`** + * **`etud//photo`** * **Méthode:** GET * **Paramètres:** `etudid`, `small` * **Format URL:** `/api/etud//photo` **OU** `/api/etud//photo/small` (_ajout du paramètre **small** pour la version small_) @@ -160,49 +162,23 @@ Tous les codes >= 400 indiquent que la requête n'a pas été traitée avec succ * **Résultat:** Image en JPEG ou PNG. - -## Semestres - * **`sem_info`** - * **Méthode:** GET - * **Paramètres:** `sem_id` - * **Format URL:** `/api/sem_info/` - * **Exemple d'utilisation:** `/api/sem_info/12` - * **Résultat:** Une liste avec les informations du semestre correspondant à l'id passé en paramètres. - * **Exemple de résultat:** - ``` - [ - { - "titre": "DUT Génie Electrique et Informatique Industrielle", - "date_debut": "2021-09-01", - "date_fin": "2022-02-02", - "modalite": "FI", - "sem_id_txt": "S3", - "titre_num": "DUT Génie Electrique et Informatique Industrielle semestre 3", - "anneescolaire": "2021 - 2022", - "periode": 1, - "titreannee": "DUT Génie Electrique et Informatique Industrielle semestre 3 FI 2021-2022" - } - ] - ``` - - - ## Programmes de formations * **`formation`** * **Méthode:** GET - * **Paramètres:** `form_id` (_optionnel, si absent liste toutes les formations_) - * **Format URL:** `/api/formation` **ou** `/api/formation/` - * **Exemple d'utilisation:** `/api/formation` **ou** `̀/api/formation/1` + * **Paramètres:** `formation_id` (_optionnel, si absent liste toutes les formations_) + * **Format URL:** `/api/formation` **ou** `/api/formation/` + * **Exemple d'utilisation:** `/api/formation` **ou** `/api/formation/1` * **Résultat:** Liste des formations. * **Exemple de résultat:** `[formation_1, formation_2, formation_3, ...]` + * TODO: détailler le contenu publié * **`formation_export`** * **Méthode:** GET - * **Paramètres:** `form_id`, `export_ids` (_par défaut "faux"_) - * **Format URL:** `/api/formation_export/` - * **Exemple d'utilisation:** `/api/formation_export/596` + * **Paramètres:** `formation_id`, `export_ids` (_par défaut "faux"_) + * **Format URL:** `/api/formation_export/` + * **Exemple d'utilisation:** `/api/formation_export/596` **ou** `/api/formation_export/596?format=xml&export_ids=1` * **Résultat:** La formation, avec UE, matières, modules (_un arbre_). * **Exemple de résultat:** ``` @@ -214,119 +190,135 @@ Tous les codes >= 400 indiquent que la requête n'a pas été traitée avec succ "matiere_2": "anglais", ... ], - "modules": "module" + "modules": ... } ``` ## UE -... +... TODO -## Modules de formation - * **`Notes/do_moduleimpl_list`** - * **Paramètres**: `formsemestre_id, moduleimpl_id, module_id]` - * **Résultat:** liste de moduleimpl - - - * **`Notes/do_moduleimpl_withmodule_list`** - * **Paramètres**: `formsemestre_id, moduleimpl_id, module_id]` - * **Résultat:** liste triée de moduleimpl, avec l'attribut `module` - + ## Semestres de formation -Les sessions de formation (dénommées "semestres" même si elles durent une année ou un mois) sont représentées par les `formsemestre_id`. +Les sessions de formation (dénommées "semestres" même si elles durent une année ou un mois) sont représentées par les `formsemestre`. - * **`formsemestre_id`** + * **`formsemestre`** * **Méthode:** GET - * **Paramètres (_tous optionnels_):** `formsemestre_id`, `form_id`, `etape_apo`, `etape_apo2` - * **Format URL:** `/api/formsemestre_id?form_id=1&etape_apo=V1RT` - * **Exemple d'utilisation:** `/api/formsemestre_id?format=xml&etape_apo=V1RT` - * **Résultat:** Liste des semestres correspondant. - * **Exemple de résultat:** `[sem_1, sem_2, sem_3, ...]` + * **Paramètres:** `formsemestre_id` ou `etape_apo`, `format`(json ou xml) + * **Format URL:** `/api/formsemestre/`, `/api/formsemestre/apo/` + * **Exemple d'utilisation:** `/api/formsemestre/12` + * **Résultat:** Informations sur le(s) formsemestre(s). + * **Exemple de résultat:** + ``` + [ + { + "annee_scolaire": "2022 - 2023", + "date_debut": "2022-09-01", + "date_fin": "2023-02-02", + "modalite": "FI", + "periode": 1, + "semestre_idx_txt": "S3", + "semestre_idx" : 3, + "session_id" : "GEII-BUT-FI-S3-2022", + "titre_annee": "BUT Génie Electrique et Informatique Industrielle semestre 3 FI 2021-2022" + "titre_num": "BUT Génie Electrique et Informatique Industrielle semestre 3", + "titre": "BUT Génie Electrique et Informatique Industrielle", + } + ] + ``` - - - - - -## Note sur les identifiants de sessions -Le `session_id` peut être utilisé pour identifier de façon prévisible et (presque) unique une session dans un établissement, ce qui est utile notamment pour interfacer ScoDoc à d'autres logiciels (eg gestion d'emplois du temps ou de services d'enseignement). Cet identifiant est constitué des informations suivantes: +### Note sur les identifiants de sessions + Le `session_id` peut être utilisé pour identifier de façon prévisible et + (presque) unique une session dans un établissement, ce qui est utile + notamment pour interfacer ScoDoc à d'autres logiciels (par exemple gestion d'emplois + du temps ou de services d'enseignement). Cet identifiant est constitué des + informations suivantes: * **Département** (RT, GEII, INFO...) (= paramètre `DeptName`, en majuscules) - * **Nom parcours:** DUT, LP, ... (défini au niveau du parcours dans ScoDoc = NAME) + * **Nom parcours:** BUT, LP, ... (défini au niveau du parcours dans ScoDoc = NAME) * **Modalité:** FI, FC, FA - * **"Spécialité":** S1 (ou S1D pour les sem. décalés), ou le `code_specialite` si pas de semestres. Le code spécialité est un champ (libre) nouveau dans la "formation" (programme pédagogique). - * **Année:** année de début de l'année scolaire correspondante (eg 2014 pour une session appartenant à l'année scolaire 2014-2015, même si elle commence en mars 2015). + * **"Spécialité":** S1 (ou S1D pour les semestres décalés), ou le + `code_specialite` si pas de semestres. Le code spécialité est un champ + (libre) nouveau dans la "formation" (programme pédagogique). + * **Année:** année de début de l'année scolaire correspondante (2014 pour + une session appartenant à l'année scolaire 2014-2015, même si elle + commence en mars 2015). **Exemple:** `INFO-DUT-FI-S1-2014` équivaut à un semestre S1 d'un DUT informatique de 2014 en formation initiale (FI) +## Modules de formation +Les moduleimpl sont les modules d'un semestre, ou les ressources, ou les SAÉs. +On peut récupérer soit un module par son id, soit la listes des modules d'un semestre. + * **`moduleimpl`** + * **Méthode:** GET + * **Paramètres**: `formsemestre_id` ou `moduleimpl_id` + * **Format URL:** `/api/moduleimpl/`, `/api//formsemestre/` + * **Résultat:** liste de moduleimpl + * **Exemple de résultat:** + TODO + + + ## Groupes et partitions -L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieurs partitions (types de groupes). Chaque partition est constituée d'un nombre quelconque de groupes d'étudiants. + L'ensemble des étudiants d'un semestre peut être réparti selon une ou + plusieurs partitions (types de groupes). Chaque partition est constituée + d'un nombre quelconque de groupes d'étudiants. - * **`formsemestre_id_partition`** + * **`partition`** * **Méthode: GET** * **Paramètres:** `formsemestre_id` - * **Format URL:** `/api/formsemestre_id_partition/` - * **Exemple d'utilisation:** `/api/formsemestre_id_partition/48` - * **Résultat:** La liste de toutes les partitions selon un `formsemestre_id` donné. - * **Exemple de résultat:** ici au format JSON + * **Format URL:** `/api/partition/` + * **Exemple d'utilisation:** `/api/partition/48` + * **Résultat:** La liste de toutes les partitions d'un formsemestre. + * **Exemple de résultat:** ``` [ { - "formsemestre_id": "SEM12781", - "partition_id": "P23840", + "formsemestre_id": "12781", + "partition_id": "23840", "partition_name": "TD" "group": [ { - "formsemestre_id": "SEM12781", - "partition_id": "P23840", + "formsemestre_id": "12781", + "partition_id": "23840", "group_name": "A", - "group_id": "G23841", + "group_id": "23841", "partition_name": "TD" }, { - "formsemestre_id": "SEM12781", - "partition_id": "P23840", + "formsemestre_id": "12781", + "partition_id": "23840", "group_name": "B", - "group_id": "G23843", + "group_id": "23843", "partition_name": "TD" }, ], }, { - "formsemestre_id": "SEM12781", - "partition_id": "P23941", + "formsemestre_id": "12781", + "partition_id": "23941", "partition_name": "TP" "group": [ { - "formsemestre_id": "SEM12781", - "partition_id": "P23941", - "group_name": "A1", - "group_id": "G23942", - "partition_name": "TP" - }, - { - "formsemestre_id": "SEM12781", - "partition_id": "P23941", - "group_name": "A2", - "group_id": "G23943", - "partition_name": "TP" + ... }, + ... ], }, { - "formsemestre_id": "SEM12781", - "partition_id": "P22833", + "formsemestre_id": "12781", + "partition_id": "22833", "partition_name": null "group": [ { - "formsemestre_id": "SEM12781", - "partition_id": "P22833", + "formsemestre_id": "12781", + "partition_id": "22833", "group_name": null, "group_id": "G22834", "partition_name": null @@ -337,7 +329,7 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu ``` - * **`groups_view`** + * **`groups`** * **Méthode:** GET * **Paramètres:** `formsemestre_id` ou `group_ids` (_peut être répété_), `with_codes=0|1`, `all_groups=0|1`, `etat=None|I` * **Format URL:** @@ -352,7 +344,7 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu - + @@ -362,7 +354,7 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu - + @@ -377,10 +369,10 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "prenom":"Dalil", "nom_disp":"CLINTO", "email":"xxx@example.com", - "P62029":"A", - "P62032":null, - "P62031":"G1", - "P62030":"A1" + "62029":"A", + "62032":null, + "62031":"G1", + "62030":"A1" }, { "etat":"I", @@ -388,10 +380,10 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "prenom":"Georges", "nom_disp":"BUSH", "email":"bush@example.com", - "P62029":"A", - "P62032":null, - "P62031":"G1", - "P62030":"A1" + "62029":"A", + "62032":null, + "62031":"G1", + "62030":"A1" }, ... ] @@ -403,22 +395,23 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu * **Format URL:** `/api/set_groups?partition_id=&groups=&groups_to_delete=&groups_to_create=` * **Exemple d'utilisation:** `/api/set_groups?partition_id=65&groups=77&groups_to_delete=8&groups_to_create=4` * **Résultat:** Set les groups. + TODO: à changer, passer les paramètres dans le corps de la requete ## Bulletins de notes * **`evaluations`** * **Méthode:** GET - * **Paramètres:** `module_id` - * **Format URL:** `/api/evaluations/` + * **Paramètres:** `moduleimpl_id` + * **Format URL:** `/api/evaluations/` * **Exemple d'utilisation:** `/api/evaluations/54` - * **Résultat:** Liste des evaluations à partir de l'id d'un module. + * **Résultat:** Liste des évaluations à partir de l'id d'un moduleimpl. * **Exemple de résultat:** `[eval_1, eval_2, eval_3, ...]` - * **`eval_notes`** + * **`evaluation_notes`** * **Méthode**: GET - * **Paramètres**: `eval_id` - * **Format URL:** `/api/eval_notes/` + * **Paramètres**: `evaluation_id` + * **Format URL:** `/api/eval_notes/` * **Exemple d'utilisation:** `/api/eval_notes/24` * **Résultat:** Liste des notes à partir de l'id d'une évaluation donnée. * **Exemple de résultat:** @@ -434,15 +427,16 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu ``` - * **`eval_set_notes`** + * **`evaluation_set_notes`** * **Méthode:** POST * **Paramètres:** `eval_id`, `etudid`, `note` * **Format URL:** `/api/eval_set_notes?eval_id= etudid=¬e=` * **Exemple d'utilisation:** `/api/eval_set_notes?eval_id=6 etudid=456¬e=15` * **Résultat:** Set les notes d'une évaluation pour un étudiant donné. + TODO vérifier et passer les valeurs dans le corps. - * **`Notes/formsemestre_bulletinetud`** + * **`etud//bul`** * **Méthode:** GET * **Paramètres:** `formsemestre_id`, `etudid`, `format` (`xml`ou `json`), `version` (`short`, `selectedevals` ou `long`) * **Format URL:** @@ -463,10 +457,10 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "prenom": "Roberto", "sexe": "M.", "code_ine": "", - etudid": "EID9860", + etudid": "9860", "code_nip": "123456789", "email": "roberto@santateresa.mx", - "photo_url": "\/ScoDoc\/static\/photos\/F68\/RT_EID29960.h90.jpg" + "photo_url": "\/ScoDoc\/static\/photos\/F68\/RT_29960.h90.jpg" }, "bonus_sport_culture": { "value": 0 @@ -486,7 +480,7 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "value": "15.51", "min": "07.29" }, - etudid": "EID9860", + etudid": "9860", "decision_ue": [ { "acronyme": "UE11", @@ -599,7 +593,7 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "evaluation": [ ], - "id": "MIP27427" + "id": "27427" }, { "coefficient": 2, @@ -626,7 +620,7 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "evaluation": [ ], - "id": "MIP27437" + "id": "27437" }, { "coefficient": 1.5, @@ -653,7 +647,7 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "evaluation": [ ], - "id": "MIP27451" + "id": "27451" }, { "coefficient": 2, @@ -680,7 +674,7 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "evaluation": [ ], - "id": "MIP27431" + "id": "27431" }, { "coefficient": 2, @@ -707,7 +701,7 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "evaluation": [ ], - "id": "MIP27433" + "id": "27433" }, { "coefficient": 1.5, @@ -734,7 +728,7 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "evaluation": [ ], - "id": "MIP27449" + "id": "27449" }, { "coefficient": 1.5, @@ -761,7 +755,7 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "evaluation": [ ], - "id": "MIP27440" + "id": "27440" }, { "coefficient": 1.5, @@ -788,14 +782,14 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "evaluation": [ ], - "id": "MIP27453" + "id": "27453" }, { "coefficient": 1, "rang": { "value": "4 ex" }, - "code": "M1109", + "code": "1109", "code_apogee": "VRT1109", "numero": 1109, "note": { @@ -815,7 +809,7 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "evaluation": [ ], - "id": "MIP27444" + "id": "27444" } ], "effectif": "51", @@ -859,7 +853,7 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "evaluation": [ ], - "id": "MIP27430" + "id": "27430" }, { "coefficient": 2, @@ -886,7 +880,7 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "evaluation": [ ], - "id": "MIP27439" + "id": "27439" }, { "coefficient": 1, @@ -913,7 +907,7 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "evaluation": [ ], - "id": "MIP27436" + "id": "27436" }, { "coefficient": 2, @@ -940,7 +934,7 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "evaluation": [ ], - "id": "MIP27454" + "id": "27454" }, { "coefficient": 2, @@ -967,7 +961,7 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "evaluation": [ ], - "id": "MIP27432" + "id": "27432" }, { "coefficient": 2, @@ -994,7 +988,7 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "evaluation": [ ], - "id": "MIP27435" + "id": "27435" }, { "coefficient": 2, @@ -1021,7 +1015,7 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "evaluation": [ ], - "id": "MIP27445" + "id": "27445" }, { "coefficient": 1, @@ -1048,7 +1042,7 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "evaluation": [ ], - "id": "MIP27434" + "id": "27434" } ], "effectif": "51", @@ -1135,7 +1129,7 @@ L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieu "nbabsnonjust": "7", "nbjustifs_noabs": "0", "nomprenom": "Mme Poisson Dodouce", - "etudid": "EID12345" + "etudid": "12345" }, ... ]