Commit graph

394 commits

Author SHA1 Message Date
1d9145a0b2 feat: Ajouter upload manuel de PDF signé pour avenants
- Nouvelle modale UploadSignedPdfModal avec drag & drop
- API route /api/staff/amendments/[id]/upload-signed-pdf
- Upload vers S3 avec pattern avenants/{ref}_avenant_signed_{timestamp}.pdf
- Mise à jour automatique statut → 'signed' et signature_status → 'signed'
- Validation du fichier (PDF uniquement, max 10MB)
- Bouton 'Ajouter PDF signé' sur page détail avenant
2025-11-05 19:48:47 +01:00
26132f38ce feat: Ajouter script migration PDF avenants Airtable → S3
- Téléchargement des PDF depuis URLs Airtable
- Upload vers S3 avec pattern avenants/{reference}_avenant_{timestamp}.pdf
- Mise à jour de pdf_s3_key et pdf_url dans Supabase
- 91 PDF migrés avec succès
2025-11-05 19:32:25 +01:00
69cb2c5a0a fix: Ajouter champs manquants au type Amendment
- employee_matricule
- production_name
- numero_avenant
- date_avenant
- type_avenant
- motif_avenant

Corrige l'erreur de build Vercel.
2025-11-05 18:32:49 +01:00
da17ca6ef2 feat: Amélioration de la page staff/avenants avec pagination et filtres
- Ajout de filtres sophistiqués : organisation, statut, type, signature, élément, dates
- Tri par colonne : date d'effet, date d'avenant, n° avenant, n° contrat
- Pagination avec 25/50/100 éléments par page
- Ordre par défaut : date d'effet décroissant (plus récent en premier)
- Compteur de filtres actifs avec bouton de réinitialisation
- Affichage du matricule salarié, n° avenant et type d'avenant dans le tableau
- Recherche étendue : inclut matricule, production et n° avenant
- Interface cohérente avec les pages staff/contrats et staff/payslips
2025-11-05 18:28:40 +01:00
480d9fb243 fix: Corriger le tri des notes pour considérer source_created_at et created_at 2025-11-05 18:04:45 +01:00
e8db8960fb fix: Corriger création contrats RG avec type_de_contrat et type_d_embauche appropriés
- API rg-contracts passe maintenant type_de_contrat et type_d_embauche='Régime général'
- API cddu-contracts utilise les valeurs du body au lieu de forcer les valeurs CDDU
- Texte du formulaire adapté selon le régime (CDDU vs RG)
- Désactivation du remplissage automatique des dates en mode RG
- Rétablissement du filtre en_cours pour inclure contrats futurs
2025-11-05 17:45:57 +01:00
bde4e0351a fix: Corriger filtrage contrats en_cours pour exclure ceux non commencés 2025-11-05 17:35:28 +01:00
b97a079822 feat: Ajouter champ cachets pour metteurs en scène
- Ajout d'un champ 'Nombre de représentations' pour les metteurs en scène dans les formulaires de contrat (création et édition)
- Les metteurs en scène peuvent maintenant avoir à la fois des heures de travail ET des cachets de représentation
- Mise à jour de la logique de sauvegarde pour préserver les représentations des metteurs en scène même en mode heures
- Les données sont correctement envoyées à PDFMonkey via le champ cachets.representations
- Interface utilisateur ajoutée dans NouveauCDDUForm et ContractEditor
2025-11-05 11:02:32 +01:00
5b6d9bf9c7 feat: Ajout mockup hub salarié avec gestion congés/RTT pour régime général 2025-11-03 22:56:13 +01:00
bea8700104 feat: Amélioration système d'avenants et emails de relance
- Email employeur: ajout code_employeur, correction structure détails document
- Email salarié: ajout matricule, type contrat, profession, date début
- Séparation PDF préliminaire/signé (signed_pdf_s3_key) pour éviter timing issues
- Correction UI: grammaire et libellés conditionnels (avenant/contrat)
- Standardisation source notes: 'Client' au lieu de 'Espace Paie'
- Ajout note automatique pour paniers repas avec détails
- Calcul automatique total heures depuis modale jours de travail
- Migration SQL: ajout colonne signed_pdf_s3_key + migration données existantes
2025-11-03 19:19:57 +01:00
2cd19df69f feat: Ajouter système de relance pour les avenants dans staff/avenants
- Créer API route pour relance employeur: /api/staff/avenants/[id]/remind-employer
- Créer API route pour relance salarié: /api/staff/avenants/relance-salarie
- Ajouter modales de relance intelligente (SmartReminderAvenantModal)
- Ajouter modales de relance individuelle (EmployeeReminderAvenantModal)
- Ajouter modale de relance en masse (BulkEmployeeReminderAvenantModal)
- Intégrer système de sélection multiple dans la page avenants
- Ajouter détection automatique des actions (employeur/salarié) selon signature_status
- Implémenter cooldown de 24h pour éviter les relances trop fréquentes
- Option forcer renvoi pour contourner le cooldown si nécessaire
- Mise à jour timestamps last_employer/employee_notification_at dans la DB
- Utilisation du système d'email universel (EmailConfigV2)
- Support du mode démo (envois bloqués)
- Interface utilisateur cohérente avec le système contrats existant
2025-11-03 18:21:13 +01:00
f597042b96 feat: Merge feat/direct-docuseal-webhook-contracts - Virements, facturation, signatures et emails
- Ajout sous-header total net à payer sur page virements-salaires
- Migration transfer_done_at pour tracking précis des virements
- Nouvelle page saisie tableau pour création factures en masse
- APIs bulk pour mise à jour dates signature et jours technicien
- API demande mandat SEPA avec email template
- Webhook DocuSeal pour signature contrats (mode TEST)
- Composants modaux détails et vérification PDF fiches de paie
- Upload/suppression/remplacement PDFs dans PayslipsGrid
- Amélioration affichage colonnes et filtres grilles contrats/paies
- Template email mandat SEPA avec sous-texte CTA
- APIs bulk facturation (création, update statut/date paiement)
- API clients sans facture pour période donnée
- Export SEPA des virements salaires
- Corrections calculs dates et montants avec auto-remplissage

