Commit graph

394 commits

Author SHA1 Message Date
b790faf12c feat: Implémentation complète du système Odentas Sign
- Remplacement de DocuSeal par solution souveraine Odentas Sign
- Système d'authentification OTP pour signataires (bcryptjs + JWT)
- 8 routes API: send-otp, verify-otp, sign, pdf-url, positions, status, webhook, signers
- Interface moderne avec canvas de signature et animations (framer-motion, confetti)
- Système de templates pour auto-détection des positions de signature (CDDU, RG, avenants)
- PDF viewer avec @react-pdf-viewer (compatible Next.js)
- Stockage S3: source/, signatures/, evidence/, signed/, certs/
- Tables Supabase: sign_requests, signers, sign_positions, sign_events, sign_assets
- Evidence bundle automatique (JSON metadata + timestamps)
- Templates emails: OTP et completion
- Scripts Lambda prêts: pades-sign (KMS seal) et tsaStamp (RFC3161)
- Mode test détecté automatiquement (emails whitelist)
- Tests complets avec PDF CDDU réel (2 signataires)
2025-10-27 19:03:07 +01:00
032ae49ed4 fix: Envoyer jours_travail_non_artiste dans dates_travaillees pour les metteurs en scène
- Pour les metteurs en scène : dates_travaillees reçoit jours_travail_non_artiste (brut)
- Pour les autres : dates_travaillees combine représentations, répétitions et jours_travail
- precisions_salaire reçoit toujours la colonne precisions_salaire de Supabase
2025-10-26 17:42:22 +01:00
d38f975b9e fix: Envoyer le texte brut de jours_travail_non_artiste dans precisions_salaire
Pour les metteurs en scène, envoyer directement le contenu de jours_travail_non_artiste
sans formatage ni préfixe 'Jours de travail :'
2025-10-26 17:37:47 +01:00
78429e93d6 fix: Corriger détection des metteurs en scène par profession au lieu de catpro
La détection se fait maintenant sur contract.profession === 'Metteur en scène'
car les metteurs en scène ont la catégorie 'Artiste' comme les autres artistes.
2025-10-26 17:33:31 +01:00
807a7f5f3e feat: Envoyer jours de travail des metteurs en scène dans precisions_salaire pour PDFMonkey
- Détecter les metteurs en scène via employee_catpro
- Utiliser jours_travail_non_artiste au lieu de jours_travail
- Envoyer les jours de travail formatés dans precisions_salaire
- Exclure jours_travail de dates_travaillees pour les metteurs en scène
- Ajouter logs de débogage pour tracer la logique
2025-10-26 17:30:54 +01:00
3f355d42e0 feat(contrat): Alignement complet avec Espace Paie et RGPD
- Ajout signature électronique DocuSeal (conforme règlement eIDAS n°910/2014)
- Ajout auto-déclaration salariés (page publique /auto-declaration)
- Ajout suivi signatures temps réel (page /signatures-electroniques)
- Ajout relance automatique salariés non-signants
- Processus signature détaillé (6 étapes: employeur → email → page publique → vérification date naissance → signature → stockage)
- Bases légales RGPD signature électronique (Article 6.1.b + 6.1.c)
- Durées conservation: contrats signés 50 ans, logs signature 5 ans
- Limites responsabilité signature (refus salarié, usurpation identité)
- Sous-traitants UE précisés (AWS eu-west-3, Supabase EU, Vercel cdg1, Docuseal eIDAS, PostHog EU)
- Mesures sécurité signature (vérification identité, traçabilité IP, horodatage)
- Cookies DocuSeal (essentiels, pas de consentement requis)

