# 8. Mails, alertes et procédures

## Envoi par Microsoft Graph

Les campagnes d’alertes, communications salarié et demandes de procédure utilisent Microsoft Graph. Le backend construit le contenu HTML, charge la signature de l’émetteur et son logo éventuel, puis joint les pièces nécessaires.

Avant activation réelle : valider l’identité d’envoi, les permissions Graph, les destinataires de test, les signatures, la taille des pièces jointes et la journalisation des échecs.

## Scheduler d’alertes

Le scheduler tourne dans un service Docker séparé et contrôle l’heure en fuseau `Europe/Paris`. Modes : `disabled` ou `daily`. Il ne s’exécute pas le samedi/dimanche et attend l’heure/minute configurée.

Pour chaque groupe configuré, il évite les doubles exécutions du même jour dans le processus courant. En cas d’échec, il réessaie après le nombre de minutes configuré. La boucle vérifie chaque minute.

Paramètres principaux :

- `ALERT_MAIL_SCHEDULE_MODE` ;
- `ALERT_MAIL_SCHEDULE_HOUR` ;
- `ALERT_MAIL_SCHEDULE_MINUTE` ;
- `ALERT_MAIL_SCHEDULE_RETRY_MINUTES` ;
- `ALERT_MAIL_SCHEDULE_GROUPS`.

Procédure d’activation : environnement de test, aperçu, envoi test, revue des destinataires, activation d’un groupe, observation des logs et de l’historique, puis généralisation.

## Idempotence et historique

Les exécutions d’alertes sont historisées et une empreinte d’occurrence évite des doublons métier. Ne pas contourner ce mécanisme avec un script d’envoi direct. Après incident, examiner l’historique avant de relancer.

## Demandes de procédure

Création : la demande est enregistrée avec le statut `ENREGISTREE`, et une entrée `CREATION` avec snapshot est ajoutée à l’historique. Toute modification crée une nouvelle entrée.

Suite : pour les types autorisés, l’upsert de `procedure_followups` enregistre entretien, présence, décision, dates et motifs. Le statut devient `SUITE_COMPLETEE`, avec historique de complétion ou modification.

Envoi RH : le système génère un PDF, crée une communication `PROCESSING`, envoie via Graph puis passe à `SENT` avec l’identifiant fournisseur. En cas d’erreur, il passe à `FAILED`, conserve le message tronqué et ajoute une entrée d’historique. Les destinataires RH actifs se gèrent dans les Paramètres.

## Communications salarié

Le module “Autres” permet de tracer des communications et d’attacher le PDF d’une procédure. Les droits requis sont `autres:read` ou `autres:write`. Les données d’envoi et les erreurs restent en base pour audit.

## Contrôles d’exploitation

```bash
docker compose logs --tail=300 alert-mail-scheduler
docker compose logs --tail=300 backend | grep -Ei 'graph|mail|procedure|scheduler|failed|erreur'
```

Une erreur Graph n’autorise pas à supprimer l’historique pour “recommencer”. Corriger la cause, vérifier l’état de la communication, puis utiliser le parcours fonctionnel prévu.

