---
# System prepended metadata

title: FACTS étudiants

---

# FACTS étudiants

Un `fact` et une information d'état associée à un étudiant, sur une durée définie. C'est une généralisation du système de `tag`, qu'il rendrait obsolète.

Le but du nouveau concept est de pouvoir differencier les faits "transient" des faits permanents. Ce n'est pas possible actuellement. 

Case study: on souhaite marqué les étudiants en entrée directe (ED), pour pouvoir facilement générer des extracts. Cette information est par nature associée à une rentrée donnée. Si on utilise un tag, il est difficile de differencier un Master *ED sur son cycle bachelor* d'un Master *ED sur son cycle master*.

## Implémentation

### une table de *Fact* (student_fact)

Chaque facts est daté avec un **début** et une **fin**

champs:

| nom         | type                   |
|-------------|------------------------|
| name        | str/enum               |
| type        | str                    |
| start       | date                   |
| fin         |                        |
| metadata    | str/json               |
| student_id  | foreign_key            |
| contract_id | optionel, foreign_key? |


* **start, end:** non-null, on met `end` par default à une date arbitrarement lointaine pour indiquer un fact dont la date de fin est inconnue. On prefère ca à NULL car cela permet d'utiliser toujours un operateur de range de date.
* **metadata** - on souhaite rester léger sur ce champ, idéalement on préfererais que le type + name soit suffisant sémantiquement. L'idée générale, c'est qu'un fact soit quelques chose d'attribuable par un être humain.
* **contract_id** - peut-etre qu'on peut s'en dispenser, ca semble un peu une optimisation prématurée.

## Sur elasticsearch

#### Pour student-manager

Aujourd'hui (2023-02) sont indexés un document par student, par terme. On suppose que l'intention originelle était de circonvenir au problème d'indexation "flat" d'ES.

Afin de pouvoir garder la selection par facette, apréciée des utilisateurs, on peut ajouter au doc student/term la liste des facts valides sur ce terme.


### Endpoint API

- /facts : permet de manipuler des facts sur une range définie
- /tags : permet de manipuler des facts "transient"


## CDC

dans la transaction d'une action metier on ajoute aussi une entrée dans une table event metier
les operateurs ecoute les changement de la table metier (cdc) et 