# API pour ScoDoc 9 L'API ScoDoc permet à des applications tierces d'interroger ScoDoc. Elle offre un accès aux informations aux formats XML et JSON. La version ScoDoc 9 a introduit une nouvelle API avec un nouveau mécanisme d'authentification. **Les clients de l'ancienne API ScoDoc 7 doivent être adaptés pour fonctionner avec ScoDoc 9.** Cette API est encore incomplète: n'hésitez pas à demander de nouveaux accès en écrivant à la liste de diffusion. 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"); * 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. 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 L'ancienne API ScoDoc 7 est décrite ici: [ScoDocAPI](ScoDocAPI.md) Afin de garantir l'interopérabilité avec les clients ScoDoc 7 (ENT, etc), les fonctions suivantes sont disponibles avec le mécanisme d'authentification basique de ScoDoc 7. Elles sont considérées comme *obsolètes* ("deprecated") et disparaitront en juillet 2022. Certaines ont plusieurs "routes" (URl), car ScoDoc 7 tolérait divers accès. - `Absences/XMLgetBilletsEtud` (deviendra `api/absences/billets/etud/ etudid>`) - `Absences/AddBilletAbsence` (deviendra `api/absences/billet/add`) - `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/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` 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 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) 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** Elle sera accessible à l'adresse: https://scodoc.monsite.tld/ScoDoc/api/fonction # 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. * [200](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/200) : OK. * [400](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/401) : Paramètre manquant, ou valeur incorrecte. * [401](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/401) : Authentification nécessaire. (jeton non précisé ou invalide) * [403](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/403) : Action non autorisée. (crédits épuisés, URL non autorisée, etc) * [404](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/404) : Page inaccessible. (URL inconnue / impossible d'accéder à l'adresse) * [406](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/406) : Le JSON indiqué en données POST n'est pas valide. * [408](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/408) : Dépassement du temps maximal autorisé pour l’audit. * [500](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/500) : Erreur inconnue, contactez-nous. * [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 * **Paramètres:** `viewable` (optionnel, si faux liste aussi les départements non accessible à l'utilisateur courant), `format` (json, xml) * **Format URL:** `/api/departement` * **Exemple d'utilisation:** `/api/departement` * **Résultat:** Liste des id de départements. * **Exemple de résultat:** `[id_1, id_2, id_3, ...]` ## Etudiants * **`etud_dept`** * **Méthode:** GET * **Paramètres:** `code_nip` * **Format URL:** `/api/etud_dept/` * **Exemple d'utilisation:** `/api/etud_dept/123` * **Résultat:** Liste des étudiants avec le code NIP donné tirée par ordre d'inscription décroissant. * **Exemple de résultat:** ``` [ { exist: true, dept: "GEII", id: 987, dept_id: 3 } ] ``` * **`etud`** * **Méthode:** GET * **Paramètres:** etudid * **Format URL:** `/api/etud/` * **Exemple d'utilisation:** `/api/etud/987` * **Résultat:** Un dictionnaire avec les informations de l'étudiant correspondant à l'id passé en paramètres. * **Exemple de résultat:** ``` { "nom": "Mutis", "sexe": "M.", "email": "alvaro.mutis@example.com", "prenom": "ALVARO", "nomprenom": "M. Alvaro MUTIS", "insemestre": [ { "etat": "I", "formsemestre_id": "SEM12781", "date_fin": "2010-07-30", "date_debut": "2010-01-25" }, { "etat": "I", "formsemestre_id": "SEM8396", "date_fin": "2009-01-16", "date_debut": "2008-09-01" } ], "etudid": "EID8768", "domicile": "2 Rue Madame", "villedomicile": "Paris", "telephonemobile": "" } ``` * **`etud_bul`** * **Méthode:** GET * **Paramètres:** `etudid`, `sem_id` * **Format URL:** `/api/etud//bul/` * **Exemple d'utilisation:** `/api/etud/987/bul/12` * **Résultat:** Le bulletin d'un étudiant en fonction de son id et d'un semestre donné. * **Exemple de résultat:** [Bulletins par défaut](https://scodoc.org/ParametrageBulletins/#exemple-1-bulletins-par-defaut) * **`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_) * **Exemple d'utilisation:** `/api/etud/123/photo` **OU** `/api/etud/123/photo/small` (_pour la version small_) * **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` * **Résultat:** Liste des formations. * **Exemple de résultat:** `[formation_1, formation_2, formation_3, ...]` * **`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` * **Résultat:** La formation, avec UE, matières, modules (_un arbre_). * **Exemple de résultat:** ``` { "nom": "formation", "UE": "ue", "matieres": [ "matiere_1": "maths", "matiere_2": "anglais", ... ], "modules": "module" } ``` ## UE ... ## 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`. * **`formsemestre_id`** * **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, ...]` ## 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: * **Département** (RT, GEII, INFO...) (= paramètre `DeptName`, en majuscules) * **Nom parcours:** DUT, 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). **Exemple:** `INFO-DUT-FI-S1-2014` équivaut à un semestre S1 d'un DUT informatique de 2014 en formation initiale (FI) ## 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. * **`formsemestre_id_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 ``` [ { "formsemestre_id": "SEM12781", "partition_id": "P23840", "partition_name": "TD" "group": [ { "formsemestre_id": "SEM12781", "partition_id": "P23840", "group_name": "A", "group_id": "G23841", "partition_name": "TD" }, { "formsemestre_id": "SEM12781", "partition_id": "P23840", "group_name": "B", "group_id": "G23843", "partition_name": "TD" }, ], }, { "formsemestre_id": "SEM12781", "partition_id": "P23941", "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", "partition_name": null "group": [ { "formsemestre_id": "SEM12781", "partition_id": "P22833", "group_name": null, "group_id": "G22834", "partition_name": null } ], } ] ``` * **`groups_view`** * **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:** * **Exemple d'utilisation:** * **Résultat:** Liste des étudiants dans un groupe. * **Exemple de résultat au format XML:** (_avec `with_codes=1`_) ``` ``` * **Exemple de résultat au format JSON:** ``` [ { "etat":"I", "emailperso":null, "prenom":"Dalil", "nom_disp":"CLINTO", "email":"xxx@example.com", "P62029":"A", "P62032":null, "P62031":"G1", "P62030":"A1" }, { "etat":"I", "emailperso":null, "prenom":"Georges", "nom_disp":"BUSH", "email":"bush@example.com", "P62029":"A", "P62032":null, "P62031":"G1", "P62030":"A1" }, ... ] ``` * **`set_groups`** * **Méthode:** POST * **Paramètres:** `partition_id`, `groups`, `groups_to_delete`, `groups_to_create` * **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. ## Bulletins de notes * **`evaluations`** * **Méthode:** GET * **Paramètres:** `module_id` * **Format URL:** `/api/evaluations/` * **Exemple d'utilisation:** `/api/evaluations/54` * **Résultat:** Liste des evaluations à partir de l'id d'un module. * **Exemple de résultat:** `[eval_1, eval_2, eval_3, ...]` * **`eval_notes`** * **Méthode**: GET * **Paramètres**: `eval_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:** ``` [ { "84": "13", "85": "15", "86": "9", ... } ] ``` * **`eval_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é. * **`Notes/formsemestre_bulletinetud`** * **Méthode:** GET * **Paramètres:** `formsemestre_id`, `etudid`, `format` (`xml`ou `json`), `version` (`short`, `selectedevals` ou `long`) * **Format URL:** * **Exemple d'utilisation:** * **Résultat:** Un bulletin de notes. * **Exemple de résultat:** ici au format JSON, pour une version courte (`version=short`) ``` { "rang": { "ninscrits": 52, "value": "1" }, "etape_apo2": "", "etape_apo3": "", "etape_apo4": "", "etudiant": { "nom": "BOLANO", "prenom": "Roberto", "sexe": "M.", "code_ine": "", etudid": "EID9860", "code_nip": "123456789", "email": "roberto@santateresa.mx", "photo_url": "\/ScoDoc\/static\/photos\/F68\/RT_EID29960.h90.jpg" }, "bonus_sport_culture": { "value": 0 }, "absences": { "nbabsjust": 0, "nbabs": 1 }, "decision": { "etat": "I", "code": "ADM", "compenseformsemestre_id" : "SEM12345" /* si ce semestre en compense un autre */ }, "note": { "max": "15.51", "moy": "10.80", "value": "15.51", "min": "07.29" }, etudid": "EID9860", "decision_ue": [ { "acronyme": "UE11", "code": "ADM", "ects": "16.0", "titre": "D\u00e9couverte m\u00e9tiers", "numero": "11", "ue_id": "UE21456" }, { "acronyme": "UE12", "code": "ADM", "ects": "14.0", "titre": "Mise \u00e0 niveau des comp\u00e9tences transversales et scientifiques", "numero": "12", "ue_id": "UE21478" } ], "ue_capitalisee": [ ], "publie": 1, "autorisation_inscription": [ { "semestre_id": 2 } ], "appreciation": [ ], "note_max": { "value": 20 }, "date": "2014-07-12T17:38:47.693262", "rang_group": [ { "ninscrits": 26, "value": "1", "group_type": "TD", "group_name": "B" }, { "ninscrits": 13, "value": "1", "group_type": "TP", "group_name": "B1" }, { "ninscrits": 4, "value": "1", "group_type": "G", "group_name": "G4" }, { "ninscrits": "", "value": "", "group_type": "tutorat", "group_name": "" }, { "ninscrits": "", "value": "", "group_type": "App", "group_name": "" }, { "ninscrits": "", "value": "", "group_type": "sport", "group_name": "" } ], formsemestre_id": "SEM12345", "etape_apo": "V1RT", "ue": [ { "acronyme": "UE11", "rang": "1", "code_apogee": "VRTU11", "ects": "16", "numero": "11", "note": { "max": "16.17", "value": "16.17", "min": "06.56" }, "module": [ { "coefficient": 3, "rang": { "value": "1" }, "code": "M1101", "code_apogee": "VRT1101", "numero": 1101, "note": { "moy": "08.94", "nb_notes": 51, "nb_missing": 0, "max": "19.18", "min": "03.70", "nb_valid_evals": 3, "value": "19.18" }, "abbrev": "R\u00e9seaux d'entreprises", "effectif": { "value": 51 }, "titre": "Initiation aux r\u00e9seaux d'entreprises", "evaluation": [ ], "id": "MIP27427" }, { "coefficient": 2, "rang": { "value": "2" }, "code": "M1102", "code_apogee": "VRT1102", "numero": 1102, "note": { "moy": "12.58", "nb_notes": 50, "nb_missing": 1, "max": "16.79", "min": "02.50", "nb_valid_evals": 2, "value": "16.50" }, "abbrev": "Initiation \u00e0 la t\u00e9l\u00e9phonie", "effectif": { "value": 51 }, "titre": "Initiation \u00e0 la t\u00e9l\u00e9phonie d'entreprise", "evaluation": [ ], "id": "MIP27437" }, { "coefficient": 1.5, "rang": { "value": "1" }, "code": "M1103", "code_apogee": "VRT1103", "numero": 1103, "note": { "moy": "08.26", "nb_notes": 51, "nb_missing": 0, "max": "13.41", "min": "00.94", "nb_valid_evals": 2, "value": "13.41" }, "abbrev": "Architecture des \u00e9quipements informatiques", "effectif": { "value": 51 }, "titre": "Architecture des \u00e9quipements informatiques", "evaluation": [ ], "id": "MIP27451" }, { "coefficient": 2, "rang": { "value": "1" }, "code": "M1104", "code_apogee": "VRT1104", "numero": 1104, "note": { "moy": "10.77", "nb_notes": 51, "nb_missing": 0, "max": "17.90", "min": "04.63", "nb_valid_evals": 3, "value": "17.90" }, "abbrev": "Principe et architecture des r\u00e9seaux", "effectif": { "value": 51 }, "titre": "Principe et architecture des r\u00e9seaux", "evaluation": [ ], "id": "MIP27431" }, { "coefficient": 2, "rang": { "value": "1" }, "code": "M1105", "code_apogee": "VRT1105", "numero": 1105, "note": { "moy": "11.00", "nb_notes": 51, "nb_missing": 0, "max": "17.83", "min": "04.98", "nb_valid_evals": 2, "value": "17.83" }, "abbrev": "Bases des syst\u00e8mes d'exploitation", "effectif": { "value": 51 }, "titre": "Bases des syst\u00e8mes d'exploitation", "evaluation": [ ], "id": "MIP27433" }, { "coefficient": 1.5, "rang": { "value": "6" }, "code": "M1106", "code_apogee": "VRT1106", "numero": 1106, "note": { "moy": "13.05", "nb_notes": 51, "nb_missing": 0, "max": "17.79", "min": "07.08", "nb_valid_evals": 1, "value": "16.25" }, "abbrev": "Initiation au d\u00e9veloppement Web", "effectif": { "value": 51 }, "titre": "Initiation au d\u00e9veloppement Web", "evaluation": [ ], "id": "MIP27449" }, { "coefficient": 1.5, "rang": { "value": "9" }, "code": "M1107", "code_apogee": "VRT1107", "numero": 1107, "note": { "moy": "09.36", "nb_notes": 51, "nb_missing": 0, "max": "14.21", "min": "04.17", "nb_valid_evals": 3, "value": "11.66" }, "abbrev": "Initiation \u00e0 la mesure du signal", "effectif": { "value": 51 }, "titre": "Initiation \u00e0 la mesure du signal", "evaluation": [ ], "id": "MIP27440" }, { "coefficient": 1.5, "rang": { "value": "7" }, "code": "M1108", "code_apogee": "VRT1108", "numero": 1108, "note": { "moy": "10.49", "nb_notes": 51, "nb_missing": 0, "max": "16.31", "min": "05.39", "nb_valid_evals": 4, "value": "13.22" }, "abbrev": "Acquisition et codage de l'information", "effectif": { "value": 51 }, "titre": "Acquisition et codage de l'information", "evaluation": [ ], "id": "MIP27453" }, { "coefficient": 1, "rang": { "value": "4 ex" }, "code": "M1109", "code_apogee": "VRT1109", "numero": 1109, "note": { "moy": "12.46", "nb_notes": 51, "nb_missing": 0, "max": "16.00", "min": "09.00", "nb_valid_evals": 1, "value": "15.00" }, "abbrev": "PT : Recherche documentaire", "effectif": { "value": 51 }, "titre": "PT : Recherche documentaire", "evaluation": [ ], "id": "MIP27444" } ], "effectif": "51", "titre": "D\u00e9couverte m\u00e9tiers", "id": "UE21456" }, { "acronyme": "UE12", "rang": "5", "code_apogee": "VRTU12", "ects": "14", "numero": "12", "note": { "max": "15.20", "value": "14.63", "min": "07.94" }, "module": [ { "coefficient": 2, "rang": { "value": "3 ex" }, "code": "M1201", "code_apogee": "VRT1201", "numero": 10, "note": { "moy": "13.02", "nb_notes": 51, "nb_missing": 0, "max": "16.00", "min": "10.00", "nb_valid_evals": 1, "value": "14.00" }, "abbrev": "Anglais", "effectif": { "value": 51 }, "titre": "Anglais g\u00e9n\u00e9ral de communication et initiation au vocabulaire technique", "evaluation": [ ], "id": "MIP27430" }, { "coefficient": 2, "rang": { "value": "16 ex" }, "code": "M1202", "code_apogee": "VRT1202", "numero": 20, "note": { "moy": "12.74", "nb_notes": 51, "nb_missing": 0, "max": "17.75", "min": "04.00", "nb_valid_evals": 2, "value": "14.00" }, "abbrev": "Expression", "effectif": { "value": 51 }, "titre": "EC: \u00c9l\u00e9ments fondamentaux de la communication", "evaluation": [ ], "id": "MIP27439" }, { "coefficient": 1, "rang": { "value": "1 ex" }, "code": "M1203", "code_apogee": "VRT1203", "numero": 30, "note": { "moy": "NA", "nb_notes": 0, "nb_missing": 51, "max": "-", "min": "-", "nb_valid_evals": 0, "value": "-" }, "abbrev": "PPP: Connaitre son champ d'activit\u00e9", "effectif": { "value": 51 }, "titre": "PPP: Connaitre son champ d'activit\u00e9", "evaluation": [ ], "id": "MIP27436" }, { "coefficient": 2, "rang": { "value": "6" }, "code": "M1204", "code_apogee": "VRT1204", "numero": 40, "note": { "moy": "10.66", "nb_notes": 51, "nb_missing": 0, "max": "16.35", "min": "05.73", "nb_valid_evals": 8, "value": "14.09" }, "abbrev": "Mise \u00e0 niveau en num\u00e9ration et calculs", "effectif": { "value": 51 }, "titre": "Mise \u00e0 niveau en num\u00e9ration et calculs", "evaluation": [ ], "id": "MIP27454" }, { "coefficient": 2, "rang": { "value": "23" }, "code": "M1205", "code_apogee": "VRT1205", "numero": 50, "note": { "moy": "10.37", "nb_notes": 51, "nb_missing": 0, "max": "18.69", "min": "05.01", "nb_valid_evals": 5, "value": "10.58" }, "abbrev": "Connaissances et Outils pour le signal", "effectif": { "value": 51 }, "titre": "Harmonisation des connaissances et des outils pour le signal", "evaluation": [ ], "id": "MIP27432" }, { "coefficient": 2, "rang": { "value": "3 ex" }, "code": "M1206", "code_apogee": "VRT1206", "numero": 60, "note": { "moy": "11.22", "nb_notes": 51, "nb_missing": 0, "max": "16.76", "min": "03.91", "nb_valid_evals": 6, "value": "15.12" }, "abbrev": "Circuits \u00e9lectroniques : mise \u00e0 niveau", "effectif": { "value": 51 }, "titre": "Circuits \u00e9lectroniques : mise \u00e0 niveau", "evaluation": [ ], "id": "MIP27435" }, { "coefficient": 2, "rang": { "value": "1 ex" }, "code": "M1207", "code_apogee": "VRT1207", "numero": 70, "note": { "moy": "08.39", "nb_notes": 51, "nb_missing": 0, "max": "20.00", "min": "00.00", "nb_valid_evals": 1, "value": "20.00" }, "abbrev": "Programmation 1", "effectif": { "value": 51 }, "titre": "Bases de la programmation", "evaluation": [ ], "id": "MIP27445" }, { "coefficient": 1, "rang": { "value": "1 ex" }, "code": "M1208", "code_apogee": "VRT1208", "numero": 80, "note": { "moy": "NA", "nb_notes": 0, "nb_missing": 51, "max": "-", "min": "-", "nb_valid_evals": 0, "value": "-" }, "abbrev": "M\u00e9thodologie Universitaire 1", "effectif": { "value": 51 }, "titre": "Adaptation et m\u00e9thodologie pour la r\u00e9ussite Universitaire", "evaluation": [ ], "id": "MIP27434" } ], "effectif": "51", "titre": "Mise \u00e0 niveau des comp\u00e9tences transversales et scientifiques", "id": "UE21478" }, { "acronyme": "UE 1S", "rang": "1 ex", "code_apogee": "", "ects": "0", "numero": "13", "note": { "max": "00.00", "value": "00.00", "min": "00.00" }, "module": [ ], "effectif": "51", "titre": "Sport & Culture", "id": "UE23716" } ], "situation": "Inscrit le 2015-09-02. D\u00e9cision jury: Valid\u00e9. UE acquises: UE11, UE12. Autoris\u00e9 \u00e0 s'inscrire en S2." } ``` ## Absences **Remarques**, les dates sont au format iso `yyyy-mm-dd`. Les dates de fin ne sont pas incluses. Et `demi_journee`= 2 si journée complète, =1 si uniquement le matin, =0 si uniquement l'après-midi. * **`absences`** * **Méthode:** GET * **Paramètres:** `etudid`, `abs_just_only, format`, `abs_just_only` (_spécifie si on veut les absences justifiées ou non_). * **Format URL:** `/api/absences/` * **Exemple d'utilisation:** `/api/absences/54` * **Résultat:** Liste des absences d'un étudiant donné. * **Exemple de résultat:** ```{jour: "2021-02-10", ampm: "0", description: "M2202", }``` (_**ampm** vaut 1 le matin et 0 l'après-midi_). * **`abs_signale`** * **Méthode:** POST * **Paramètres:** `date_debut`, `date_fin`, `module_impl_id=None`, `demi_journee=2`, `estjust=False`, `description`, `etudid` * **Body de la requête:** `date_debut=date_debut&date_fin=date_fin&demi_journee=demi_journee&description=description&etudid=` * **Exemple d'utilisation:** `date_debut=2015-02-01&date_fin=2015-02-03&demi_journee=4&description=""&etudid=874` * **Résultat:** *html* * **`abs_annule`** * **Méthode:** POST * **Paramètres:** `date_debut`, `date_fin`, `demi_journee`, `etudid` * **Body de la requête:** `date_debut=date_debut&date_fin=date_fin&demi_journee=demi_journee&etudid=` * **Exemple d'utilisation:** `date_debut=2004-05-03&date_fin=2004-06-07&demi_journee=2&etudid=451` * **Résultat:** *html* * **`abs_annule_justif`** * **Méthode:** POST * **Paramètres:** `context`, `date_debut`, `date_fin`, `demi_journee` * **Body de la requête:** `context=context&date_debut=date_debut&date_fin=date_fin&demi_journee=demi_journee` * **Exemple d'utilisation:** `context=malade&date_debut=2020-01-05&date_fin=2020-01-06&demi_journee=1` * **Résultat:** *html* * **`abs_groupe_etat`** * **Méthode:** GET * **Paramètres:** `group_ids`, `date_debut`, `date_fin`, `with_boursier=True`, `format=html` * **Format URL:** `/api/abs_group_etat/?group_ids=group_ids&date_debut=date_debut&date_fin=date_fin` * **Exemple d'utilisation:** `/api/abs_group_etat/?group_ids=45&date_debut=2019-01-30&date_fin=2019-02-30` * **Résultat:** Liste des absences d'un ou plusieurs groupes entre deux dates. * **Exemple de résultat:** si `format="json"` cela donne: ``` [ { "boursier": "N", "nbabs": "9", "nbabsjust": "2", "nbabsnonjust": "7", "nbjustifs_noabs": "0", "nomprenom": "Mme Poisson Dodouce", "etudid": "EID12345" }, ... ] ``` ## En savoir plus Voir exemples d'utilisation de l'API en Python, dans `tests/api/`.