✨ Nouvelles fonctionnalités - Page de gestion des avenants (/staff/avenants) - Page de détail d'un avenant (/staff/avenants/[id]) - Création d'avenants (objet, durée, rémunération) - Génération automatique de PDF d'avenant - Signature électronique via DocuSeal (employeur puis salarié) - Changement manuel du statut d'un avenant - Suppression d'avenants 🔧 Routes API - POST /api/staff/amendments/create - Créer un avenant - POST /api/staff/amendments/generate-pdf - Générer le PDF - POST /api/staff/amendments/[id]/send-signature - Envoyer en signature - POST /api/staff/amendments/[id]/change-status - Changer le statut - POST /api/webhooks/docuseal-amendment - Webhook après signature employeur - GET /api/signatures-electroniques/avenants - Liste des avenants en signature 📧 Système email universel v2 - Migration vers le système universel v2 pour les emails d'avenants - Template 'signature-request-employee-amendment' pour salariés - Insertion automatique dans DynamoDB pour la Lambda - Mise à jour automatique du statut dans Supabase 🗄️ Base de données - Table 'avenants' avec tous les champs (objet, durée, rémunération) - Colonnes de notification (last_employer_notification_at, last_employee_notification_at) - Liaison avec cddu_contracts 🎨 Composants - AvenantDetailPageClient - Détail complet d'un avenant - ChangeStatusModal - Changement de statut manuel - SendSignatureModal - Envoi en signature - DeleteAvenantModal - Suppression avec confirmation - AvenantSuccessModal - Confirmation de création 📚 Documentation - AVENANT_EMAIL_SYSTEM_MIGRATION.md - Guide complet de migration 🐛 Corrections - Fix parsing défensif dans Lambda AWS - Fix récupération des données depuis DynamoDB - Fix statut MFA !== 'verified' au lieu de === 'unverified'
232 lines
7.9 KiB
Markdown
232 lines
7.9 KiB
Markdown
# Migration du système d'envoi d'email pour les avenants
|
|
|
|
## 📋 Résumé des changements
|
|
|
|
### Problèmes identifiés
|
|
1. ❌ La Lambda AWS envoyait les emails directement via SES avec un template HTML codé en dur
|
|
2. ❌ Pas d'utilisation du système universel v2 pour les emails d'avenants
|
|
3. ❌ Pas de mise à jour du statut de l'avenant dans Supabase après signature employeur
|
|
4. ❌ Logging dans Airtable au lieu du système centralisé
|
|
|
|
### Solutions implémentées
|
|
✅ Création d'une route API Next.js `/api/webhooks/docuseal-amendment`
|
|
✅ Migration vers le système universel v2 pour les emails
|
|
✅ Mise à jour automatique du statut de l'avenant dans Supabase
|
|
✅ Logging centralisé via `emailLoggingService`
|
|
✅ Simplification de la Lambda (appel API au lieu de logique métier)
|
|
|
|
## 🔄 Nouveau flux
|
|
|
|
### Avant
|
|
```
|
|
DocuSeal Webhook
|
|
↓
|
|
Lambda postDocuSealAvenantSalarie
|
|
↓
|
|
AWS SES (email HTML codé en dur)
|
|
↓
|
|
AWS S3 (stockage email)
|
|
↓
|
|
Airtable (logging)
|
|
```
|
|
|
|
### Après
|
|
```
|
|
DocuSeal Webhook
|
|
↓
|
|
Lambda postDocuSealAvenantSalarie
|
|
↓
|
|
API Next.js /api/webhooks/docuseal-amendment
|
|
↓
|
|
1. Mise à jour Supabase (statut avenant)
|
|
↓
|
|
2. Système universel v2 (email)
|
|
↓
|
|
3. AWS SES (envoi)
|
|
↓
|
|
4. emailLoggingService (logging centralisé)
|
|
```
|
|
|
|
## 📁 Fichiers modifiés
|
|
|
|
### 1. Lambda AWS
|
|
**Fichier** : `/tmp/aws-toolkit-vscode/lambda/eu-west-3/postDocuSealAvenantSalarie/index.js`
|
|
|
|
**Changements** :
|
|
- ✅ Ajout du parsing défensif pour `event.body`
|
|
- ✅ Appel à l'API Next.js au lieu d'envoyer l'email directement
|
|
- ✅ Suppression des fonctions `sendSignatureEmail()`, `uploadEmailToS3()`, `logToAirtable()`, `findRecordIdByField()`, `generateEmailHtml()`
|
|
- ✅ Utilisation de la variable d'environnement `NEXT_API_URL`
|
|
|
|
### 2. Route `/api/staff/amendments/[id]/send-signature` (MODIFIÉ)
|
|
**Fichier** : `/Users/renaud/Projet Nouvel Espace Paie/app/api/staff/amendments/[id]/send-signature/route.ts`
|
|
|
|
**Changement critique** :
|
|
- ✅ **Insertion des données dans DynamoDB** avant la création de la soumission DocuSeal
|
|
- ✅ Clé primaire : `avenant.numero_avenant` (ex: AVE-001)
|
|
- ✅ Données stockées : email salarié, référence contrat, nom, dates, poste, etc.
|
|
|
|
**Pourquoi** : La Lambda a besoin de ces données pour appeler l'API Next.js après la signature de l'employeur.
|
|
|
|
### 3. Route API Next.js (NOUVEAU)
|
|
**Fichier** : `/Users/renaud/Projet Nouvel Espace Paie/app/api/webhooks/docuseal-amendment/route.ts`
|
|
|
|
**Fonctionnalités** :
|
|
- ✅ Récupération de l'avenant par son numéro
|
|
- ✅ Mise à jour du statut : `signature_status = "pending_employee"`
|
|
- ✅ Envoi de l'email via `sendUniversalEmailV2` avec le type `signature-request-employee-amendment`
|
|
- ✅ Logging automatique via `emailLoggingService`
|
|
- ✅ Gestion d'erreurs complète avec logs détaillés
|
|
|
|
## 🎨 Template email utilisé
|
|
|
|
**Type** : `signature-request-employee-amendment`
|
|
**Système** : Universel v2 (`templates-mails/universal-template.html`)
|
|
**Couleurs** : Standards Odentas (header #171424, bouton #efc543)
|
|
|
|
**Contenu** :
|
|
- Greeting personnalisé avec prénom du salarié
|
|
- Message explicatif sur la signature de l'avenant
|
|
- Bouton CTA "Signer l'avenant" avec lien DocuSeal
|
|
- Carte d'info : employeur + matricule
|
|
- Carte détails : référence contrat, type, profession, date début, production
|
|
- Footer légal standard
|
|
|
|
## 🚀 Déploiement
|
|
|
|
### Étape 1 : Déployer Next.js sur Vercel
|
|
```bash
|
|
cd "/Users/renaud/Projet Nouvel Espace Paie"
|
|
git add app/api/webhooks/docuseal-amendment/route.ts
|
|
git commit -m "feat: Ajouter route webhook avenant avec système universel v2"
|
|
git push origin main
|
|
```
|
|
|
|
### Étape 2 : Mettre à jour la Lambda AWS
|
|
1. Ouvrir AWS Lambda Console
|
|
2. Aller dans `postDocuSealAvenantSalarie`
|
|
3. Copier le contenu de `/tmp/aws-toolkit-vscode/lambda/eu-west-3/postDocuSealAvenantSalarie/index.js`
|
|
4. Ajouter la variable d'environnement :
|
|
- `NEXT_API_URL` = `https://paie.odentas.fr` (production)
|
|
- ou `https://staging.paie.odentas.fr` (staging)
|
|
5. Déployer la Lambda
|
|
|
|
### Étape 3 : Tester le flux complet
|
|
1. Créer un avenant test dans `/staff/avenants/nouveau`
|
|
2. Envoyer en signature à l'employeur
|
|
3. Signer en tant qu'employeur via DocuSeal
|
|
4. Vérifier dans les logs :
|
|
- Lambda CloudWatch : appel API Next.js
|
|
- Vercel : route webhook appelée
|
|
- Supabase : statut avenant mis à jour
|
|
- Email reçu par le salarié (boîte mail)
|
|
|
|
## 📊 Vérifications
|
|
|
|
### Dans Supabase
|
|
```sql
|
|
-- Vérifier le statut de l'avenant
|
|
SELECT
|
|
numero_avenant,
|
|
signature_status,
|
|
last_employee_notification_at
|
|
FROM avenants
|
|
WHERE numero_avenant = 'AVE-XXX';
|
|
```
|
|
|
|
**Attendu** : `signature_status = 'pending_employee'` après signature employeur
|
|
|
|
### Dans les logs Vercel
|
|
Chercher : `[WEBHOOK AVENANT]`
|
|
- ✅ Avenant trouvé
|
|
- ✅ Statut mis à jour
|
|
- ✅ Email envoyé
|
|
|
|
### Dans email_logs (Supabase)
|
|
```sql
|
|
-- Vérifier l'envoi de l'email
|
|
SELECT
|
|
email_type,
|
|
to_emails,
|
|
email_status,
|
|
created_at
|
|
FROM email_logs
|
|
WHERE email_type = 'signature-request-employee-amendment'
|
|
ORDER BY created_at DESC
|
|
LIMIT 10;
|
|
```
|
|
|
|
## ⚙️ Variables d'environnement requises
|
|
|
|
### Lambda AWS
|
|
- `DOCUSEAL_API_TOKEN` - Token API DocuSeal
|
|
- `NEXT_API_URL` - URL de l'API Next.js (ex: `https://paie.odentas.fr`)
|
|
- AWS credentials (automatique via IAM Role)
|
|
|
|
### Next.js (Vercel)
|
|
- `DOCUSEAL_TOKEN` - Token API DocuSeal
|
|
- `NEXT_PUBLIC_SUPABASE_URL` - URL Supabase
|
|
- `SUPABASE_SERVICE_ROLE_KEY` - Service role key
|
|
- `AWS_REGION` - Région AWS (eu-west-3)
|
|
- `AWS_ACCESS_KEY_ID` - Credentials AWS SES
|
|
- `AWS_SECRET_ACCESS_KEY` - Credentials AWS SES
|
|
|
|
## 🐛 Debugging
|
|
|
|
### Si l'email n'est pas envoyé
|
|
1. **Vérifier DynamoDB** : Les données sont-elles présentes pour le numéro d'avenant ?
|
|
```bash
|
|
aws dynamodb get-item \
|
|
--table-name DocuSealNotification \
|
|
--key '{"submission_id":{"S":"AVE-001"}}'
|
|
```
|
|
2. Vérifier les logs Lambda CloudWatch : `postDocuSealAvenantSalarie`
|
|
3. Vérifier les logs Vercel : `/api/webhooks/docuseal-amendment`
|
|
4. Vérifier `email_logs` dans Supabase
|
|
5. Vérifier que le type `signature-request-employee-amendment` existe dans `emailTemplateService.ts`
|
|
|
|
### Si les données ne sont pas dans DynamoDB
|
|
- **Cause** : Échec de l'insertion lors de l'envoi en signature
|
|
- **Solution** : Vérifier les credentials AWS dans les variables d'environnement Vercel
|
|
- **Vérifier** : Logs de `/api/staff/amendments/[id]/send-signature` pour l'erreur DynamoDB
|
|
|
|
### Si le statut n'est pas mis à jour
|
|
1. Vérifier que l'avenant existe avec le bon `numero_avenant`
|
|
2. Vérifier les permissions Supabase (service role)
|
|
3. Vérifier les logs de la route webhook
|
|
|
|
### Si la Lambda échoue
|
|
1. Vérifier `event.body` dans les logs CloudWatch
|
|
2. Vérifier que `NEXT_API_URL` est définie
|
|
3. Vérifier que l'API Next.js est accessible (pas de firewall/CORS)
|
|
|
|
## 📝 Notes importantes
|
|
|
|
- ⚠️ **Ne pas supprimer** la table DynamoDB `DocuSealNotification` (encore utilisée par la Lambda)
|
|
- ⚠️ **Ne pas supprimer** les fonctions Airtable dans la Lambda (encore dans le code mais non utilisées)
|
|
- ✅ Le logging Airtable est remplacé par `emailLoggingService`
|
|
- ✅ Le stockage S3 des emails est remplacé par le logging centralisé
|
|
- ✅ Les emails utilisent maintenant le template universel v2 cohérent avec le reste de l'application
|
|
|
|
## 🎯 Prochaines étapes (optionnel)
|
|
|
|
1. Migrer complètement vers webhook DocuSeal direct (sans Lambda)
|
|
2. Supprimer DynamoDB et Airtable du flux
|
|
3. Ajouter un webhook pour la signature du salarié (mise à jour finale du statut)
|
|
4. Ajouter des tests automatisés pour le flux complet
|
|
|
|
## ✅ Checklist de déploiement
|
|
|
|
- [ ] Code Next.js déployé sur Vercel
|
|
- [ ] Lambda mise à jour avec nouveau code
|
|
- [ ] Variable `NEXT_API_URL` ajoutée à la Lambda
|
|
- [ ] Test complet du flux (création → signature employeur → email salarié)
|
|
- [ ] Vérification dans Supabase (statut mis à jour)
|
|
- [ ] Vérification email reçu avec bon template
|
|
- [ ] Logs vérifiés (Lambda + Vercel + email_logs)
|
|
|
|
---
|
|
|
|
**Date de migration** : 23 octobre 2025
|
|
**Auteur** : GitHub Copilot
|
|
**Statut** : ✅ Prêt pour déploiement
|