Conflit résolu : conservation version main pour récupération nom client (fallback gracieux)
2025-11-03 16:34:44 +01:00
b844a89844 fix: Récupérer org_id via référence contrat si organization_id manquant 2025-11-03 15:30:02 +01:00
4aa817400b fix: Récupérer le nom du client depuis Supabase pour email signature-request-salarie 2025-11-03 15:25:03 +01:00
5502926271 fix: Récupérer le nom du client depuis Supabase pour email signature-request-salarie 2025-11-03 15:23:25 +01:00
265ed6ce67 chore: Désactivation temporaire export SEPA + amélioration validation
- Désactivation du bouton export SEPA avec tooltip 'Bientôt disponible'
- Suppression de la card informative SEPA (en attente tests élargis)
- Amélioration validation IBAN : ajout checksum modulo 97
- Ajout fichier d'audit complet SEPA_EXPORT_AUDIT.md

Raison : Système fonctionnel (testé avec succès sur Qonto) mais
nécessite tests avec autres banques avant activation production.

Le bouton 'Marquer comme payé' reste actif et fonctionnel.
2025-11-03 00:14:10 +01:00
91e0919274 feat: Ajout export SEPA et marquage groupé des virements salaires
- Ajout export fichier SEPA XML (norme ISO 20022 pain.001.001.03)
  * Sélection multiple via checkboxes
  * Génération XML pour virements bancaires groupés
  * Validation IBAN et gestion des salariés sans RIB
  * Modal de succès/avertissements
  * Référence: Nom organisation - Période

- Ajout marquage groupé des paies comme payées
  * Sélection multiple des paies
  * Modal de confirmation
  * Actualisation automatique sans refresh

- Nouvelle route API /api/virements-salaires/[id] (PATCH)
  * Mise à jour transfer_done et transfer_done_at

- Amélioration UX
  * Card informative pour clients non-Odentas
  * Modal informatif dans 'En savoir plus'
  * Messages clairs et cohérents
