- Téléchargement des PDF depuis URLs Airtable
- Upload vers S3 avec pattern avenants/{reference}_avenant_{timestamp}.pdf
- Mise à jour de pdf_s3_key et pdf_url dans Supabase
- 91 PDF migrés avec succès
|
||
|---|---|---|
| .. | ||
| check-columns.mjs | ||
| check-feminisations-table.mjs | ||
| clear-sign-positions.ts | ||
| extract-pdf-text.js | ||
| fix-rls-contribution-notifications.sql | ||
| fix-rls-organization-details.sql | ||
| migrate-avenants-from-airtable.ts | ||
| migrate-avenants-pdf-from-airtable.ts | ||
| migrate-employee-docuseal-slugs.ts | ||
| migrate-feminisations.mjs | ||
| README.md | ||
| render-email.js | ||
| send-test-email.js | ||
| test-demo-domains.sh | ||
| test-pdfium-extraction.ts | ||
| verify-contracts-before-migration.ts | ||
| verify-pdfmonkey-data.js | ||
| verify-rls-facturation-informations.sql | ||
| verify-rls-policies.sql | ||
| verify-rls-virements-cotisations.sql | ||
Système d'Email Universel - Guide Développeur
État actuel du système
✅ PRÊT À L'EMPLOI - Le système universel avec template centralisé et textes configurables est maintenant activé en production.
Fonctionnement
Quand tu annules/modifies/crées un CDDU :
- Template utilisé :
templates-mails/universal-template.html(Handlebars) - Textes : Fusion entre
templates-mails/texts.jsonet templates intégrés - Rendu : Handlebars + conversion data-attributes → inline CSS
- Envoi : SES via
sendUniversalEmailV2()
Flux d'emails CDDU
- Création :
contract-created→sendContractNotifications() - Modification :
contract-updated→sendContractUpdateNotifications() - Annulation :
contract-cancelled→sendContractCancellationNotifications()
Tests en développement
1. Preview local (dry-run)
# Prévisualiser l'email d'annulation
node scripts/send-test-email.js --template universal-template.html --sample annulation
# Ouvrir tmp/send-preview.html dans le navigateur
2. Envoi réel SES
# Configuration environnement (exemple)
export AWS_ACCESS_KEY_ID=your_key
export AWS_SECRET_ACCESS_KEY=your_secret
export AWS_REGION=eu-west-3
export FROM_EMAIL=paie@odentas.fr
# Envoi test
node scripts/send-test-email.js --template universal-template.html --sample annulation --to dev@example.com --send
3. Données personnalisées
# Créer data.json avec vos données
echo '{"employeeName":"Test User","contractReference":"TEST-123"}' > data.json
# Utiliser le fichier de données
node scripts/send-test-email.js --data data.json --sample annulation --to dev@example.com --send
Personnalisation
Modifier les textes
Éditer templates-mails/texts.json :
{
"contract-cancelled": {
"subject": "CDDU annulé - {{employeeName}}",
"title": "Contrat CDDU annulé",
"mainMessage": "Votre contrat a été annulé."
}
}
Modifier le design
Éditer templates-mails/universal-template.html :
- Couleurs : utiliser data-attributes (ex:
data-button-color="{{buttonColor}}") - Structure : HTML + Handlebars (
{{#if}},{{#each}})
Production vs Ancien système
| Aspect | Ancien | Nouveau (actuel) |
|---|---|---|
| Templates | Individuels (annulationCDDU.html, etc) | Universel (universal-template.html) |
| Textes | Hard-codés dans templates | Centralisés (texts.json) |
| Logique | Regex string replace | Handlebars |
| Styles | CSS statique | Data-attributes → inline CSS |
| Maintenance | 3+ fichiers à synchroniser | 1 template + 1 fichier textes |
Notes importantes
- ⚠️ SES Sandbox : Vérifier les adresses destinataires si le compte est en sandbox
- ⚠️ FROM_EMAIL : Doit être une adresse vérifiée dans SES
- ✅ TypeScript : Le système compile sans erreurs
- ✅ Backward compatible : L'ancien
sendEmail()reste disponible pour d'autres usages
Dépannage
Email non reçu
- Vérifier les logs de la console pour les erreurs SES
- Vérifier que FROM_EMAIL est vérifié dans AWS SES
- Vérifier que le destinataire est vérifié (si sandbox)
Template cassé
- Tester avec
scripts/send-test-email.jsen dry-run - Vérifier la syntaxe Handlebars dans
universal-template.html - Vérifier que
texts.jsonest un JSON valide
Styles incorrects
- Les couleurs dynamiques doivent utiliser data-attributes
- Éviter les placeholders
{{...}}dans les blocs<style> - Le service convertit automatiquement data-* → style inline