4.6 KiB
Résumé des Corrections - Signatures DocuSeal
Date: 14 octobre 2025
Problème identifié
❌ Erreur : Unable to find form with slug 'mj9RzzWW2LbvnT?data-allow-typed-signature=false'
Cause : Les paramètres data-* étaient ajoutés à l'URL du slug DocuSeal, ce qui causait une erreur 404.
Solution implémentée
Les attributs data-* de DocuSeal doivent être passés comme attributs HTML sur le composant <docuseal-form>, pas dans l'URL data-src.
✅ Modifications effectuées
1. Composant <docuseal-form>
Fichiers modifiés :
/app/(app)/contrats/[id]/page.tsx/app/(app)/signatures-electroniques/page.tsx
Avant (❌ incorrect) :
<docuseal-form
data-src="https://docuseal.eu/s/mj9RzzWW2LbvnT?data-allow-typed-signature=false">
</docuseal-form>
Après (✅ correct) :
<docuseal-form
data-src="https://docuseal.eu/s/mj9RzzWW2LbvnT"
data-language="fr"
data-with-title="false"
data-background-color="#fff"
data-allow-typed-signature="false">
</docuseal-form>
2. Génération des URLs propres
Fichiers modifiés :
/app/(app)/contrats/[id]/page.tsx(lignes ~703-710, ~736-744)/app/(app)/signatures-electroniques/page.tsx(lignes ~203-218, ~243-251)/app/api/docuseal-signature/route.ts(lignes ~225-233)
Changement : Les URLs DocuSeal sont maintenant générées sans paramètres de requête.
// ✅ Correct
embed = `https://docuseal.eu/s/${docusealId}`;
// ❌ Ancien (incorrect)
embed = `https://docuseal.eu/s/${docusealId}?data-allow-typed-signature=false`;
État actuel de la fonctionnalité
✅ Désactivation de la saisie manuelle
Statut : Implémenté et fonctionnel
L'attribut data-allow-typed-signature="false" est ajouté sur le composant <docuseal-form> dans :
- Page de détail d'un contrat (
/contrats/[id]) - Page des signatures électroniques (
/signatures-electroniques)
⏳ Pré-remplissage de la signature (EN COURS)
Statut : Implémentation partielle
Ce qui fonctionne :
- ✅ Colonne
signature_b64créée dansorganization_details - ✅ L'API récupère la signature depuis la base de données
- ✅ Le paramètre
orgIdest passé depuis les composants
Ce qui reste à faire :
- Ajouter
data-signaturedynamiquement sur<docuseal-form> - Récupérer la signature côté client ou la passer via le serveur
- Tester avec une vraie signature base64
Comment tester
Test 1 : Désactivation de la saisie manuelle
-
Créer une nouvelle signature électronique depuis :
/staff/contrats/[id](bouton "Lancer signature électronique")- Ou
/staff/contrats(sélection multiple + signature groupée)
-
Ouvrir le lien de signature (en tant qu'employeur)
-
Vérifier :
- ❌ L'option "Saisir" ne doit PAS être disponible
- ✅ Les options "Dessiner" et "Charger" doivent être disponibles
Test 2 : Pré-remplissage de la signature (à venir)
- Ajouter une signature dans la base :
UPDATE organization_details
SET signature_b64 = 'data:image/png;base64,iVBORw0KG...'
WHERE org_id = 'VOTRE_ORG_ID';
-
Créer une signature électronique pour un contrat de cette organisation
-
Vérifier :
- La signature devrait être pré-remplie pour l'employeur
- L'employeur peut la valider ou la remplacer
Prochaines étapes
Pour le pré-remplissage de la signature
Option A : Via l'API DocuSeal (recommandé)
- Utiliser le paramètre
valueslors de la création de la soumission - Nécessite de connaître le nom exact du champ de signature dans le template
Option B : Côté client
- Récupérer la signature depuis Supabase côté client
- L'injecter dans l'attribut
data-signaturedu composant - Plus complexe mais plus flexible
Option C : URL encode dans signature_link
- Stocker la signature encodée dans le lien de signature
- L'extraire et l'ajouter dynamiquement au composant
- Limite de taille d'URL potentielle
Documentation de référence
- DocuSeal Embed Documentation : https://docs.docuseal.co/embed
- Attributs data-* :
data-allow-typed-signature: boolean (default: true)data-signature: string (base64, URL, ou texte)data-language: string (ex: "fr")data-with-title: booleandata-background-color: string
Notes importantes
⚠️ Les attributs data-* de DocuSeal sont des attributs HTML, pas des paramètres d'URL.
⚠️ L'URL data-src doit pointer vers le slug DocuSeal pur sans query parameters.
⚠️ Pour le pré-remplissage, le format base64 doit être complet : data:image/png;base64,...