2025-11-03 00:08:21 +01:00
897af4b23a feat: Ajout fonctionnalités virements, facturation, signatures et emails
- Ajout sous-header total net à payer sur page virements-salaires
- Migration transfer_done_at pour tracking précis des virements
- Nouvelle page saisie tableau pour création factures en masse
- APIs bulk pour mise à jour dates signature et jours technicien
- API demande mandat SEPA avec email template
- Webhook DocuSeal pour signature contrats (mode TEST)
- Composants modaux détails et vérification PDF fiches de paie
- Upload/suppression/remplacement PDFs dans PayslipsGrid
- Amélioration affichage colonnes et filtres grilles contrats/paies
- Template email mandat SEPA avec sous-texte CTA
- APIs bulk facturation (création, update statut/date paiement)
- API clients sans facture pour période donnée
- Corrections calculs dates et montants avec auto-remplissage
2025-11-02 23:26:19 +01:00
46633ecd74 chore: Masquer temporairement le bouton Parrainage dans la sidebar 2025-10-31 23:35:07 +01:00
6170365fc0 feat: Ajout programme de parrainage, bannières promo, déduplication webhooks et avenants signés
- Programme de parrainage (referrals):
  * Page /parrainage pour clients et staff
  * API /api/referrals (GET, POST)
  * Table referrals avec tracking complet
  * Email template avec design orange/gradient
  * Réductions: 30€ HT parrain, 20€ HT filleul

- Bannières promotionnelles (promo_banners):
  * Page staff /staff/offres-promo pour gérer les bannières
  * API /api/promo-banners (CRUD complet)
  * Composant PromoBanner affiché en haut de l'espace
  * Compte à rebours optionnel
  * Customisation couleurs (gradient, texte, CTA)

- Déduplication des webhooks DocuSeal:
  * Table webhook_events pour tracker les webhooks traités
  * Helper checkAndMarkWebhookProcessed()
  * Intégré dans docuseal-amendment et docuseal-amendment-completed
  * Prévient les doublons d'emails

- Avenants signés:
  * API GET /api/contrats/[id]/avenants
  * Affichage des avenants signés dans DocumentsCard
  * Génération d'URLs presignées S3

- Brouillons d'emails groupés:
  * Table bulk_email_drafts pour sauvegarder les brouillons
  * Template HTML bulk-email-template.html

- Améliorations ContractsGrid:
  * Ajout filtre par production (dépendant de la structure)
  * Tri par production

- Templates emails:
  * referral-template.html (parrainage)
  * bulk-email-template.html (emails groupés staff)
