# 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