forked from ScoDoc/DocScoDoc
180 lines
8.2 KiB
Markdown
180 lines
8.2 KiB
Markdown
|
|
||
|
# Nouveau système de gestion des absences (mars 2014)
|
||
|
Page discutant les spécifications et l'implémentation d'un nouveau système de suivi des absences dans ScoDoc, basé sur le calendrier emplois du temps.
|
||
|
|
||
|
|
||
|
L'objectif est de remplacé le système actuel par une gestion:
|
||
|
* basée sur des "événements" d'absence (ou présence), de durée arbitraire.
|
||
|
|
||
|
* liée aux emplois du temps, supposés disponibles en format ics quelque part (on indique à ScoDoc l'URL du calendrier de chaque semestre).
|
||
|
|
||
|
(un fonctionnement sans emploi du temps sera bien entendu proposé: dans ce cas, le système ressemblera à l'actuel, avec la possibilité d'indiquer la durée de l'absence.)
|
||
|
|
||
|
|
||
|
## Vocabulaire
|
||
|
module::
|
||
|
un module d'enseignement dans un semestre donné (un `moduleimpl`).
|
||
|
|
||
|
EDT::
|
||
|
l'emploi du temps, constitué d'un ensemble de *plages*. Obtenu au format ics (iCalendar) à partir d'un logiciel de gestion d'emploi du temps (GPU, CELCAT, HyperPlanning, ...).
|
||
|
|
||
|
Plage (d'emploi du temps)::
|
||
|
aussi appelé "événement": un enseignement, avec heures de début et de fin, groupe d'étudiant concerné et (facultatif) module et enseignant.
|
||
|
|
||
|
Absence::
|
||
|
un événement, donnant l'absence d'un étudiant à une date et heure donnée. Peut être associé (ou non) à un module, enseignant (et groupe ?)
|
||
|
|
||
|
Justificatif::
|
||
|
la justification d'une absence (concrétisée par un certificat médical, par exemple). Etudiant, date, heure, durée, motif.
|
||
|
|
||
|
|
||
|
|
||
|
# Fonctionnalités attendues par les utilisateurs
|
||
|
## Obtention d'information
|
||
|
|
||
|
1.1 Afficher le nombre d'heures absences pour un étudiant
|
||
|
sur une période donnée, le nombre d'heures justifiées et non justifiées.
|
||
|
> Permissions: View
|
||
|
|
||
|
1.2 Afficher, pour un étudiant, le nombre d'heures d'absence dans chaque module
|
||
|
> Permissions: View
|
||
|
|
||
|
1.3 Visualiser les absences d'un étudiant sous forme de calendrier.
|
||
|
> Permissions: View
|
||
|
|
||
|
1.4 Présenter à un enseignant les plages horaires qu'il peut (et doit) renseigner)
|
||
|
|
||
|
1.5 Contrôle d'accès: interdire à un enseignant normal de saisir des absences en dehors de ses plages d'intervention;
|
||
|
|
||
|
1.6 Lister les plages pour lesquelles les absences n'ont pas été renseignées.
|
||
|
|
||
|
|
||
|
|
||
|
## Signalement des absences & justificatifs
|
||
|
|
||
|
2.1 Signaler une absence de 'x' minutes à partir de telle jour et heure (dt)
|
||
|
avec ou sans spécifier le module et l'enseignant.
|
||
|
> Permissions: Admin, Secr, resp. semestre, ou 'enseignant dans le module concerné' (restriction paramétrable car impose forte contrainte, eg EDT à jour).
|
||
|
|
||
|
NB: <img src="/img/alert.png" style="vertical-align: bottom; margin:0 0 0 0;" alt="/!\" /> Attention aux chevauchements: si une absence existe déjà, la supprimer (?)
|
||
|
|
||
|
*On peut avoir création de 3 absences: si absent sur [t0, t1] et qu'on ajoute [t2, t3] tel que t2 > t0 et t2 < t1 et t3 < t1.
|
||
|
L'ajout fera la vérification (=> verrouillage, plusieurs requêtes, écriture des absences, invalider les caches)
|
||
|
Objectif: garantir l'absence de chevauchements, pour calculer efficacement les heures.*
|
||
|
|
||
|
2.2 Supprimer une absence (interface: proposer de noter une présence ?)
|
||
|
> Permission: Admin, Secr, responsable semestre, utilisateur ayant saisi l'absence (ou enseignant du module concerné ?)
|
||
|
|
||
|
*Problème: retrouver le semestre: que faire si l'étudiant est à cette date inscrit à plusieurs semestres ?* (cas rare, on peut autoriser les responsables de chaque semestre ?)
|
||
|
|
||
|
|
||
|
2.3 Enregistrer un justificatif pour un étudiant, de dt0 à dt1 (en général, d'un jour à 0h pour n jours ou *m* demi-journées)
|
||
|
|
||
|
voir comment on code les justificatifs (dt, durée avec presque toujours t=0h, et durée=24h ?)
|
||
|
> Permission: Admin, Secr.
|
||
|
|
||
|
|
||
|
|
||
|
## Présences
|
||
|
Les présences ne sont actuellement pas enregistrées dans ScoDoc 7.
|
||
|
*Je crains que cela n'alourdisse l'interface utilisateur, pour un besoin assez rare.*
|
||
|
# > à implémenter dans un deuxième temps ?
|
||
|
|
||
|
3.1 Signaler la présence d'un étudiant (mêmes infos qu'une absence)
|
||
|
> Permission: comme ajout absence
|
||
|
|
||
|
3.2 Calculer le nombre d'heures de présence d'un étudiant, par module ou total du semestre.
|
||
|
> Permission: View
|
||
|
|
||
|
3.3 Lister les modules d'un semestre qui n'ont pas eu de présents (pour le suivi des relevés)
|
||
|
> Permission: View
|
||
|
|
||
|
|
||
|
|
||
|
# Notes sur l'implémentation
|
||
|
Absence:
|
||
|
Attributs d'une absence:
|
||
|
```
|
||
|
dt : datetime (jour et heure) de début de l'evènement
|
||
|
durée: (en secondes)
|
||
|
etat: flag, present|absent
|
||
|
entry_date: date de saisie (timestamp)
|
||
|
entry_user: utilisateur ayant saisi
|
||
|
Champs optionnels:
|
||
|
description: texte libre
|
||
|
moduleimpl_id : module concerné par l'absence
|
||
|
ens_id: enseignant concerné par l'absence (= celui qui donnait le cours manqué)
|
||
|
module_code: le code (acronyme) du module (il peut arriver que l'on récupère ce code via l'EDT mais que l'on n'ait pas la correspondance dans les modules ScoDoc: c'est quand même compté pour le total d'heures d'absences.
|
||
|
```
|
||
|
|
||
|
Si "jour" entier d'absence:
|
||
|
t=0h, durée=24h (ou n*24h si plusieurs jours), moduleimpl_id, ens_id non renseignés.
|
||
|
Comment calculer les heures ?
|
||
|
si emploi du temps: prendre chaque groupe g auquel appartient l'étudiant, et sommer les heures.
|
||
|
(-> demander à l'EDT: liste de modules enseignés dur t0, t1 au groupe g)
|
||
|
|
||
|
ok si l'EDT est bien renseigné, et que l'on a tous les groupes. Attention: chaque plage EDT ne doit concerner qu'un groupe.
|
||
|
|
||
|
Le calcul est fait au moment de la saisie de l'absence: lire l'EDT et générer des événements, 1 par plage edt.
|
||
|
|
||
|
Si on n'a pas d'EDT ? afin de retrouver le comportement antérieur de ScoDoc, on génère deux absences par jour (matin: 8h-12h, après-midi: 13h-17) (paramétrable).
|
||
|
|
||
|
Afin de garantir le sérieux des informations saisies, on interdira la saisie d'absences dans le futur (on ne fait que constater les absences passées)
|
||
|
|
||
|
* Calcul nombre d'heures d'absence sur [dt0, dt1]:
|
||
|
```
|
||
|
select sum(durée) from absences where dt > t0 et dt < t1 et etudid=xxx
|
||
|
```
|
||
|
|
||
|
* Calcul nombre d'heures d'absence *non justifiées* sur [dt0, dt1]:
|
||
|
```
|
||
|
- liste des absences pour cet etudiant sur [dt0, dt1] (caché par semestre)
|
||
|
- liste des justificatifs pour cet etudiant sur [dt0, dt1] (caché par semestre)
|
||
|
- calcul sur les intervalles de temps
|
||
|
```
|
||
|
|
||
|
|
||
|
|
||
|
# Spécification des fichiers Emplois du Temps (ics)
|
||
|
Un calendrier EDT est un ensemble d'évènements (date début, date fin, attributs).
|
||
|
|
||
|
On donne utilise un seul calendrier ics par semestre, qui donne l'emplois du temps de tous le semestre (voir toute l'année, peu importe).
|
||
|
Les événements ics doivent avoir des attributs permettant de retrouver:
|
||
|
* les enseignants (login dit "`login_edt`", utilisé par le logiciel d'emplois du temps, et mis en correspondance avec le login ScoDoc)
|
||
|
* le groupe (ScoDoc offre une table de transcodage `groupe_edt <-> groupe_ScoDoc`, s'ils n'ont pas les mêmes noms dans les 2 logiciels)
|
||
|
* le code module (idéalement, le même que le module.code de ScoDoc, mais on pourait envisager transcodage)
|
||
|
|
||
|
Les fonctions extrayant ces trois informations des événements ics pourront être définies par l'établissement utilisateur. A l'IUTV, les ics (extraits de GPU et retraités par EDT+) comprennent les champs:
|
||
|
`X-GROUP-ID`, `X-MODULE-CODE`, et `X-LOGIN-ENSEIGNANTS`
|
||
|
|
||
|
*Attention: un évènement EDT ne peut concerner qu'un seul groupe d'étudiants, mais peut faire intervenir plusieurs enseignants.*
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
# TODO
|
||
|
* détailler permissions pour chaque opération (eg: saisie absence: seulement dans certains modules ?)
|
||
|
|
||
|
|
||
|
* options d'affichage (bulletins, PV): unité de compte (heures, 1/2 journées ou journées)
|
||
|
|
||
|
|
||
|
#### Interface utilisateur (anciennes remarques à revoir)
|
||
|
L'enseignant voit dans son tableau de bord semestre:
|
||
|
|
||
|
* la liste de ses séances où ont été saisies des absences;
|
||
|
|
||
|
* la liste des séances où il doit saisir des absences.
|
||
|
|
||
|
* Pour le directeur d'étude/secrétariat : justification de l'absence avec un champ
|
||
|
commentaire pour le motif ou des cases type santé avec certificat médical, famille,
|
||
|
permis de conduire etc.
|
||
|
|
||
|
* Les absences d'au moins deux jours consécutifs devrait être mémorisés tels quels pour affichage
|
||
|
ultérieur
|
||
|
|
||
|
* Il faudrait que les absences aux contrôles soient reportés automatiquement dans le système
|
||
|
d'absence, les enseignants ne devraient pas avoir à faire une double saisie d'absence et dans
|
||
|
la case correspondant à la notes ABS.
|
||
|
|