Skip to content
Snippets Groups Projects
Commit ae67c6a0 authored by Arnaud Levy's avatar Arnaud Levy
Browse files

docs -> developers

parent 2fb850b3
No related branches found
No related tags found
No related merge requests found
Showing
with 0 additions and 1040 deletions
# Interships
# Alumni
## education/AcademicYear
- university:references
- program:references
- year:integer
- from:date
- to:date
## education/Cohort
- name:string
- university:references
- program:references
- academic_year:references
https://english.stackexchange.com/questions/41673/what-is-the-group-name-for-students-who-entered-left-university-in-the-same
# Blocks
Blocs de contenus ajoutés à un objet (page, post, program...),
avec des templates (organigramme, partenaires...).
Il faut lister les dépendances des blocs et les ajouter à l'objet about.
## Dev
### Model
```
communication/website/Block
- university:references
- about:references (polymorphic)
- template:integer (enum)
- position:integer
- data:jsonb
```
Pour commencer, les valeurs de l'enum seront :
- 100, organization_chart
- 200, partners
### Partial about
Un partial que l'on peut ajouter à un show d'objet, avec :
- la liste des blocs utilisés (avec boutons show et edit)
- la possibilité de les ordonner (position)
- un bouton pour ajouter un bloc
```
views/admin/communication/blocks/_list.html.erb
```
### Show
Le show du bloc utilise le partial de son template
```
views/admin/communication/blocks/templates/partners/_show.html.erb
```
### Edit
L'edit du bloc utilise le partial de son template
```
views/admin/communication/blocks/templates/partners/_edit.html.erb
```
### Concern
Tous les objets ayant des blocs utilisent le concern `WithBlocks`, qui ajoute la méthode `blocks` (la liste des blocs, dans l'ordre).
### Export statique
Les blocs sont exportés dans le frontmatter grâce au partial
```
views/admin/communication/blocks/_static.html.erb
```
qui donne ce type de résultat
```
blocks:
- template: partners
data:
- name: Partner 1
url: https://partner1.com
logo: "e09f3794-44e5-4b51-be02-0e384616e791"
```
Les générateurs de chaque type suivent l'organisation :
```
views/admin/communication/blocks/templates/partners/_static.html.erb
```
Attention, il faut 6 espaces pour respecter l'indentation du front-matter :
```
- name: Partner 1
url: https://partner1.com
logo: "e09f3794-44e5-4b51-be02-0e384616e791"
```
### Dépendances
Il faut créer une classe pour chaque template, avec le nom au singulier (partners devient partner.rb, et la class Partner) :
```
models/communication/block/partner.rb
```
avec une structure de type :
```
class Communication::Block::Partner < Communication::Block::Template
def git_dependencies
...
end
end
```
## Pour créer un bloc
1. Déclarer le template dans l'enum du modèle block
2. Créer l'edit, le show et le static dans la vue du template
3. Créer la classe du template pour gérer les dépendances
4. Créer la vignette dans les images
5. Ecrire les locales fr et en
# Extranets
En plus des sites statiques, il est possible d'utiliser Osuny pour gérer des extranets, avec des utilisateurs authentifiés.
Un extranet permet d'utiliser les fonctions suivantes :
- alumni
- stages
- trombinoscopes
- news privées ?
- événements privés ?
# Communication
## Models
### communication/website/Event
- university:references
- communication_website:references
- communication_website_event_kind:references
- name:string
- description:text
- text:html
- published:boolean
- published_at:datetime
### communication/website/event/Kind
- university:references
- communication_website:references
- name:string
- position:integer
# Customs
Au-delà des pages et des actualités, les sites ont souvent besoin d'objets spécifiques, au cas par cas.
Le site https://www.osuny.org/ présente des fonctionnalités, avec un statut.
Le site https://cyberneticproject.eu/ présente des fiches techniques, avec des synonymes, des téléchargements, un récapitulatif, des références bibliographiques...
Afin de permettre cette souplesse, nous utilisons des types personnalisés (custom types).
Le type définit une nouvelle sorte d'objets (ex: feature, technical_sheet...).
Chaque type a des propriétés (title, description, summary, status, references...), qui génèrent un formulaire à la volée.
Le type s'ajoute au menu du site, et permet de créer des éléments.
Les éléments s'exportent en statique en utilisant la structure définie par les propriétés.
## Modèles
communication/website/custom/Type
- university:references
- website:references
- name:string
- identifier:string
- position:integer
- order:boolean
- tree:boolean
- date:boolean
Si order est true, les éléments de ce type peuvent être classés par position (js sortable).
Si tree est true, les éléments peuvent être organisés en arbre, avec des parents et des enfants.
Si date est true, les élément peuvent être publiés à une date donnée.
communication/website/custom/type/Property
- university:references
- website:references
- type:references
- name:string
- identifier:string
- kind:integer (enum)
- position
communication/website/custom/Element
- university:references
- website:references
- type:references
- name:string
- slug:string
- published:boolean
- published_at:datetime
- parent:references
- position:integer
- data:jsonb
# Export Hugo
## Contexte
Chaque website peut avoir un repository git.
Tous les objets de ce website doivent être synchronisés sur le repository.
Les publications doivent se font en asynchrone parce qu'elles peuvent être longues.
Certains objets peuvent appartenir à plusieurs websites, donc plusieurs repositories, comme par exemple les programs.
Certains objets ont des dépendances, par exemple les pages enfants, les auteurs, les catégories ou les médias.
Les fichiers renommés doivent être déplacés sur git.
Les fichiers supprimés ou dépubliés doivent être supprimés sur git.
Il faut veiller à limiter le nombre de commits et à éviter les commits vides.
## Setup
### GitHub
- Créer un repository à partir du template suivant : https://github.com/noesya/osuny-hugo-template
- Une fois le repository créé, générer un personal access token ici : https://github.com/settings/tokens
- Permission à accorder : `repo`
- Durée : pour une bonne sécurité, il n'est pas recommandé de créer un token permanent, notez simplement qu'il faut le régénérer régulièrement.
- Copier le personnal access token
- Dans le back-office d'Osuny, créer ou modifier un website et renseignez les 2 champs relatifs à Git :
- Repository : `username/repo`
- Access token : `ghp_xxxxxxxxxxxxxxxxxxxx`
### Déploiement (Netlify)
- Créer un site sur Netlify lié au repository du site
- Dans "Site settings", "Build & deploy", "Environment", "Environment variables", ajouter :
- `HUGO_VERSION` avec pour valeur la dernière version (ex: `0.92.1`)
La récupération du thème se fait via SSH par défaut. Pour que le déploiement fonctionne correctement, vous pouvez :
- Changer le remote du submodule pour qu'il utilise HTTPS.
- Garder le SSH, cependant il faut :
- Générer et copier la deploy key du site sur Netlify (dans "Site settings", "Build & deploy" puis "Deploy key").
- L'ajouter dans la section "Deploy keys" du repository contenant le thème (ici : https://github.com/noesya/osuny-hugo-theme/settings/keys).
## Architecture
Les git::providers permettent de dialoguer avec les services comme Github et Gitlab.
Le git::repository sert de façade et abstrait le provider.
Chaque objet publiable utilise un objet active record Communication::Website::GitFile qui garde la trace du dernier chemin et du SHA.
## Flux
### Version 1
Lors de l'enregistrement d'un objet, il faut, pour chaque website :
- créer éventuellement le git_file (1 pour chaque website)
- envoyer le git_file (add_to_batch)
- modifier ses dépendances, qui créent leur git_files pour chaque repository
- envoyer les git_files des dépendances aux repositories respectifs (add_to_batch)
- pour chaque website, si au moins un fichier a été ajouté :
- déclencher une modification (touch), qui génère une action asynchrone :
- pour chaque file :
- générer le fichier statique
- calculer le SHA
- comparer au SHA stocké
- needs_sync si SHA différent ou path différent
- si au moins un needs_sync :
- créer un commit pour tout ça
- push
- mettre à jour les previous_path et les SHA des git_files
Ce flux cause un problème majeur : tout ce qui est analysé disparaît en asynchrone.
### Version 2
Après l'enregistrement d'un objet, il faut lancer une tâche asynchrone de synchronisation.
Cette tâche est lancée par les controllers, et intégrée dans le partial `WithGit`.
```
def create
if @page.save_and_sync
...
end
end
def update
if @page.update_and_sync(page_params)
...
end
end
def destroy
@page.destroy_and_sync
end
```
Pour les reorder, chaque objet doit avoir ses siblings en dépendance, donc il suffit de synchroniser un objet déplacé pour qu'il gère l'ensemble :
```
def reorder
...
pages.first.sync_with_git
end
```
## Code
### Website::WithRepository
Le website a un trait WithRepository qui gère son rapport avec le repository Git, quel que soit le provider (Github, Gitlab...).
### Objets exportables vers Git
Tous les objets qui doivent être exportés vers Git :
- doivent utiliser le concern `WithGit`, qui gère l'export vers les repositories des objets et de leurs dépendances
- peuvent intégrer le concern `WithMedia` s'il utilise des médias (`featured_image` et/ou images dans des rich texts)
- peuvent présenter une méthode `identifiers` qui liste les identifiants des git_files à générer, pour les objets qui créent plusieurs fichiers (le fichier par défaut s'appelle `static`)
- peuvent présenter une méthode `git_dependencies_static` qui liste les dépendances de l'identifiant par défaut `static`
- peuvent présenter une méthode `git_destroy_dependencies_static` qui liste les dépendances à supprimer en cascade de l'identifiant par défaut `static`
- peuvent présenter des méthodes `git_dependencies_author` et/ou `git_destroy_dependencies_author` qui liste les dépendances de l'identifiant `author`
### Modèle Communication::Website::GitFile
La responsabilité de la synchronisation repose sur Communication::Website::GitFile, notamment :
- l'information est-elle intègre, synchronisée avec le repo ? (previous_sha et previous_path cohérents avec le repo git)
- le fichier doit-il être créé ? (pas à supprimer et (non intègre, ou pas de previous_sha/previous_path))
- le fichier doit-il être mis à jour ? (pas à supprimer et (non intègre, ou previous_sha/previous_path différent du sha/path))
- le fichier doit-il être supprimé ? (path nil ou marquage à détruire)
Pour cela, le git_file dispose des propriétés suivantes :
- previous_path (le chemin à la dernière sauvegarde, nil si pas encore créé, ou détruit)
- previous_sha (le hash de la précédente version, utile pour savoir si le fichier a changé)
- identifier (l'identifiant du fichier à créer, `static` par défaut, pour les objets créant plusieurs fichiers)
Pour informer sur les actions à mener, il dispose des méthodes interrogatives suivantes :
- synchronized_with_git? (pour évaluer l'intégrité vs le repository)
- should_create? (pour savoir s'il faut créer ou pas)
- should_update? (pour savoir s'il faut régénérer ou pas)
- should_destroy? (pour savoir s'il faut supprimer)
Pour générer les fichiers, il dispose des méthodes :
- to_s (pour générer le fichier statique à jour)
- sha (pour calculer le hash du fichier à jour)
- path (pour générer le chemin à jour)
# Import WordPress
## Contexte
L'objectif est de fluidifier la transition depuis un site déjà en place, notamment WordPress. Deux approches sont possibles : interne, avec un accès BDD, et externe, en passant par le site lui-même. Nous privilégierons l'approche externe dans un premier temps, pour permettre l'approche avant-vente (présenter un site pré-migré).
## Problématiques
1. Détection des pages
2. Extraction des contenus bruts
3. Distingo entre pages et posts, et autres types d'objets
4. Identification des menus
## Approche externe
Plusieurs possibilités :
- le crawling
- le sitemap
- le flux RSS
- l'api
## Approche interne
Plugin, connexion à la BDD, export JSON ou connexion API.
## Développement
Communication::Website::Imported::Website
- university:references
- website:references (has_one Communication::Website)
- status:integer (enum)
Communication::Website::Imported::Page
- university:references
- website:references (has_one Communication::Website::Imported::Website)
- page:references (has_one Communication::Website::Page)
- status:integer (enum)
Etapes :
1. Création du site, avec son URL
2. Lancement de l'import (création de Communication::Website::Imported::Website)
3. Import des sitemaps (création de Communication::Website::Imported::Page)
4. Import du contenu brut des pages importées
5. Analyse du contenu des pages importées et création / mise à jour des pages
## Import depuis WordPress
### Media
1. On importe les media depuis l'API
2. On crée des objets en DB (Communication::Website::Imported::Medium)
### Pages
1. On importe les pages depuis l'API
2. On crée des objets en DB (Communication::Website::Imported::Page)
3. Les objets importés créent ou mettent à jour les objets réels (Communication::Website::Page)
3.1 sans écraser de modifs locales
3.2 uniquement si l'import a bougé
3.3 Le contenu de l'html est filtré
3.3.1 enlever les balises problématiques
3.3.2 supprimer les classes
3.3.3 supprimer les ids
3.3.4 décaler les titres si h1
3.4 la featured image est transformée en attachment
3.5 si pas de featured image, la première image est enlevée du texte et devient featured
3.6 les medias dans le texte html sont transformés en action text attachments
3.6.1 lister les files dans le domaine
3.6.2 identifier le media master correspondant (via data:jsonb)
3.6.3 s'il n'existe pas, le créer (le cas se produit il ?)
3.6.4 crée l'attachment
3.6.5 on remplace le code du media par l'action text attachement
### Posts
Idem pages
## Exemples
### Condé
- https://ecoles-conde.com/sitemap_index.xml
- https://ecoles-conde.com/wp-json/wp/v2/posts
- https://ecoles-conde.com/wp-json/wp/v2/pages
### IUT Bordeaux Montaigne
- https://www.iut.u-bordeaux-montaigne.fr/wp-sitemap.xml
- https://www.iut.u-bordeaux-montaigne.fr/wp-sitemap-posts-post-1.xml
- https://www.iut.u-bordeaux-montaigne.fr/wp-sitemap-posts-page-1.xml
- https://www.iut.u-bordeaux-montaigne.fr/wp-json/wp/v2/posts
- https://www.iut.u-bordeaux-montaigne.fr/wp-json/wp/v2/pages
## Recherches
- https://kinsta.com/fr/blog/api-rest-wordpress/
- https://getshifter.io/
# Websites
## websites/Site
Attributes:
- university:references
- name:string
- domain:string
## websites/Post
Attributes:
- university:references
- website:references
- title:string
- description:text
- text:text
- published:boolean
- published_at:datetime
## websites/Page
Attributes:
- university:references
- website:references
- title:string
- description:text
- text:text
- parent:references
- published:boolean
## websites/Document
Est-ce vraiment dans ce namespace ? Peut-être un DAM ?
1 document peut concerner :
- toute l'université (charte numérique)
- 1 école (règlement intérieur de l'école)
- 1 campus (règlement intérieur du campus)
- 1 formation (contrat d'alternance type)
- 1 session (calendrier pédagogique de l'année en cours)
Attributes:
- university:references
- name:string
- school:references (optional)
- campus:references (optional)
- program:references (optional)
- session:references (optional)
## websites/Menu
Attributes:
- university:references
- website:references
- title:string
- identifier:string
## websites/menu/Item
Attributes:
- university:references
- website:references
- menu:references
- title:string
- parent:references
- position:integer
- kind:integer (enum: page, url)
- about:references (polymorphic)
## Export du menu
/_data/menus.yml
```yaml
primary:
- title: Accueil
target: /
- title: Formations
target: /formations
children:
- title: DUT
target: /formations/dut
- title: ENT
target: https://ent.u-bordeaux3.fr
legal:
- title: Mentions légales
target: /mentions-legales
```
# Templates
## Thème
https://github.com/noesya/osuny-hugo-theme
## Template
https://github.com/noesya/osuny-hugo-template
Pour faire la mise à jour :
```
git remote add template git@github.com:noesya/osuny-hugo-template.git
git fetch --all
git merge template/master --allow-unrelated-histories
```
## Site d'un journal
https://github.com/osuny-org/clermontauvergne-journal-degrowth
Pour faire la mise à jour :
```
git remote add template git@github.com:noesya/osuny-hugo-template.git
git fetch --all
git merge template/master --allow-unrelated-histories
```
# WYSIWYG
## Quels enjeux ?
Permettre l'édition, mais limiter les options graphiques (ni couleurs, ni tailles, ni typos).
Fonctionnalités :
- intégration d'images dans le corps du texte, en gardant la trace du blob active storage, et en les intégrant dans la liste des dépendances.
- intégration de vidéos.
- intégration d'autres formats (Tweets...).
## Solutions techniques
### ActionText
Avantages :
- active storage intégré
- Trix intégré
Inconvénients :
- Pas de modèle (polymorphic)
### Trix
Avantages :
- intégré à ActionText
- très limité
Inconvénients :
- très limité (target blank, 1 seul niveau de titre, pas d'embed, pas de code source)
- pas extensible
### Summernote
Avantages :
- vaste
- extensible
Inconvénients :
- dépendance jQuery
- pas intégré à ActionText
- moyennement robuste quand on le torture
### Page builder custom
Avantages :
- puissant
- souple
Inconvénients :
- compliqué à construire et maintenir
- compliqué à utiliser
## Benchmark
[Refinery](https://www.refinerycms.com/)
[Spina](https://spinacms.com/)
[Alchemy CMS](https://alchemy-cms.com/)
[Locomotive CMS](https://www.locomotivecms.com/)
## Méthode
### action-text-attachment
Dans la BDD, on stocke cette balise :
```
<action-text-attachment sgid="BAh[...]1df3"
content-type="image/jpeg"
url="http://demo.osuny:3000/rails/active_storage/blobs/redirect/eyJf[...]0f4a1/domenico_bruno_de_lobkowitz_watchingwindows_com_08.jpg" filename="domenico_bruno_de_lobkowitz_watchingwindows_com_08.jpg"
filesize="352931"
width="588"
height="746"
previewable="true"
presentation="gallery">
</action-text-attachment>
```
A l'édition, la balise est "remplie" avant affichage, pour avoir une preview.
A l'enregistrement, la balise est vidée.
Etapes normales
-[x] A l'import d'une image, ajouter l'action-text-attachement autour de l'img
-[ ] A la suppression d'une image dans l'éditeur, supprimer l'action-text-attachement autour de l'img
-[x] A l'enregistrement, déshydrater les action-text-attachements
-[x] A l'édition, réhydrater les action-text-attachements
-[ ] Après l'enregistrement mettre à jour les blobs attachés à l'objet parent (le post, par exemple)
Si un programme a 5 champs Summernote avec 3 images dans chaque champ, cela fait 15 attachments à lier au programme.
Si on enlève une image d'un champ, il faut mettre à jour la liste pour avoir les 14 bons attachments.
Actions de dev
-[ ] Coder les ajouts aux modèles dans Osuny
-[ ] Coder le JS dans Osuny
-[ ] Une fois que c'est fait, déplacer le Ruby et le JS dans summernote-rails
Migration phase 1
-[x] Ajouter des champs _new
-[x] Au rails app:fix, transformer le markup Trix en markup Summernote (application_record) dans les propriétés _new
Migration phase 2
-[ ] Supprimer les champs ActionText dans les modèles
-[ ] Supprimer la table d'ActionText
-[ ] Renommer les champs en enlevant _new
### Le pdf
Autoriser dans summernote
### Code HTML cible
```
<h2>Titre</h2>
<p>
Texte normal<br>
<b>Texte en gras</b><br>
<i>Texte en italique</i>
<action-text-attachment sgid="BAh7CEkiCGdpZAY6BkVUSSJUZ2lkOi8vb3N1bnkvQWN0aXZlU3RvcmFnZTo6QmxvYi9hYWUyNDI5OC1kNDE2LTQ2YWMtYTRlNS02ZjY4ZGU2MjFiZDE_ZXhwaXJlc19pbgY7AFRJIgxwdXJwb3NlBjsAVEkiD2F0dGFjaGFibGUGOwBUSSIPZXhwaXJlc19hdAY7AFQw--7e8ead4d79f455499f1d73e8d53a4b8e81a21df3" content-type="image/jpeg" url="http://demo.osuny:3000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibW...df8140070f4a1/domenico_bruno_de_lobkowitz_watchingwindows_com_08.jpg?website_id=6d8fb0bb-0445-46f0-8954-0e25143e7a58" filename="domenico_bruno_de_lobkowitz_watchingwindows_com_08.jpg" filesize="352931" width="588" height="746" previewable="true" presentation="gallery">
<figure class="attachment attachment--preview attachment--jpg">
<picture>
<source srcset="/rails/active_storage/representations/redirect/eyJfcmFpbHMiOns...XJpYXRpb24ifX0=--7d11fdd26322fef8959415f46d5e2c6d6763b4c0/domenico_bruno_de_lobkowitz_watchingwindows_com_08.jpg 100w, /rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaE...527eb11f95949a389acb1c/domenico_bruno_de_lobkowitz_watchingwindows_com_08.jpg 200w" type="image/webp">
<source srcset="/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibW...9fd77765da7c4f647d453b2/domenico_bruno_de_lobkowitz_watchingwindows_com_08.jpg?website_id=6d8fb0bb-0445-46f0-8954-0e25143e7a58 100w, /rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibW...bb3bc14127bc06ce0d1e32/domenico_bruno_de_lobkowitz_watchingwindows_com_08.jpg?website_id=6d8fb0bb-0445-46f0-8954-0e25143e7a58 200w" type="image/jpeg">
<img src="/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsi...190ffccd8/domenico_bruno_de_lobkowitz_watchingwindows_com_08.jpg?website_id=6d8fb0bb-0445-46f0-8954-0e25143e7a58" loading="lazy" decoding="async" width="800">
</picture>
</figure>
</action-text-attachment>
<a href="https://www.u-bordeaux-montaigne.fr/fr/actualites/vie-etudiante/soutenir-les-etudiant-e-s-les-aides-de-l-universite.html">Lien</a>
</p>
```
File deleted
# Qualiopi
Les vérifications se font pour chaque programme.
## Indicateur 1
Vérification de la présence des champs dans les programmes
## Indicateur 2
- 1 champ libre + documents joints dans le programme dont on vérifie la présence
- des stats extraites de l'alumni
## Indicateur 3
- 1 champ libre + documents joints dans le programme dont on vérifie la présence
- des stats extraites de l'alumni
## Indicateur 4
1 champ libre + documents joints dans le programme dont on vérifie la présence
## Indicateur 5
1 champ libre + documents joints dans le programme dont on vérifie la présence
## Indicateur 6
Présence de cours suffisamment détaillés et complets
## Indicateur 7
1 champ libre + documents joints analysant l'adéquation avec la certification (il faudra modéliser la certification vs RNCP)
## Indicateur 8
- 1 champ libre + documents joints dans le programme dont on vérifie la présence
- procédure directement intégrée dans la gestion des admissions
## Indicateur 9
1 champ libre + documents joints dans le programme dont on vérifie la présence
## Indicateur 10
? Différence avec 6 ?
## Indicateur 11
- 1 champ libre + documents joints dans le programme dont on vérifie la présence
- Alumni
## Indicateur 12
- 1 champ libre + documents joints dans le programme dont on vérifie la présence
- Statistiques d'abandon extraites des profils étudiants
## Indicateur 13
- 1 champ libre + documents joints dans le programme dont on vérifie la présence
- Statistiques et outils de suivi issus des profils étudiants (module alternance à fabriquer)
## Indicateur 14
1 champ libre + documents joints dans le programme dont on vérifie la présence
## Indicateur 15
Proche 9
Qualifier les documents en fonction de leur contenu vs indicateurs, puis évaluer la présence
## Indicateur 16
Lier les programmes aux certifications, documenter les conditions de présentation
## Indicateur 17
Documents confidentiels à fournir.
Créer un espace sécurisé de dialogue avec l'auditeur ?
## Indicateur 18
Organigramme avec les postes et les champs (pédagogique, technique, commercial, social)
## Indicateur 19
Ressources éducatives libres, accès à des ressources privées pour les étudiants, bibliographies
## Indicateur 20
Documents et personnes dans l'organigramme
## Indicateur 21
1. Définition des compétences nécessaires
2. CV et compétences des formateurs
3. Plan de formation des formateurs
## Indicateur 22
Preuves de formation des formateurs
## Indicateur 23
Preuves de veille légale et réglementaire
## Indicateur 24
Preuves de veille compétences, métiers, emplois
## Indicateur 25
Preuves de veille technologique et pédagogique
## Indicateur 26
Liste des partenaires handicap
## Indicateur 27
Preuves de conformité des sous-traitants
## Indicateur 28
Réseau de partenaires socio-économiques et preuves de coopération
## Indicateur 29
Preuves d'actions orientées insertion professionnelle et poursuite d'études
## Indicateur 30
Feedback des parties prenantes
## Indicateur 31
Gestion des réclamations et suivi de la satisfaction
## Indicateur 32
Preuve d'action correctives sur 31
# Education
## education/Program
https://schema.org/EducationalOccupationalProgram
Bachelor Universitaire de Technologie Métiers du Multimédia et de l'Internet
- university:references
- name:string
- level:integer (enum)
- capacity:integer
- ects:integer
- continuing:boolean
- prerequisites:text
- objectives:text
- duration:text
- registration:text
- pedagogy:text
- evaluation:text
- accessibility:text
+ schools:habtm
+ campuses:habtm
## education/Course
30 heures d'histoire de l'art en année 1
- program:references
- academic_year:references
- name:string
- syllabus:text
- hours:integer
## qualiopi/Criterion
- number:integer
- name:text
- description:text
## qualiopi/Indicator
- criterion:references
- number:integer
- name:text
- level_expected:text
- proof:text
- requirement:text
- non_conformity:text
# RNCP
https://www.data.gouv.fr/fr/datasets/repertoire-national-des-certifications-professionnelles-et-repertoire-specifique/
# Journals
## References
http://infolit.be/CoMLiS/ch02s03.html
Authors biography is fixed per article. The biography does not evolve, it is set in time (by the time of publication).
# Laboratories
## Axes (research axis/axes) ou équipes
Projet scientifique sur plusieurs années, avec des thèmes (ou thématiques) de recherche
## Personnes
- Prénom
- Nom
- Photo
- Poste : Professeur des Universités
- Responsabilités : Co-Directeur du Laboratoire, Responsable de l'axe ICIN
- Statut : statutaire ou doctorant ou associé
- Axe : ICIN
- Disciplines : Sciences de l'info (71e CNU)
- Année de rattachement : 2015
- Université de rattachement : Université de Bordeaux
- Mail
- Thèmes de recherche
- Responsabilités (administratives et d'enseignement)
- Publications
- HDR ou pas
### Doctorant
- Sujet de thèse
- Direction de thèse
- Inscription en thèse
## Evénements
Pour le MICA, autour d'une dizaine par mois, avec un pic en novembre
### Appels à contribution
### Parutions
### Séminaires
### Soutenances
Thèses et HDR
Import depuis theses.fr ?
## Programmes de recherche
- Nom : CyberNeTic. Se prémunir des mécanismes du cyberharcèlement.
- Portée : région, national, international
- Nature : Projet Région Nouvelle-Aquitaine
- Durée : 3 ans (2020-2022)
- Pilotage : Marlène Dulaurans
- Co-Responsabilité : personnes et postes
- Partenaires extérieurs : Orange...
- Présentation
- URL
## Partenaires
- Catégorie (pays par ex)
- Nom
- Logo (éventuellement, si dispo)
- URL
Alphabétique parfois, classé parfois
## Bibliographies
DOI, HAL, researchgate
Import depuis HAL
## Publications
Avec décompte pour l'Hcéres
Publier automatiquement sur :
- HAL
- Arxiv
- DOI
- Researchgate
- Academia
- autres sites mineurs
## Newsletter
Collecte de mails, gestion avec Sendinblue
## Don
Fonctionnalité nouvelle au MICA, page d'explication (pas de don en ligne)
## SEO
Plan de redirection
## Models
### university/person/Researcher (extends university/Person)
... ajouté à university/Person
- habilitation:boolean
- tenure:boolean
### research/Laboratory
- university:references
- name:string
- address:string
- zipcode:string
- city:string
- country:string
### research/laboratory/Axis
- university:references
- research_laboratory:references
- name:string
- short_name:string
- position:integer
- description:text
- text:html
### research/Thesis
- university:references
- research_laboratory:references
- author:references (person)
- director:references (person)
- title:string
- abstract:text
- started_at:date
- completed:boolean
- completed_at:date
### research/laboratory/Involvement (tbc)
- university:references
- research_laboratory:references
- university_person:references
- research_axis:references
- status:enum (statutaire, doctorant, associé)
- description:string
- themes:html
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment