# Feature: Relance d'invitation auto-déclaration

## 📝 Description

Cette fonctionnalité permet au staff de renvoyer l'email d'invitation à l'auto-déclaration à un salarié directement depuis la page `/staff/salaries`.

## 🎯 Objectif

Permettre de relancer facilement un salarié qui :
- N'a pas reçu l'email initial
- N'a pas complété son profil
- A besoin d'un nouveau lien (token expiré après 7 jours)
- Doit mettre à jour ses documents

## 🔧 Fichiers créés/modifiés

### 1. `/components/staff/ResendInvitationModal.tsx` (NOUVEAU)

Composant modal de confirmation avant envoi de la relance.

**Fonctionnalités :**
- Affichage des informations du salarié (nom, matricule, email)
- Validation de la présence d'un email
- Message explicatif du contenu de l'email
- Confirmation visuelle avant envoi
- Feedback pendant l'envoi (loader)
- Notification de succès/erreur

### 2. `/components/staff/SalariesGridSimple.tsx` (MODIFIÉ)

**Ajouts :**
- Import de `ResendInvitationModal`
- État `isResendInvitationOpen` pour gérer l'ouverture de la modale
- Bouton "Envoyer une relance justifs" en gradient bleu/indigo
- Intégration de la modale avec le salarié sélectionné

**Emplacement du bouton :**
- Au dessus de la card "Informations personnelles"
- Pleine largeur avec icône mail
- Design attrayant en gradient

### 3. API utilisée : `/api/auto-declaration/generate-token/route.ts` (EXISTANTE)

L'API existante est réutilisée. Elle :
- Génère un nouveau token sécurisé
- Supprime les anciens tokens du salarié
- Envoie l'email d'invitation avec le lien personnalisé
- Retourne le statut d'envoi

## 🎨 Interface utilisateur

### Bouton de relance
```
┌─────────────────────────────────────┐
│  📧 Envoyer une relance justifs     │
│  (Gradient bleu → indigo)           │
└─────────────────────────────────────┘
```

### Modale de confirmation

```
┌───────────────────────────────────────┐
│ 📧 Relancer le salarié           ✕   │
├───────────────────────────────────────┤
│                                       │
│  ✓ Email d'invitation à              │
│    l'auto-déclaration                 │
│                                       │
│  Le salarié recevra un email avec    │
│  un lien sécurisé...                  │
│                                       │
│  Salarié:      Jean Dupont            │
│  Matricule:    MAT001                 │
│  Email:        jean.dupont@mail.com   │
│                                       │
│  💡 Contenu: Lien valide 7 jours...   │
│                                       │
│           [Annuler] [Envoyer] 📧      │
└───────────────────────────────────────┘
```

## 📧 Contenu de l'email envoyé

L'email envoyé est **exactement le même** que lors de la création du salarié :

**Template :** `auto-declaration-invitation`

**Contenu :**
- Salutation personnalisée avec prénom
- Nom de l'organisation employeur
- Matricule du salarié
- **Lien d'accès sécurisé** avec token unique
- Instructions pour :
  - Compléter les informations personnelles
  - Uploader les justificatifs (CNI, attestation Sécu, RIB, etc.)
  - Accepter les conditions RGPD

**Validité :** 7 jours

## 🔐 Sécurité

- ✅ Vérification de l'authentification staff
- ✅ Validation de la présence d'un email
- ✅ Génération d'un nouveau token sécurisé (32 bytes hex)
- ✅ Suppression automatique des anciens tokens
- ✅ Token unique par salarié
- ✅ Expiration automatique après 7 jours

## ⚙️ Comportement

1. **Clic sur le bouton** → Ouverture de la modale
2. **Vérification email** → Si absent, message d'erreur et bouton désactivé
3. **Confirmation** → Appel API pour générer token et envoyer email
4. **Pendant l'envoi** → Loader et désactivation des boutons
5. **Succès** → Toast de confirmation et fermeture de la modale
6. **Erreur** → Toast d'erreur avec message détaillé

## 📊 Cas d'usage

### ✅ Cas valides
- Salarié avec email valide
- Besoin de renvoyer l'invitation
- Token expiré (> 7 jours)
- Email initial non reçu
- Salarié n'a pas complété son profil

### ❌ Cas bloqués
- Salarié sans email → Bouton désactivé avec message d'erreur
- Pendant l'envoi → Boutons désactivés
- Erreur API → Toast d'erreur

## 🎯 Flow complet

```
Staff sélectionne salarié
    ↓
Clic "Envoyer une relance justifs"
    ↓
Modale s'ouvre avec infos salarié
    ↓
Validation email présent
    ↓
Staff confirme "Envoyer"
    ↓
API génère nouveau token
    ↓
Supprime anciens tokens
    ↓
Envoie email avec lien
    ↓
Toast succès + fermeture modale
    ↓
Salarié reçoit email
    ↓
Clique sur lien → /auto-declaration?token=...
    ↓
Complète son profil et upload documents
```

## 💡 Avantages

1. **Simplicité** : Un seul clic depuis la fiche salarié
2. **Confirmation** : Modale explicative avant envoi
3. **Feedback** : Messages clairs de succès/erreur
4. **Sécurité** : Nouveau token à chaque envoi
5. **Traçabilité** : Logs des envois côté serveur
6. **UX** : Bouton visible et design attrayant

## ✅ Tests recommandés

1. **Envoi réussi**
   - Salarié avec email valide
   - Vérifier réception de l'email
   - Vérifier que le lien fonctionne
   - Vérifier expiration après 7 jours

2. **Salarié sans email**
   - Bouton doit être désactivé
   - Message d'erreur affiché
   - Pas d'appel API

3. **Erreur réseau**
   - Simuler échec API
   - Vérifier toast d'erreur
   - Modale reste ouverte

4. **Double envoi**
   - Envoyer 2 fois de suite
   - Vérifier que seul le dernier token est valide
   - Ancien token doit être supprimé

5. **Changement de salarié**
   - Ouvrir modale pour salarié A
   - Changer vers salarié B
   - Vérifier que la modale affiche les bonnes infos

## 🔄 Intégration avec l'existant

- Utilise l'API `/api/auto-declaration/generate-token` existante
- Utilise le service `autoDeclarationTokenService` existant
- Utilise les templates d'email existants
- Compatible avec le système d'auto-déclaration actuel
- Pas de modification de la base de données nécessaire

## 📈 Prochaines améliorations possibles

- [ ] Historique des relances envoyées
- [ ] Indication de la dernière relance envoyée
- [ ] Statistiques de complétion après relance
- [ ] Envoi groupé à plusieurs salariés
- [ ] Personnalisation du message
- [ ] Rappel automatique après X jours

---

**Date de création** : 12 octobre 2025
**Version** : 1.0.0