2025-10-31 23:31:53 +01:00
d326730cfb fix: Améliorer webhook signature avenant - téléchargement PDF signé + filtres
- Ajout filtres: vérifier template AVENANT + rôle Salarié
- Téléchargement du PDF signé depuis DocuSeal
- Upload du PDF sur S3 (bucket odentas-docs/avenants/)
- Mise à jour signature_status et statut à 'signed'
- Mise à jour pdf_s3_key avec le chemin S3
- Suppression code dupliqué
- Correction bucket S3 (odentas-docs au lieu de odentas-signatures)
2025-10-31 23:20:12 +01:00
73e914a303 feat: Système de statuts enrichi avec descriptions markdown et refonte navigation
- Header: Ajout 3ème ligne de statut (Caisses & orga.) avec descriptions détaillées
- Tooltips: Affichage riche avec titre, voyant coloré et contenu markdown formaté
- Éditeur markdown: Nouveau composant RichTextEditor avec toolbar (gras, italique, liens, listes)
- Modal staff: StatusEditModal étendu avec onglets et éditeur de descriptions
- Migration: Ajout colonnes status_*_description dans maintenance_status
- API: Routes GET/PUT enrichies pour gérer les 9 champs de statut
- Navigation: Redirection /compte/securite → /securite (nouvelle page centralisée)
- Breadcrumb: Support contrats RG/CDDU multi + labels dynamiques salariés
- UX Documents: Bouton 'Nouvel onglet / Télécharger' au lieu de téléchargement forcé
- Contrats staff: Pagination paies (6/page) pour RG et CDDU multi-mois avec vue compacte
- PayslipCard: Bouton cliquable 'Ouvrir le PDF' pour accès direct aux bulletins
2025-10-31 19:42:25 +01:00
6485db4a75 feat(naa): Amélioration UX modal EditNAA - replier/déplier
- Tous les clients repliés par défaut à l'ouverture du modal
- Boutons 'Tout replier' / 'Tout déplier' pour gérer tous les clients
- Section factures repliable avec bouton Afficher/Masquer
- Affichage résumé facture sélectionnée quand section repliée
- Nouveau client déplié automatiquement pour faciliter la saisie
- Améliore la lisibilité pour NAA avec nombreux clients
2025-10-31 15:28:44 +01:00
35d5283434 feat: Améliorations du breadcrumb
- Labels CCN collés : CCNEAC, CCNPA, CCNSVP (au lieu de CCN EAC, etc.)
- Labels dynamiques : récupération automatique des noms de salariés, factures et tickets
- Badge Staff : icône Shield sur les routes /staff/* (visible sur liens et dernier segment)
- Hook useDynamicLabel pour charger les données en temps réel
- Amélioration de l'accessibilité avec aria-label
2025-10-31 14:57:51 +01:00
0f6687a88c feat: Ajout du breadcrumb de navigation contextuel
- Création du composant Breadcrumb.tsx avec mapping des routes
- Intégration dans le layout principal sous le Header
- Support des routes dynamiques (IDs, matricules)
- Responsive avec icône Home sur mobile
- Compatible mode démo et mode staff
2025-10-31 13:24:38 +01:00
35414e59ee fix: Permettre l'ouverture des bulletins PDF uploadés via bulk sur page staff/contrats/[id] 2025-10-31 13:07:14 +01:00
09424ca05f feat: Réorganisation colonnes T/V/A avec icônes de coche sur page staff/payslips 2025-10-31 12:52:43 +01:00
cb1ac0d52b fix: Le bouton X du popup info confidentialité enregistre maintenant la lecture 2025-10-31 11:45:48 +01:00
5de78cfcce fix: Remplacer modale DocuSeal par affichage in-page avec header fixed
- Suppression de DocuSealSignatureModal pour éviter problèmes de compatibilité
- Header fixed toujours visible avec instructions de signature
- Affichage du formulaire DocuSeal directement dans la page
- Iframe DocuSeal avec hauteur optimisée (70vh/500px min)
- Bouton de signature DocuSeal reste flottant en bas de fenêtre
- Amélioration UX et compatibilité tous navigateurs
2025-10-31 11:16:10 +01:00
31459f3c10 feat: Ajout fonctionnalité salaires par date avec JSONB
 Nouvelle fonctionnalité
- Ajout mode 'Saisir le salaire par date' dans création de contrat
- Interface de saisie compacte et moderne par représentation/répétition/jour
- Stockage en JSONB dans colonne salaires_par_date
- Affichage détaillé dans contrats/[id] et staff/contrats/[id]

🗄️ Base de données
- Migration SQL : ajout colonne salaires_par_date JSONB
- Index GIN pour requêtes performantes sur JSONB
- Index partial sur le champ mode
- Fonction de validation validate_salaires_par_date()

🎨 Interface utilisateur
- Design en ligne (inline) au lieu de tableau traditionnel
- Labels courts (R1, R2 pour représentations, S1, S2 pour services)
- Cartes par catégorie avec codes couleur (indigo/purple/green)
- Calculatrice et Minima accessibles dans les deux modes
- Calculatrice désactivée en mode par_date (pas de champ unique)
- Minimum conventionnel retiré du menu déroulant en mode par_date
- Calcul automatique du total

💻 Code
- Types TypeScript : SalaireParDate avec interfaces complètes
- Fonction convertSalariesByDateToJSON() pour conversion formulaire → JSONB
- Validation adaptée selon le mode (global vs par_date)
- API /api/cddu-contracts : support du champ salaires_par_date
- API /api/contrats/[id] : retour du champ salaires_par_date
- Contournement temporaire de la RPC pour utiliser service_role

📝 Fichiers modifiés
- migrations/add_salaires_par_date_column.sql (nouveau)
- types/salaires.ts (nouveau)
- components/contrats/NouveauCDDUForm.tsx
- app/api/cddu-contracts/route.ts
- app/api/contrats/[id]/route.ts
- app/(app)/contrats/[id]/page.tsx
- components/staff/contracts/ContractEditor.tsx
2025-10-29 23:12:15 +01:00
e6c7dc45cc feat: améliorations UX formulaire contrats et notification paiement salaires
- Ajout bouton calculatrice avec gradient bleu-indigo
- Ajout bouton Minima avec gradient émeraude-teal et lien vers /minima-ccn
- Correction focus trap : autoriser liens target=_blank
- Ajout champs conditionnels panier repas (nombre, CCN, montant personnalisé)
- DatePickerCalendar : initialisation sur date de début contrat si pas de dates sélectionnées
- DatesQuantityModal : option 'Ne pas appliquer...' pour tous types (repré/répét/heures)
- DatesQuantityModal : adaptation texte selon type (représentations/répétitions/heures)
- DatesQuantityModal : champ 'Appliquer à toutes les dates' pour saisie rapide
- DatesQuantityModal : reset quantités quand option 'Ne pas appliquer' cochée
- DatesQuantityModal : aperçu sans détails quand option cochée
- Intégration durée répétitions dans formatage dates (3h ou 4h, avec 'chacun' si >1)
- Notification paiement salaires : nouvel email 'salary-transfer-payment-confirmation'
- Notification paiement salaires : API route /api/staff/virements-salaires/[id]/notify-payment-sent
- Notification paiement salaires : modal NotifyPaymentSentModal avec détails paiement
- Notification paiement salaires : tracking avec payment_notification_sent/sent_at
- Notification paiement salaires : affichage statut dans modal virements
- Template email : support detailsCardDisclaimer pour mentions légales
2025-10-29 21:35:10 +01:00
2545930be4 fix(informations): use organizations.name for raison_sociale and fallback when missing 2025-10-29 20:12:46 +01:00
691eb719c2 Merge feature/odentas-sign: Intégration complète système Odentas Sign 2025-10-29 19:58:23 +01:00
daf2f0b839 feat: Consolidation système Odentas Sign + améliorations interface staff 2025-10-29 17:55:24 +01:00
d5a110484b feat: Système de vérification de signature électronique avec QR code
- Page publique /verify/[id] affichant Odentas Seal, TSA, certificat
- API /api/signatures/create-verification pour créer preuves
- Générateur PDF de preuve avec QR code (jsPDF)
- Hook useSignatureProof() pour intégration facile
- Table Supabase signature_verifications avec RLS public
- Page de test /test-signature-verification
- Documentation complète du système

Les signataires peuvent scanner le QR code ou visiter l'URL pour vérifier l'authenticité et l'intégrité de leur document signé.
2025-10-29 09:22:01 +01:00
c3d7fc5618 feat(odentas-sign): Configuration Lambda URLs + Certificat Odentas Media SAS + Gestion erreurs
 Nouvelles fonctionnalités :
- Configuration des URLs Lambda PAdES et TSA dans .env
- Certificats Odentas Media SAS (CN=Odentas Seal, O=Odentas Media SAS)
- Ajout champs /Name, /Reason, /Location dans signature PDF
- Documentation complète des URLs Lambda (ODENTAS_SIGN_LAMBDA_URLS.md)

🔧 Améliorations :
- Gestion stricte des erreurs dans webhook completion
- Ne marque plus 'completed' si scellage échoue
- Vérification des variables LAMBDA_PADES_URL et LAMBDA_TSA_URL
- Build Docker multi-arch (ARM64 → AMD64) avec --platform

🔐 Certificats :
- CA Root: CN=Odentas Media SAS Root CA, O=Odentas Media SAS
- Certificat signature: CN=Odentas Seal, O=Odentas Media SAS, OU=Signature Electronique
- Chaîne complète uploadée sur S3 (s3://odentas-sign/certs/chain.pem)

 Tests :
- Lambda PAdES testée et fonctionnelle
- Lambda TSA testée et fonctionnelle
- Affichage 'Odentas Media SAS' dans Adobe Reader confirmé

⚠️ Niveau eIDAS actuel : SES (Signature Électronique Simple)
TODO: Améliorer conformité PAdES pour niveau AES (voir TODO_PADES_CONFORMITE.md)
2025-10-28 19:32:29 +01:00
b0fa989d4a fix: Corriger filtres contrats staff et afficher CDI en cours
- Ajouter useEffect pour charger filtres sauvegardés au démarrage dans ContractsGrid
- Compléter réinitialisation des filtres (signatureFilter, endFrom, endTo)
- Afficher 'CDI en cours' en italique pour date de fin 01/01/2099 dans virements-salaires
2025-10-28 16:39:05 +01:00
b73ca06cf7 fix: Corriger recherche métiers CCNSVP clauses communes et remplacer emojis par icônes Lucide 2025-10-28 16:07:54 +01:00
7334b028c5 feat: Système de notification email pour déclaration de productions
- Ajout type 'production-declared' dans système email universel V2
- Template email avec infoCard et detailsCard
- Endpoint API /api/staff/productions/[id]/notify
- Bouton notification dans page staff/gestion-productions
- Modal de confirmation d'envoi
- Emails depuis organization_details (email_notifs, email_notifs_cc)
- Gestionnaire en dur: Renaud BREVIERE-ABRAHAM
2025-10-28 15:14:25 +01:00
fcaea3de74 feat: Ajout modal de création en masse de paies
- Création du composant BulkPayslipModal avec tous les champs du PayslipModal
- Distinction entre Net avant PAS et Net à payer
- Zone de valeurs communes pour pré-remplir plusieurs contrats
- Ajout du bouton 'Ajout de paie' dans le menu Actions contrat
- Création de l'endpoint API /api/staff/payslips/bulk-create
- Validation et gestion d'erreurs par contrat
2025-10-28 14:56:44 +01:00
c55ead58ca feat: Ajout modal création en masse de paies avec champs exacts du PayslipModal 2025-10-28 14:49:40 +01:00
2aeac651c1 feat: Ajout modal création en masse de paies avec tous les champs corrects 2025-10-28 14:48:04 +01:00
626f4fa95a fix(critical): Résoudre Access Denied sur PDFs d'appel à virement - retourner URL S3 directe + Google Docs Viewer 2025-10-28 13:46:08 +01:00
eb3133866e fix(critical): Résoudre Access Denied sur PDFs d'appel à virement - retourner URL S3 directe + Google Docs Viewer 2025-10-28 13:45:46 +01:00
2c63a7bd81 feat: Afficher les PDFs d'appel à virement dans un modal au lieu d'une nouvelle fenêtre 2025-10-28 13:41:22 +01:00
e958f6f2fd feat: Afficher les PDFs d'appel à virement dans un modal au lieu d'une nouvelle fenêtre 2025-10-28 13:41:05 +01:00
e3bcfacae1 fix: Améliorer la gestion d'accès aux PDFs d'appel à virement avec service role et logs détaillés 2025-10-28 13:29:07 +01:00
2b878d069e fix: Améliorer la gestion d'accès aux PDFs d'appel à virement avec service role et logs détaillés 2025-10-28 13:28:52 +01:00
59749d481b feat: Migration Cloudinary vers Poppler pour conversion PDF→JPEG
- Remplacer Cloudinary (US) par solution 100% AWS eu-west-3
- Lambda odentas-sign-pdf-converter avec pdftoppm
- Lambda Layer poppler-utils v5 avec dépendances complètes
- Trigger S3 ObjectCreated pour conversion automatique
- Support multi-pages validé (PDF 3 pages)
- Stockage images dans S3 odentas-docs
- PDFImageViewer pour affichage images converties
- Conformité RGPD garantie (données EU uniquement)
2025-10-28 10:22:45 +01:00
40ab28fdc7 feat: Activation du workflow complet PAdES + TSA
- Retrait du bypass mode test dans le webhook completion
- Appel des Lambdas pades-sign et tsaStamp pour toutes les demandes
- Workflow complet: signature → PAdES seal → TSA timestamp → archive
- Graceful degradation si Lambdas non disponibles (local)
- Evidence bundle mis à jour avec hash PDF et TSA metadata
- Script de test automatique test-complete-signature-flow.sh
- Documentation complète TEST_PADES_TSA.md
2025-10-27 19:35:04 +01:00