eptm_dashboard/data/docs/13-parametres.md
2026-05-12 15:30:28 +02:00

4 KiB
Raw Blame History

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 :

{
  "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 :

{
  "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.