Articles modifiés: 1, 3.1, 4.1, 7.1, 8.2-8.5, 11
Annexes modifiées: 1 (calendrier), 2 (abonnement), 3 (services inclus), 4 (RGPD)
2025-10-26 14:13:36 +01:00
59acd5b4ee fix: Popup consentement pleine hauteur sur mobile
- Délai réduit à 600ms (original)
- Sur mobile: popup s'étire de top-20 à bottom-4 pour couvrir modal date de naissance
- Sur desktop: comportement normal (coin bas gauche)
- Évite l'effet visuel bizarre de superposition tout en respectant RGPD
2025-10-25 21:32:32 +02:00
cdd7bc01a4 fix: Augmente délai apparition popup consentement à 2s
- Change délai de 600ms à 2000ms pour éviter conflit visuel avec modal date de naissance
- Le popup apparaît après que l'utilisateur ait eu le temps d'interagir avec le modal de vérification
2025-10-25 21:28:30 +02:00
4706919b91 fix: Retrait overflow-hidden popup consentement mobile
- Enlève overflow-hidden et relative du conteneur principal
- Résout le problème d'affichage de la card bleue qui déborde en haut sur mobile
2025-10-25 21:13:07 +02:00
9cb4ed09a4 feat(rgpd): Système consentement analytics salariés + politique exhaustive
- Popup consentement salariés: bandeau style identique employeurs, card Odentas, détails visibles, bouton Accepter visible (sky-600)
- Hook useAnalyticsConsent: détection pages salariés (/auto-declaration, /signature-salarie)
- ConsentManager: orchestrateur affichage popups selon contexte B2B/B2C
- PostHogProvider: init conditionnelle au consentement salarié
- Politique Section 9 bis: liste exhaustive organismes (Audiens, AGIRC-ARRCO, CNAV, FNAS, FCAP, etc.), adresse postale pour exercice droits
- PopupInfoSuivi: card Odentas Media SAS engagement transparence
- Conformité RGPD: B2B (intérêt légitime) + B2C (consentement opt-in Article 6.1.a)
2025-10-25 21:08:00 +02:00
7079ab0aa3 fix: Amélioration du message de confidentialité du modal cookies
- Retrait de la mention 'PostHog' (remplacé par 'outil d'analyse')
- Précision : données hébergées dans l'Union Européenne
- Ajout : mention explicite sur la non-revente et non-partage avec des tiers
- Ajout : exception légale pour les organismes sociaux et caisses de retraite
- Message plus clair et transparent pour les utilisateurs
2025-10-25 18:55:06 +02:00
5a07c7c496 fix: Améliorer la détection de texte formaté et corriger l'espace dans 'au'
- Ajouter détection de ' par jour ' et textes finissant par '.'
- Ajouter détection de textes commençant par un nombre (ex: '5 heures le...')
- Corriger le double espace avant 'au' dans DatesQuantityModal
- Améliorer la robustesse de la détection pour tous types de phrases formatées
- Applique à tous les champs de dates (représentations, répétitions, travail)
2025-10-25 18:32:14 +02:00
8cb155d33e fix: Améliorer la détection du texte formaté pour dates travaillées
- Ajouter détection de 'du ' et 'le ' en début de chaîne
- Ajouter détection de ' au ' dans le texte
- Évite le parsing incorrect de textes déjà formatés comme 'du 26/10 au 31/10'
- Applique la correction à tous les champs de dates
2025-10-25 18:25:54 +02:00
66b7368a41 debug: Ajouter logs pour tracer la mise à jour de joursTravailDisplay 2025-10-25 18:20:51 +02:00
094ad8cd55 fix: Simplifier les dépendances du useEffect pour jours_travail
- Utiliser contract complet comme dépendance au lieu de champs individuels
- Évite les problèmes de synchronisation partielle
- Garantit que jours_travail_non_artiste est rechargé correctement
2025-10-25 18:17:00 +02:00
5c30f13c0b chore: Améliorer les logs de debug pour jours_travail 2025-10-25 18:11:22 +02:00
8eba516501 fix: Corriger la persistance des dates travaillées pour metteurs en scène
- Charger depuis jours_travail_non_artiste pour techniciens/metteurs en scène
- Charger depuis jours_travail pour artistes classiques
- Sauvegarder dans le bon champ selon le mode (useHeuresMode)
- Résout le bug où les dates ne persistaient pas au rechargement
2025-10-25 17:42:17 +02:00
08cf18d89b debug: Ajouter des logs pour le suivi des jours travail dans ContractEditor 2025-10-25 15:15:14 +02:00
fa7057f978 fix: Simplifier la prop dateType dans ContractEditor pour afficher l'option skip hours 2025-10-25 14:42:56 +02:00
81de11da7d feat: Ajouter option ne pas appliquer heures par jour dans staff/contrats/[id] 2025-10-25 14:35:33 +02:00
34334f01df feat: Renommer colonnes Contrat/Paie/DPAE en C/P/D pour gagner de la place 2025-10-25 14:19:16 +02:00
c8a12bc0a7 feat: Transformer états en icônes Lucide et ajouter colonne Profession dans staff/contrats 2025-10-25 13:57:40 +02:00
3740c6d4cf feat: Ajouter option ne pas appliquer heures par jour pour jours de travail 2025-10-25 13:45:31 +02:00
3aa4a56cb1 feat: Ajouter champs adresse, cp et ville dans staff/clients/[id] 2025-10-25 12:46:35 +02:00
62ee3d3995 debug: Ajouter logs pour identifier le champ date_signature du contrat 2025-10-24 20:03:38 +02:00
785bc30833 debug: Ajouter logs pour tracer le type d'avenant envoyé à PDFMonkey
- Ajouter logs frontend pour voir le type_avenant envoyé
- Ajouter logs backend pour voir le type_avenant reçu
- Ajouter logs pour voir la valeur annulation calculée
2025-10-24 19:55:54 +02:00
90d9f6b56f feat: Ajouter support des avenants d'annulation avec envoi à PDFMonkey
- Modifier NouvelAvenantPageClient pour gérer type_avenant annulation
- Désactiver la sélection d'éléments pour les annulations
- Ajouter message d'information pour les avenants d'annulation
- Adapter l'API generate-pdf pour envoyer annulation: Oui à PDFMonkey
- Modifier l'API create pour accepter les annulations sans éléments requis
- Ne pas mettre à jour le contrat pour les annulations
2025-10-24 19:50:30 +02:00
7e2a022bf0 fix: Rétablir dates_travaillees dans le payload
- Le template PDFMonkey utilise dates_travaillees, pas les champs détails
- Rétablissement du champ pour que les dates s'affichent à nouveau
2025-10-24 16:47:19 +02:00
d34055a761 fix: Supprimer dates_travaillees du payload pour éviter doublons
- Commenté le champ dates_travaillees qui causait l'affichage en double
- Le template PDFMonkey doit maintenant utiliser uniquement :
  - dates_representations_detail pour les représentations
  - dates_repetitions_detail pour les répétitions
2025-10-24 16:34:48 +02:00
4c8b1959f2 fix: Autoriser n'importe quel nombre ≥1 pour les heures de répétition
- Modification validation dans DatesQuantityModal pour heures_repetitions
- Limite 1-3 maintenue pour représentations et services de répétition
- Retrait de la limite max pour les champs d'heures
- Mise à jour placeholder selon le type de saisie
2025-10-24 16:33:36 +02:00
44fc21c817 feat: Ajout saisie heures répétitions et correction PDF avenants
- Ajout champs heures totales et minutes pour répétitions dans AmendmentDureeForm
- Intégration DatesQuantityModal pour saisie heures par jour de répétition
- Ajout type 'heures_repetitions' dans dateFormatter et DatesQuantityModal
- Correction envoi precisions_salaire à PDFMonkey pour les avenants
- Ajout champs séparés dates_representations_detail et dates_repetitions_detail
- Correction logique dates_repetitions_heures pour éviter doublons dans PDF
2025-10-24 15:53:00 +02:00
3653dd6e77 fix: CRITIQUE - Récupérer submitters via API DocuSeal au lieu du payload
Webhook avenant completed:
- Le payload form.completed ne contient pas la liste complète des submitters
- Récupération via GET /api/docuseal/submissions/{id}
- Permet de vérifier que TOUS les submitters ont status='completed'
- Corrige le blocage où les emails finaux ne partaient jamais
2025-10-23 22:06:12 +02:00
6167b38d5c fix: Empêcher envoi email salarié en double lors de sa signature
Webhook docuseal-amendment:
- Vérifier le statut actuel avant de traiter
- Si déjà 'pending_employee' ou 'signed', ignorer le webhook
- Évite l'envoi en double de l'email d'invitation au salarié
- La Lambda appelle ce webhook à chaque signature, pas seulement employeur
2025-10-23 21:22:43 +02:00
4aabfc337f fix: Webhook avenant - n'accepter que form.completed et utiliser status 'signed'
Corrections webhook avenant completed:
- N'accepter QUE l'événement form.completed (envoyé une seule fois)
- Ignorer submission.completed (envoyé à chaque signature individuelle)
- Utiliser signature_status='signed' au lieu de 'completed'
- Corrige le problème d'email salarié envoyé en double
- Corrige l'affichage du statut dans l'interface
2025-10-23 21:05:26 +02:00
25b5f87c8b fix: Vérifier que tous les submitters ont signé avant emails finaux
Webhook avenant completed:
- Vérification du status de TOUS les submitters
- N'envoie les emails finaux que si status='completed' pour tous
- Évite l'envoi prématuré des emails de confirmation
- Log détaillé des statuts de signature
2025-10-23 20:57:49 +02:00
d7270f62ee fix: Utiliser employee_docuseal_slug stocké au lieu d'extraire depuis submission_url
Webhook avenant completed:
- Récupération du slug depuis avenant.employee_docuseal_slug
- Évite l'extraction incorrecte depuis submission_url
- Corrige le 404 sur /signature-salarie pour les avenants signés
2025-10-23 20:52:03 +02:00
e0fdf028af fix: Stocker employee_docuseal_slug dans avenants + corrections email employeur
Avenant signature:
- Stockage de employee_docuseal_slug lors de la signature employeur
- Permet au salarié d'accéder à la page signature-salarie

Email employeur avenant:
- Prénom depuis organization_details.prenom_signataire
- Email vers organization_details.email_signature
- Message: 'Le document est disponible dans la fiche contrat'
2025-10-23 20:43:18 +02:00
32570ec92a fix: Mise à jour statut avenant et contrat lors de la signature finale
- Ajout mise à jour cddu_contracts.avenant_signe = true
- Ajout cddu_contracts.avenant_signe_date avec timestamp
- Correction emails avenants (profession, infoCard employeur, URL salarié)
- Extraction docuseal_id depuis submission_url pour lien salarié
2025-10-23 20:32:23 +02:00
594f2996c4 feat: Afficher net à payer au lieu de net avant PAS dans staff/payslips
- Changement de net_amount vers net_after_withholding
- Mise à jour titre colonne: 'Net' → 'Net à payer'
- Tri et affichage corrigés
2025-10-23 20:24:42 +02:00
2d49024088 fix: Récupérer code_employeur depuis organization_details
- Retrait de code_employeur du select organizations (colonne inexistante)
- Ajout requête organization_details pour récupérer code_employeur
- Correction erreur SQL 'column organizations_2.code_employeur does not exist'
2025-10-23 20:09:59 +02:00
44976a401a fix: Accepter event_type form.completed de DocuSeal
- Ajout de form.completed en plus de submission.completed
- DocuSeal envoie form.completed pour les avenants
2025-10-23 20:05:19 +02:00
2520a73602 feat: Migration Lambda avenant completion vers Next.js API
- Créé route /api/webhooks/docuseal-amendment-completed
- Ajouté templates emails amendment-completed-employer et amendment-completed-employee
- Intégration système emails universel v2 (Handlebars)
- Logging dans Supabase email_logs (plus d'Airtable)
- Types ajoutés à EmailTypeV2 et EmailType
- Documentation complète dans LAMBDA_MIGRATION_AVENANT_COMPLETION.md
- Script SQL migration dans MIGRATION_SQL_EMAIL_TYPES.md

Migration complète AWS Lambda → Next.js cdg1 (RGPD compliant)
2025-10-23 19:39:38 +02:00
4292041f40 fix: webhook avenant - corriger nom du champ date (start_date) 2025-10-23 18:59:10 +02:00
584af5450d fix: webhook avenant - utiliser données Supabase + logs emails
- Webhook avenant: utiliser les données du contrat depuis Supabase quand Lambda envoie 'Non spécifié'
- Ajout des types d'emails manquants dans EmailType (signature-request-employee-amendment, etc.)
- Les emails d'avenant seront maintenant loggés correctement dans email_logs

Note: Exécuter dans Supabase SQL:
ALTER TYPE email_type ADD VALUE IF NOT EXISTS 'signature-request-employee-amendment';
ALTER TYPE email_type ADD VALUE IF NOT EXISTS 'signature-request-salarie';
ALTER TYPE email_type ADD VALUE IF NOT EXISTS 'contribution-notification';
ALTER TYPE email_type ADD VALUE IF NOT EXISTS 'support-reply';
ALTER TYPE email_type ADD VALUE IF NOT EXISTS 'support-ticket-created';
ALTER TYPE email_type ADD VALUE IF NOT EXISTS 'support-ticket-reply';
ALTER TYPE email_type ADD VALUE IF NOT EXISTS 'contact-support';
2025-10-23 18:56:29 +02:00
d396d323c1 fix: webhook avenant - recherche par submissionId au lieu de numero
Le webhook avenant échouait avec 'multiple rows returned' car plusieurs avenants
pouvaient avoir le même numero_avenant (tests). Utilisation du docuseal_submission_id
unique pour identifier l'avenant correctement.
2025-10-23 18:37:02 +02:00
e1d89ab765 feat: RGPD 100% + UX improvements staff contrats
- Audit RGPD: confirmation PDFMonkey (100% services conformes EU)
- Staff contrats: reset tous filtres lors filtres rapides (recherche, org, type)
- Staff contrats: ajout colonne Production (production_name)
- Signature salarie: message info scroll pour signature
2025-10-23 18:24:41 +02:00
8cb366ee53 chore: RGPD compliance audit & cleanup + UX signature salarie
- Audit RGPD complet: création RGPD_AUDIT_LOCALISATION_DONNEES.md
- Suppression complète intégration n8n (API route, hooks, env vars)
- Suppression variables Airtable (env vars)
- Confirmation GoCardless: serveurs EEE + SCC
- 8/9 services confirmés UE (89% compliance)
- Ajout message info dans modale signature salarie (scroll down)
2025-10-23 17:32:56 +02:00
d992e339d7 fix: Email avenant employeur redirige vers /signatures-electroniques 2025-10-23 16:11:53 +02:00
9e96008c1f docs: Documentation page signature-salarie unifiée 2025-10-23 16:08:34 +02:00
58e8fa4584 feat: Page signature-salarie adaptée pour contrats et avenants
- check-status: cherche dans cddu_contracts ET avenants
- verify-birthdate: cherche dans les deux tables
- Retourne documentType ('contrat' ou 'avenant')
- UI adaptée: AlreadySignedCard et ToSignCard affichent le type
- Titre dynamique: 'Contrat' ou 'Avenant' selon le document
- Textes adaptés: 'Voir et signer votre avenant/contrat'
2025-10-23 15:59:45 +02:00