espace-paie-odentas/PDFMONKEY_IMPLEMENTATION.md

107 lines
No EOL
4.8 KiB
Markdown

# Génération de PDF de contrats CDDU via PDFMonkey
Cette implémentation ajoute la fonctionnalité de génération de PDF pour les contrats CDDU directement depuis l'interface staff, en remplaçant la logique Lambda AWS par un endpoint Next.js API.
## Fichiers créés/modifiés
### 1. Endpoint API - `/app/api/contrats/[id]/generate-pdf/route.ts`
- **Réplique la logique de la Lambda AWS** avec les adaptations pour Next.js
- **Récupère les données** depuis Supabase (tables : `cddu_contracts`, `organization_details`, `salaries`, `productions`)
- **Mappe les données** selon le CSV fourni pour les transformer au format PDFMonkey
- **Gère le polling** pour attendre la génération du PDF
- **Retourne l'URL de téléchargement** du PDF généré
### 2. Composant UI - `/components/staff/contracts/ContractEditor.tsx`
- **Bouton "Créer le PDF"** ajouté dans l'en-tête
- **État de loading** pendant la génération
- **Gestion des erreurs** avec toast notifications
- **Ouverture automatique** du PDF dans un nouvel onglet
### 3. Variables d'environnement - `.env.example`
- **PDFMONKEY_URL** : URL de l'API PDFMonkey
- **PDFMONKEY_API_KEY** : Clé API PDFMonkey
## Mapping des données (selon le CSV fourni)
| Donnée Lambda (PDFMonkey) | Table Supabase | Colonne Supabase | Transformation |
|---------------------------|----------------|------------------|----------------|
| `structure_name` | `organization_details` | `structure` | ✓ |
| `structure_adresse` | `organization_details` | `adresse` | ✓ |
| `structure_cpville` | `organization_details` | `cp` | ✓ |
| `structure_ville` | `organization_details` | `ville` | ✓ |
| `structure_siret` | `organization_details` | `siret` | ✓ |
| `structure_licence` | `organization_details` | `licence_spectacles` | ✓ |
| `structure_spectacle` | `organization_details` | `structure_a_spectacles` | Boolean → string |
| `forme_juridique` | `organization_details` | `forme_juridique` | ✓ |
| `structure_signataire` | `organization_details` | `prenom_signataire + nom_signataire` | Concaténation |
| `structure_signatairequalite` | `organization_details` | `qualite_signataire` | ✓ |
| `delegation` | `organization_details` | `delegation_signature` | Boolean → string |
| `employee_firstname` | `salaries` | `prenom` | ✓ |
| `employee_lastname` | `salaries` | `nom` | ✓ |
| `employee_dob` | `salaries` | `date_naissance` | Format DD/MM/YYYY |
| `date_debut` | `cddu_contracts` | `start_date` | Format DD/MM/YYYY |
| `date_fin` | `cddu_contracts` | `end_date` | Format DD/MM/YYYY |
| `salaire_brut` | `cddu_contracts` | `brut` | Format monétaire français |
| ... | ... | ... | ... |
## Configuration requise
### Variables d'environnement
```env
# PDFMonkey Configuration
PDFMONKEY_URL=https://api.pdfmonkey.io/api/v1/documents
PDFMONKEY_API_KEY=your-pdfmonkey-api-key
```
### Template PDFMonkey
- **Template ID** : `736E1A5F-BBA1-4D3E-91ED-A6184479B58D` (identique à la Lambda)
## Utilisation
1. **Accéder** à la page `/staff/contrats/[id]`
2. **Cliquer** sur le bouton "Créer le PDF"
3. **Attendre** la génération (status "Génération...")
4. **Le PDF** s'ouvre automatiquement dans un nouvel onglet
## Différences avec la Lambda
### ✅ Fonctionnalités conservées
- Même logique de récupération des données
- Même mapping vers PDFMonkey
- Même template ID PDFMonkey
- Même logique de polling pour attendre la génération
### ⚠️ Fonctionnalités non implémentées
- **Upload vers S3** : non implémenté (le PDF est accessible via l'URL PDFMonkey)
- **Webhook WebDAV** : non implémenté
- **Sauvegarde du fichier** : non implémentée
### 🔄 Adaptations
- **Authentification** : Utilise l'auth Supabase au lieu d'AWS Cognito
- **Base de données** : Utilise Supabase au lieu d'Airtable
- **Interface** : Intégré dans l'interface existante au lieu d'être déclenché par une URL externe
## Sécurité
-**Vérification d'authentification** (utilisateur connecté)
-**Vérification des permissions** (accès staff requis)
-**Validation des données** (contrat, organisation, salarié doivent exister)
-**Variables d'environnement** sécurisées côté serveur
## Gestion d'erreurs
- **Contrat non trouvé** : Retourne 404
- **Données manquantes** : Retourne 404 avec message explicite
- **Erreur PDFMonkey** : Retourne 500 avec détails
- **Erreur de polling** : Timeout après 10 tentatives
- **Interface utilisateur** : Toast notifications pour informer l'utilisateur
## Tests recommandés
1. **Test avec un contrat valide** avec toutes les données
2. **Test avec données manquantes** (salarié, organisation)
3. **Test d'authentification** (utilisateur non connecté, non-staff)
4. **Test de timeout** PDFMonkey
5. **Test d'erreur API** PDFMonkey
Cette implémentation maintient la compatibilité avec votre système PDFMonkey existant tout en s'intégrant parfaitement dans votre application Next.js.