# Pré-remplissage de la Signature Employeur - DocuSeal ## Date: 14 octobre 2025 ## Fonctionnalité Cette fonctionnalité permet de **pré-remplir automatiquement la signature de l'employeur** lors de la création d'une signature électronique via DocuSeal. ### Principe 1. La signature de l'employeur est stockée en **base64** dans la table `organization_details` (colonne `signature_b64`) 2. Lors de la création d'une signature électronique, l'API récupère cette signature 3. DocuSeal pré-remplit le champ de signature avec cette image 4. L'employeur peut : - Utiliser la signature pré-remplie (gain de temps) - Ou la remplacer par une nouvelle signature ## Base de données ### Table: `organization_details` Nouvelle colonne ajoutée : ```sql ALTER TABLE organization_details ADD COLUMN signature_b64 TEXT; ``` **Format attendu :** - Type: `TEXT` - Contenu: Image de signature encodée en base64 - Format acceptés par DocuSeal : - Base64 encodée (ex: `data:image/png;base64,iVBORw0KG...`) - URL publique d'une image - Texte brut (sera rendu avec une police standard) ### Comment remplir la signature 1. **Via l'interface d'administration** (à implémenter) 2. **Via SQL directement** : ```sql UPDATE organization_details SET signature_b64 = 'data:image/png;base64,iVBORw0KGgoAAAANS...' WHERE org_id = 'votre-org-id'; ``` ## Modifications techniques ### 1. API DocuSeal Signature (`/app/api/docuseal-signature/route.ts`) **Ajout du paramètre `orgId`** : ```typescript const { // ... autres paramètres orgId = null // ID de l'organisation pour récupérer la signature } = data; ``` **Récupération de la signature** : ```typescript let employerSignatureB64 = null; if (orgId) { const { data: orgDetails } = await supabase .from('organization_details') .select('signature_b64') .eq('org_id', orgId) .maybeSingle(); if (orgDetails?.signature_b64) { employerSignatureB64 = orgDetails.signature_b64; } } ``` **Pré-remplissage dans DocuSeal** : ```typescript submitters: [ { role: 'Employeur', email: employerEmail, metadata: { 'allow-typed-signature': false, ...(employerSignatureB64 && { 'signature': employerSignatureB64 // data-signature pour pré-remplir }) } } ] ``` ### 2. API Bulk E-Sign (`/app/api/staff/contracts/bulk-esign/route.ts`) Ajout de `orgId` dans les données envoyées : ```typescript const signatureData = { // ... autres champs orgId: contract.org_id // Passer l'org_id pour récupérer la signature }; ``` ### 3. Contract Editor (`/components/staff/contracts/ContractEditor.tsx`) Ajout de `orgId` dans les données de signature individuelle : ```typescript const signatureData = { // ... autres champs orgId: contract.org_id // Passer l'org_id pour récupérer la signature }; ``` ## Points d'application La signature pré-remplie fonctionne pour : 1. ✅ **Signature individuelle** depuis `/staff/contrats/[id]` 2. ✅ **Signature groupée** depuis `/staff/contrats` (sélection multiple) ## Comportement utilisateur ### Pour l'employeur : 1. **Si une signature est enregistrée** : - Le champ de signature s'affiche avec la signature pré-remplie - L'employeur peut la valider directement (1 clic) - Ou la remplacer en dessinant/uploadant une nouvelle signature 2. **Si aucune signature n'est enregistrée** : - Comportement normal : l'employeur doit créer sa signature - Options : Dessiner ou Uploader une image - ❌ Saisie au clavier désactivée ### Pour le salarié : - Pas de pré-remplissage (chaque salarié signe manuellement) - Options : Dessiner ou Uploader une image - ❌ Saisie au clavier désactivée ## Avantages ✅ **Gain de temps** : L'employeur n'a pas besoin de redessiner à chaque contrat ✅ **Cohérence** : Même signature sur tous les contrats de l'organisation ✅ **Flexibilité** : Possibilité de remplacer la signature si nécessaire ✅ **Sécurité** : Signature stockée de manière centralisée et sécurisée ## Migration SQL ```sql -- Ajouter la colonne signature_b64 si elle n'existe pas ALTER TABLE organization_details ADD COLUMN IF NOT EXISTS signature_b64 TEXT; -- Créer un index pour les recherches CREATE INDEX IF NOT EXISTS idx_organization_details_signature ON organization_details(org_id) WHERE signature_b64 IS NOT NULL; ``` ## Test ### Prérequis 1. **Ajouter une signature dans la base** : ```sql UPDATE organization_details SET signature_b64 = 'data:image/png;base64,iVBORw0KG...' WHERE org_id = 'VOTRE_ORG_ID'; ``` 2. **Créer une signature électronique** pour un contrat de cette organisation ### Processus de test 1. **Depuis la page du contrat** (`/contrats/[id]`) : - Ouvrir un contrat appartenant à une organisation avec signature_b64 - Cliquer sur "Voir signature" ou accéder à la signature électronique 2. **Vérification** : - La signature de l'employeur devrait être pré-remplie - L'employeur peut la valider directement ou la remplacer - Le salarié n'a pas de pré-remplissage (signature manuelle requise) ### Fonctionnement technique 1. **API `/api/contrats/[id]/signature`** : - Récupère le contrat avec l'org_id - Récupère la signature_b64 depuis organization_details - Retourne les données avec la signature 2. **Page `/contrats/[id]`** : - Récupère les données via l'API - Stocke la signature dans sessionStorage - Injecte `data-signature` dans le composant `` 3. **Composant ``** : - Lit la signature depuis sessionStorage - Ajoute l'attribut `data-signature` dynamiquement - DocuSeal pré-remplit le champ de signature ### Points d'application actuels ✅ **Page de détail du contrat** (`/contrats/[id]`) - IMPLÉMENTÉ ⏳ **Page signatures électroniques** (`/signatures-electroniques`) - À IMPLÉMENTER ⏳ **Signature groupée** (`/staff/contrats`) - À IMPLÉMENTER (nécessite modification de l'API bulk-esign) ## Références - Documentation DocuSeal `data-signature` : https://docs.docuseal.co/api - Format : Allows pre-filling signature fields - Types acceptés : - Base64 encoded image string - Public URL to an image - Plain text (rendered with standard font) ## TODO (Améliorations futures) - [ ] Interface d'administration pour uploader/gérer la signature - [ ] Validation du format base64 - [ ] Prévisualisation de la signature dans l'interface - [ ] Historique des signatures utilisées - [ ] Support de plusieurs signatures par organisation (différents signataires)