espace-paie-odentas/PDFMONKEY_IMPLEMENTATION.md

4.8 KiB

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

# 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.