- Créé sendInvitationWithActivationEmail() pour unifier les invitations
- Modifié /api/staff/users/invite pour utiliser generateLink + email
- Modifié /api/access/nouveau pour envoyer email d'activation
- Modifié /api/access POST pour remplacer pending_invites par système direct
- Template account-activation mis à jour :
* Titre 'Activez votre compte'
* Encart avec infos : invitant (statut), organisation, niveau d'accès
* Message de contact formaté comme autres emails
* Renommage 'Odentas Paie' → 'Espace Paie Odentas'
- Fix page /activate : délai 100ms pour hash fragment + redirection 1s
- Liens d'activation forcés vers paie.odentas.fr (tests depuis localhost)
- Messages UI cohérents : 'Invitation envoyée' au lieu de 'Compte créé'
- Réorganiser la logique de sécurité pour distinguer staff/client
- Staff: accepter employer_id fourni et vérifier existence de l'org
- Client: utiliser l'org associée et bloquer toute tentative cross-org
- Améliorer les logs pour identifier le type d'utilisateur
- Corriger le retour no_organization inapproprié pour les staff
- Ajout checkbox dans modal de modification cotisation
- Création entrée dans contribution_notifications si marquée
- Invalidation cache notifications après update
- Support flag mark_as_notified dans API PATCH
- Message plus personnalisé pour factures studio en virement
- Mention 'hébergement' pour renouvellement
- Ajout contact WhatsApp avec lien cliquable (07 80 978 000)
- Formulation plus chaleureuse et professionnelle
- Factures studio en virement: message avec RIB (comme paie)
- Factures studio en SEPA: message avec date prélèvement
- Message complet au lieu de juste le nom du site
- Cohérence avec les factures paie
- Route /notify utilisait ctaUrl hardcodé vers /signin
- Appliquer même logique que /launch: lien téléchargement pour studio
- Ajouter siteName dans les données d'email
- Amélioration: factures paie pointent vers /facturation au lieu de /signin
- Créer route publique /api/public/invoices/[id]/download pour générer liens S3 à la volée
- Supprimer code employeur de l'infoCard pour factures studio
- Adapter texte bouton CTA (Télécharger vs Voir la facture)
- Rediriger vers page de téléchargement au lieu de l'Espace Paie pour clients studio
- Lien pré-signé S3 valable 15 minutes (suffisant pour téléchargement)
- Ajout endpoint API /api/signatures-electroniques/pending-count (COUNT() Supabase)
- Ajout hook usePendingSignatures avec polling 30s et pause en background
- Badge rouge animé dans Sidebar pour signatures employeur en attente
- Optimisé pour ne pas surcharger Supabase (cache 30s, refetch au focus)
- Désactivé en mode démo et pour staff
- Ajout bouton Edit dans les actions de chaque ligne
- Nouvelle modale EditPeriodModal pour éditer période, échéance et statut
- Nouvel endpoint API /api/staff/cotisations/bulk-update pour mise à jour groupée
- Les modifications s'appliquent à toutes les caisses d'une période en une fois
- Ajoute import cleanEnv dans les routes GoCardless
- Remplace process.env par cleanEnv() pour GOCARDLESS_ACCESS_TOKEN et GOCARDLESS_ENVIRONMENT
- Corrige le bug des tokens cassés sur plusieurs lignes dans Vercel
- Routes corrigées: gocardless, launch, bulk-gocardless
- Créer le composant BulkNotifyModal avec aperçu détaillé
- Afficher les statistiques (avec/sans cotisations, déjà notifiées, emails manquants)
- Grouper les périodes par organisation
- Afficher les destinataires des emails pour chaque organisation
- Indiquer les organisations sans email configuré
- Afficher un aperçu du contenu de l'email
- Gérer les re-notifications avec badge
- Envoyer les notifications en parallèle avec gestion d'erreurs
- Afficher un résumé des succès/erreurs après envoi
- Désélectionner automatiquement les périodes après notification
- Ajouter un filtre par mois dans les filtres avancés
- Détecter automatiquement les mois disponibles dans les périodes
- Supporter les noms de mois complets et abrégés (Janvier/Jan, Février/Fév, etc.)
- Sauvegarder le filtre mensuel dans localStorage
- Passer la grille de filtres à 4 colonnes pour inclure le nouveau filtre
- Mettre à jour le compteur de résultats filtrés
- Afficher le code employeur au lieu du nom complet de l'organisation
- Réduire la taille de police du tableau (text-xs au lieu de text-sm)
- Réduire les paddings des cellules (px-2 py-2 au lieu de px-3 py-3)
- Ajouter whitespace-nowrap sur les badges de statut pour tenir sur une ligne
- Réduire la taille de la ligne 'Payé' (text-[10px])
- Ajouter title sur la colonne organisation pour voir le nom complet au survol
- Modifier l'API /api/staff/organizations pour inclure le code_employeur
- Mettre à jour les types Organization et PeriodRow
- Créer le composant CotisationsGrid.tsx moderne
- Ajouter tri par colonnes (organisation, période, échéance, statut, total)
- Ajouter filtres avancés (organisation, statut, année)
- Ajouter sélection multiple avec checkboxes
- Ajouter actions groupées (notification, suppression)
- Ajouter indicateurs visuels pour les statuts
- Ajouter badge de notification avec date
- Ajouter persistance des filtres dans localStorage
- Ajouter subscription realtime pour les mises à jour
- Améliorer l'UX avec hover effects et transitions
- Rendre cohérent avec les autres grilles (PayslipsGrid, ContractsGrid, etc.)
- Utilisation de email_signature au lieu de email_notifs
- Suppression du CC pour les notifications de signature électronique
- Cohérence avec le système de signature (email distinct des autres notifs)
- Ajout de l'affichage de l'email de l'employeur dans le modal de confirmation e-signature
- Récupération de l'email_signature depuis organization_details
- Clarification que cet email est utilisé pour les notifications de signature
- Correction du bucket S3 de 'odentas-documents' à 'odentas-docs' dans upload-signed-pdf
- Ajout du drag & drop dans UploadSignedPdfModal pour faciliter l'upload
- Validation du fichier centralisée pour éviter la duplication de code
- Nouvelle route /staff/avenants/[id]/modifier
- Composant ModifierAvenantPageClient qui pré-remplit les données
- API PATCH /api/staff/amendments/[id] pour mise à jour
- Restriction: seuls les avenants 'draft' sont modifiables
- Bouton 'Modifier' fonctionnel sur page détail avenant
- Pré-remplissage des formulaires avec données existantes
- Régénération PDF possible après modification
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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)
- 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.
- 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
- 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