eptm_dashboard/docs/13-parametres.md

99 lines
4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Paramètres (`/params`)
Page admin centralisant toute la configuration applicative. Toutes les valeurs sont persistées dans `data/settings.json` sauf la section « Correspondances classe → profession » qui vit dans son propre fichier `data/profession_mapping.json`.
## Sections
### Application
- **URL de base** : utilisée pour générer les liens dans les emails (reset mot de passe, enrôlement). Ex : `https://dashboard.eptm-automation.ch`. Stocké dans `settings.app_base_url`.
### Correspondances classe → profession
Mapping `préfixe de classe → profession` utilisé pour pré-remplir le champ « Profession » sur les avis de retenue, et pour `ApprentiFiche.profession`.
- Tableau des mappings actuels (suppression possible)
- Chips jaunes listant les classes en base **sans correspondance** — clic pour pré-remplir le formulaire
- Bouton « Ajouter / mettre à jour » : insère ou remplace
- Bouton « Appliquer aux fiches existantes » : recalcule `ApprentiFiche.profession` pour tous les apprentis selon le mapping actuel (logging dans `operations.log`)
### Horaires de classe (« Absent toute la journée »)
Définit pour chaque classe + chaque jour de la semaine :
- Le **type de jour** : Théorie / Pratique / Matu / —
- Les **périodes de cours** (1 à 10)
UI : dropdown classe + grille 5 colonnes (Lun → Ven) × 10 cases.
Le bouton « Absent toute la journée » sur la fiche apprenti utilise ce mapping pour marquer comme `N` uniquement les périodes correspondantes au jour de la semaine sélectionné. Le **badge** (Théorie/Pratique/Matu) s'affiche aussi dans le panneau d'édition.
Stocké dans `settings.class_schedule` :
```json
{
"AUTOMAT 1": {
"MON": { "type": "theorie", "periods": [1, 2, 3, 4] },
"TUE": { "type": "pratique", "periods": [5, 6, 7, 8] }
}
}
```
### Avis de sanction
- **Texte de description par défaut** (champ `TexteDescription` du PDF)
- **Chef de section** par défaut (champ `CS`)
Repris à la création de chaque avis de sanction si l'utilisateur ne saisit rien d'autre.
### Configuration email
- **Serveur SMTP** + **port**
- **Login** + **mot de passe** SMTP
- **Expéditeur** (header From)
- **Email admin (feedback in-app)** : destinataire des notifications du chat feedback
Brevo (smtp-relay.brevo.com) est utilisé en prod.
### Connexion Escada (synchro automatique)
- **Identifiant Escada** (email Keycloak)
- **Mot de passe Escada**
- **Clé secrète 2FA (TOTP)** — format Base32
Permettent à la sync automatique (cron) et à la sync manuelle de se connecter sans intervention. Le code TOTP est généré à la volée par `pyotp.TOTP(secret).now()`.
> Ces identifiants servent uniquement aux tâches automatiques. Pour l'enrôlement self-service d'un user, c'est l'user qui saisit ses propres creds dans le popup de profil (cf. doc Auth).
### Template email
Template appliqué à l'envoi de récap d'absences depuis la fiche apprenti :
- **Objet** : par défaut `Document EPTM — {nom_complet} ({classe})`
- **Corps** : par défaut un message court avec `{prenom}` + `{classe}`
Variables disponibles : `{prenom}`, `{nom}`, `{nom_complet}`, `{classe}`, `{nb_absences}`, `{nb_excusees}`, `{nb_non_excusees}`, `{nb_a_traiter}`, `{semestre}`, `{date_du_jour}`.
## Fichier `data/settings.json`
Structure typique :
```json
{
"app_base_url": "https://dashboard.eptm-automation.ch",
"texte_sanction": "Selon le règlement de l'EM, ...",
"chef_section": "Patrick Rausis",
"smtp_host": "smtp-relay.brevo.com",
"smtp_port": 587,
"smtp_login": "...",
"smtp_password": "...",
"smtp_sender": "EPTM Automation <noreply@eptm-automation.ch>",
"feedback_admin_email": "admin@eptm-automation.ch",
"escada_username": "...",
"escada_password": "...",
"totp_secret": "...",
"email_subject": "Document EPTM — {nom_complet} ({classe})",
"email_body": "Bonjour {prenom}, ...",
"class_schedule": { ... }
}
```
Audit minimal : chaque modification depuis `/params` est sauvegardée d'un coup (toute la clé concernée). Pas de versioning ; un backup ponctuel de `data/settings.json` suffit.