4 KiB
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é danssettings.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.professionpour tous les apprentis selon le mapping actuel (logging dansoperations.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 :
{
"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
TexteDescriptiondu 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 :
{
"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.