Commit Graph

  • b7525ab51e Merge remote-tracking branch 'prod/main' main Manus 2026-08-22 10:33:05 +00:00
  • d729a94a96 Checkpoint: Correction robuste des doublons de factures : empreinte SHA-256 unique des PDF sources, détection globale avant import manuel/email/dossier/web, verrou contre les vérifications IMAP concurrentes, attente réelle de fin de traitement avant marquage lu, migration et tests de non-régression. Manus 2026-08-22 10:31:54 +00:00
  • 89c65ca979 chore: versionner le manifeste de déploiement Manus 2026-08-18 09:40:27 +02:00
  • d8b2a8fe6f Checkpoint: Correction complémentaire : normalisation stricte des valeurs OAuth de loginMethod avant insertion DB, afin d’éviter les erreurs de troncature causées par les identifiants de plateforme externes. Ajout de tests associés et validation build complète. Manus 2026-08-17 20:25:16 +00:00
  • 54164b1b33 Checkpoint: Audit technique : suppression des composants, scripts et dépendances inutilisés ; chargement différé des pages ; génération de sauvegardes SQL robuste par lots ; centralisation des contrôles d’accès ; sécurisation des cookies Azure et imports web ; documentation de maintenance et 5 tests de non-régression ajoutés. Manus 2026-08-17 20:21:58 +00:00
  • 6b83361056 Checkpoint: mysqldump n'est pas disponible dans le container Node.js. Remplacement par un dump SQL généré directement via mysql2 : SHOW CREATE TABLE + SELECT * pour chaque table, avec échappement correct des valeurs. Manus 2026-08-08 10:52:58 +00:00
  • d3426c1663 Checkpoint: Correction de l'erreur "non authentifié" sur /api/db-backup : utilisation de parseCookies(req.headers.cookie) au lieu de req.cookies (qui nécessitait cookie-parser non installé). Manus 2026-08-08 10:41:01 +00:00
  • 4ce2d2877a Checkpoint: Ajout onglet Sauvegarde DB dans ImportSettings : endpoint POST /api/db-backup (mysqldump), GET /api/db-backup/:filename, procédures tRPC backup.list et backup.delete, composant BackupSection avec liste des sauvegardes et téléchargement. Manus 2026-08-08 10:04:57 +00:00
  • 711ce6b83a Checkpoint: Ajout du système de connecteurs web : table webImportSources, CRUD tRPC, page WebImportSources.tsx, endpoint /api/web-import/push-invoice, script cron SFR (scripts/web-import/sfr-connector.mjs) Manus 2026-07-30 13:53:07 +00:00
  • bcb307bde1 Checkpoint: Tous les boutons d'action (Excel, ZIP, Valider tout BAP, Importer, Supprimer, Dévalider BAP, Relancer) et la recherche sont maintenant sur une seule ligne dans le cartouche vert pastel, avec les filtres période et statut en dessous. Manus 2026-07-30 12:48:20 +00:00
  • 295ba29329 Checkpoint: Zone de filtres Factures BAP refactorisée en 3 lignes dans un cartouche vert émeraude pastel : ligne 1 (recherche), ligne 2 (filtres période année/mois), ligne 3 (boutons statut + tri aligné à droite). Manus 2026-07-30 12:37:32 +00:00
  • ac0594f5db Checkpoint: Zone de filtres Factures refactorisée en 3 lignes dans un cartouche bleu pastel : ligne 1 (recherche + compact/détail), ligne 2 (destinataire, abonnement, entité, ventilation comptable), ligne 3 (boutons statut export + tri par date). Manus 2026-07-30 12:24:15 +00:00
  • 5d18dfa468 Checkpoint: Ajout de la table deletedInvoices (blacklist) : quand une facture est supprimée, son numéro est enregistré et l'import email/fichier ne la réimporte plus. Manus 2026-07-30 09:48:00 +00:00
  • aebc607e8a Checkpoint: Ajout de deux nouveaux filtres sur la page Factures : Abonnement (OUI/NON basé sur isSubscription) et Entité (SANTINOVA/ITINOVA basé sur ventilationComptable === 'SANTINOVA'). Filtrage côté client, aucune modification backend nécessaire. Manus 2026-07-30 08:15:56 +00:00
  • 827c9ec41e Checkpoint: Ajout de Google Gemini (gemini-2.0-flash) comme 3ème moteur IA : schéma DB mis à jour (enum aiProvider + colonne geminiApiKey dans userSettings et importSettings), llm.ts mis à jour avec routing vers l'API Google AI Studio (compatible OpenAI), fenêtre de configuration IA mise à jour avec 3 cartes (Mistral / Gemini / Manus) et champ clé API Gemini. Manus 2026-07-27 15:55:07 +00:00
  • 46a61fca0e Checkpoint: Ventilations, automatismes, services et signatures sont maintenant globaux (sans filtre userId). Doublons supprimés en production. Manus 2026-07-13 10:21:46 -04:00
  • 1951b9b9d1 Checkpoint: Les admins voient désormais toutes les factures (tous userId) : getById, update, delete, validateBAP, devalidateBAP, validateBAPBulk, reprocessSelected, regenerateBapPdf, search, exportToExcel, exportToPdf, exportSFTP, bapHistory.delete/regenerate — tous corrigés pour les admins. Manus 2026-07-13 08:13:49 -04:00
  • a994ec2e61 Checkpoint: Fix: colonne azureAdId agrandie à VARCHAR(128) pour accepter les identifiants Azure AD composés (objectId.tenantId). Migration appliquée en production. Manus 2026-07-07 06:20:33 -04:00
  • 8ee10602d3 Checkpoint: Ajout de la connexion OAuth2 Microsoft 365 (Azure AD) : route callback /api/auth/azure/callback, bouton Microsoft sur la page de login, variables d'environnement Azure AD configurées Manus 2026-07-07 05:54:46 -04:00
  • d4c9bf635a Checkpoint: Fix: la procédure deleteAll des importLogs permet maintenant aux admins de supprimer tous les logs (pas seulement les leurs). Correction de deleteAllImportLogs dans db.ts pour accepter userId=null (suppression totale). Manus 2026-06-17 06:20:40 -04:00
  • f7d3f6d5b3 Checkpoint: Ajout colonne "Source import" (Email / Dossier / Fichier) dans l'historique des imports : schéma DB migré, backend mis à jour (routers.ts, emailImportService.ts, folderImportService.ts), frontend History.tsx avec badges colorés dans le tableau et le dialog de détails. Manus 2026-06-17 06:11:46 -04:00
  • b97efb5c57 Checkpoint: Fix: bouton de téléchargement PDF BAP pour factures validées sans PDF (NOVRH VF11521, EVOLUCARE ET098857). Ajout procédure regenerateBapPdf côté serveur + bouton orange RefreshCw côté frontend pour régénérer le PDF à la volée. Déployé en recette et production. Manus 2026-06-17 03:41:18 -04:00
  • 756f8ab392 fix: stabiliser validatedInvoiceIds avec useMemo pour bouton téléchargement BAP Manus 2026-06-16 12:29:58 -04:00
  • 1a09c98ef5 fix: exportStatus mis à jour à 'exported' après validation BAP (unitaire et en masse) Manus 2026-06-16 12:18:40 -04:00
  • 22b34fcf1e fix: nommage fichiers BAP - format AAAA-MM-JJ - Fournisseur - NFacture.pdf Manus 2026-06-15 12:28:04 -04:00
  • b34e145d5d feat: bouton Dévalider BAP, barre actions 2 lignes, suppression colonne Utilisateur Manus 2026-06-15 12:14:25 -04:00
  • a9387eaaea feat: détection doublons par numéro+montant dans les 3 points d'import Manus 2026-06-15 12:02:24 -04:00
  • 295965fa57 true message Manus 2026-06-15 11:54:58 -04:00
  • 2fde4f92a6 feat: mode compact/détail, tri date réception/facturation, suppression colonne utilisateur Manus 2026-06-12 09:00:56 -04:00
  • f49eadda2b feat: warningMessage quota IA dans rapports d'import + redémarrage auto services Manus 2026-06-09 12:15:26 -04:00
  • 595f5dded1 fix: appliquer les règles d'automatisation (ventilation) lors de l'import email Manus 2026-06-09 10:48:29 -04:00
  • 6c7828d829 fix: transmettre aiSettings (provider Manus) lors de l'import email Manus 2026-06-09 10:20:17 -04:00
  • 056bccd985 Checkpoint: Ajout de la colonne 'Export SP' dans le tableau historique de Ventilation FreePro : icône horloge grise = non exporté, icône verte = exporté (date au survol), icône rouge = erreur (message au survol). Le statut est sauvegardé en base (sharepointUploadStatus, sharepointUploadPath, sharepointUploadError, sharepointExportedAt) lors de chaque export via 'Envoyer vers SharePoint'. Manus 2026-06-08 10:53:34 -04:00
  • 43cacda7ad Checkpoint: Correction des montants des lignes de ventilation : application d'un coefficient de redistribution proportionnel (totalTtc_officiel / totalTtc_calculé) sur chaque ligne pour que leur somme corresponde exactement au total TTC officiel FreePro. Les montants sont maintenant cohérents avec le portail. Manus 2026-06-08 10:38:58 -04:00
  • ed01a07105 Checkpoint: Correction des montants TTC : utilisation du total_ttc retourné par l'API /api/api_red_october/v1/invoices au lieu de recalculer depuis les lignes CSV. Les montants correspondent maintenant exactement au portail FreePro. Manus 2026-06-08 10:30:03 -04:00
  • 9de1a767fa Checkpoint: Récupération automatique FreePro opérationnelle : utilisation de l'API REST interne Angular /api/api_red_october/v1/invoices pour lister les factures, puis téléchargement CSV via /account/invoice/{ref}/primary_csv. 6 factures importées automatiquement (01/2026 à 06/2026). Manus 2026-06-08 10:16:52 -04:00
  • f3e985af5f Checkpoint: Fix testConnection : le backend lit désormais le mot de passe directement en base (jamais exposé au frontend). Timeout porté à 25s. Détection correcte de invalid_credentials dans la réponse JSON FreePro. Manus 2026-06-08 09:58:58 -04:00
  • f676395973 Checkpoint: Correction du bouton "Tester la connexion" FreePro : - Backend : réécriture de loginToFreePro avec timeout 15s, gestion robuste des erreurs, multiples endpoints tentés, vérification de l'accès /account/ pour confirmer la connexion - Frontend : suppression de la garde incorrecte sur loginPassword === "••••••••", validation par trim() + includes("@") + longueur minimale - Résultat : le bouton répond maintenant et retourne un message d'erreur explicite si les credentials sont incorrects Manus 2026-06-08 09:42:32 -04:00
  • e32d540bc9 Checkpoint: Ajout de l'onglet "Paramétrage" dans la page Ventilation FreePro : - Table DB freeproSettings (URL portail, credentials, fréquence, date antériorité, statut dernière récupération) - Service freeproAutoImport.ts : connexion HTTP au portail FreePro, téléchargement CSV, pipeline d'import - Procédures tRPC : getSettings, saveSettings, testConnection, forceImport - Job périodique en mémoire (daily/weekly/monthly) via setInterval - Frontend : wrapper Tabs (onglet 1 = Import & Historique, onglet 2 = Paramétrage) - Onglet Paramétrage : credentials, fréquence, date antériorité, bouton "Forcer récupération", statut - Tests unitaires : 8 tests passés Manus 2026-06-08 09:24:05 -04:00
  • 51830b88be fix: PDF généré côté serveur (pdf-lib) - 1 page A4 portrait garantie Manus 2026-06-05 11:27:58 -04:00
  • 5d919f891f fix: PDF FreePro dessin manuel - 1 page A4 portrait garantie Manus 2026-06-05 11:00:37 -04:00
  • 44186a056b fix: PDF FreePro 1 page A4 portrait - calcul précis hauteur cellule Manus 2026-06-05 10:50:00 -04:00
  • b5705b5209 fix: PDF A4 portrait, total sans slash, bouton SharePoint FreePro Manus 2026-06-05 10:08:38 -04:00
  • d3bb0c7e07 fix: renommage export PDF FreePro - ventilation facture mm.AA.pdf Manus 2026-06-05 10:01:22 -04:00
  • 054cee0e06 fix: lignes FreePro sans structure affectées à 3069UDA (au lieu de vide) Manus 2026-06-05 09:56:12 -04:00
  • a4c347e554 feat: import FreePro accepte .xls, .xlsx et .csv Manus 2026-06-05 09:20:42 -04:00
  • 6224328331 fix: export PDF A4 paysage, 1 seule page, taille police dynamique Manus 2026-06-05 09:12:22 -04:00
  • db96b29c9f fix: correction extraction insertId MySQL2 dans createFreeproImport (result[0].insertId) Manus 2026-06-05 08:38:31 -04:00
  • ce6760a2ea fix: insertion freeproVentilationLines par lots de 50 pour eviter limite MySQL Manus 2026-06-05 08:26:31 -04:00
  • 7f56fa7045 Checkpoint: Module Ventilation FreePro complet : import Excel FreePro, transformation automatique (script/TTC/type XOAUTH2), tableau de ventilation par structure+type, historique par mois, export PDF. Menu Ventilations ajouté dans la navigation. Manus 2026-06-05 08:02:29 -04:00
  • 4ef130f21d Checkpoint: OAuth2 IMAP pour Office 365 : ajout du mode d'authentification OAuth2 pour l'import email (Azure AD Client Credentials), sélecteur basic/oauth2 dans l'UI, bouton "Tester la connexion IMAP", procédure testEmailConnection dans le router. Migration DB emailImportAuthMode appliquée. Manus 2026-06-05 05:54:21 -04:00
  • 22515e5414 feat: date de début de lecture emails dans paramètres import Manus 2026-06-02 10:53:45 -04:00
  • 7c73d701ac fix: nom fichier export conforme date-fournisseur-numero.pdf Manus 2026-05-06 12:18:03 -04:00
  • 4086227df7 feat: export manuel (exportToPdf) supporte maintenant SharePoint en plus du dossier local Manus 2026-05-06 12:12:38 -04:00
  • 41ae95737b fix: logs explicites export SharePoint dans validateBAP + migration colonnes bapHistory camelCase Manus 2026-05-06 11:07:58 -04:00
  • 94844b0589 feat: bouton Tester l'upload SharePoint + tooltip erreur SP dans historique BAP Manus 2026-05-06 10:18:46 -04:00
  • 6c21c71660 fix: export SharePoint - erreur remontée au frontend, meilleur parsing URL et détection bibliothèque Manus 2026-05-06 09:41:40 -04:00
  • 5cb1f878a5 fix: page Paramètres - 2 onglets Import/Export, bug date expiration secret corrigé, chargement optimisé Manus 2026-05-06 09:10:41 -04:00
  • 96cfdc8901 Checkpoint: Trois améliorations SharePoint : (1) bouton 'Tester la connexion' Azure AD dans les paramètres avec procédure tRPC testAzureConnection, (2) champ date d'expiration du secret Azure AD avec alerte 30 jours avant expiration, (3) log statut upload SharePoint (success/error/path) dans la table bapHistory et affichage dans BapHistory.tsx Manus 2026-05-06 08:02:50 -04:00
  • 6553aee8a6 feat: améliorations SharePoint - test connexion Azure AD, alerte expiration secret, log statut upload dans BapHistory Manus 2026-05-06 07:55:46 -04:00
  • bbee4cd7c9 Checkpoint: Intégration complète de l'API Microsoft Graph pour l'export automatique des PDF BAP vers SharePoint. Inclut : helper uploadToSharePoint, champs Azure AD en DB (azureTenantId, azureClientId, azureClientSecret, exportFolderType), UI de configuration dans Paramètres, et adaptation des procédures validateBAP et validateBAPBulk. Manus 2026-05-06 07:38:24 -04:00
  • 766f2b444d feat: intégration Microsoft Graph pour export SharePoint - helper uploadToSharePoint, champs Azure AD en DB et UI Manus 2026-05-06 07:29:23 -04:00
  • 382ac51943 fix: compteurs statusCounts respectent le filtre de période (cohérence avec la liste affichée) Manus 2026-05-05 10:44:18 -04:00
  • cfe6fdf95a fix: corriger le compteur 'À compléter' - affiche uniquement les factures sans BAP validé ET avec champs manquants Manus 2026-05-05 10:38:45 -04:00
  • 08bb220360 Checkpoint: Corrections déployées : 1) Signature BAP affichée même sans image (fallback texte), 2) URL Manus Forge corrigée (forge.manus.im → forge.manus.ai), 3) Enum bapExportMode étendu à 'both' pour permettre la sauvegarde des paramètres SharePoint Manus 2026-05-05 10:00:39 -04:00
  • b5f7e98f4d fix: ajouter 'both' dans l'enum bapExportMode (schema DB + validation Zod) pour permettre la sauvegarde des paramètres SharePoint Manus 2026-05-05 09:56:07 -04:00
  • 8536c9a8aa fix: corriger URL Manus Forge de forge.manus.im vers forge.manus.ai Manus 2026-05-05 09:31:54 -04:00
  • 699e245cf0 fix: afficher le nom du signataire BAP même sans image de signature (fallback texte) Manus 2026-05-05 05:58:18 -04:00
  • 37cc9442da feat: les admins voient toutes les factures/logs/historique BAP, colonne Utilisateur dans Factures Manus 2026-05-03 10:56:20 -04:00
  • 973cc67603 feat: page rapport détaillé des imports avec filtres, compteurs et détails doublons/erreurs Manus 2026-05-03 10:23:40 -04:00
  • 4dbc161a5f feat: historique imports - filtres, compteurs et bouton visualisation Manus 2026-05-03 06:41:50 -04:00
  • 8a02125fe2 fix: getLoginUrl() returns /login when VITE_OAUTH_PORTAL_URL is not set Manus 2026-05-03 06:00:18 -04:00
  • a3a7016130 fix: vite outputs to dist/public not client/dist Manus Deploy 2026-04-28 13:03:47 -04:00
  • ba16596dc0 fix: use node:22-bookworm (Debian) instead of Alpine for sharp compatibility Manus Deploy 2026-04-28 12:40:45 -04:00
  • 8bf2001693 fix: copy node_modules from builder to avoid sharp recompilation Manus Deploy 2026-04-28 12:28:18 -04:00
  • cdd8aabf39 fix: Dockerfile - add node-gyp for sharp compilation Manus Deploy 2026-04-28 12:24:12 -04:00
  • 1ddb715eda feat: déploiement initial recette Santinova Manus Deploy 2026-04-28 12:12:13 -04:00
  • 54f3f8eeef Checkpoint: Ajout d'un sélecteur Période (année + mois) dans la barre de filtres de Factures BAP, cumulable avec les filtres de statut existants. Le sélecteur mois est désactivé si "Toute année" est sélectionné. Bouton Réinitialiser visible si un filtre est actif. Manus 2026-04-15 08:20:43 -04:00
  • 62b7a61bf5 Checkpoint: Ajout de la section "Moteur IA" dans les paramètres : sélecteur Mistral/Manus, champs clé API avec affichage masqué, persistance en DB, migration VPS appliquée Manus 2026-04-15 08:04:54 -04:00
  • 7fbb3d5f2c Checkpoint: Placement intelligent du cartouche BAP : détection de zone blanche par rasterisation PDF (pdftoppm + sharp), cartouche positionné automatiquement dans la zone blanche disponible, ou sur une nouvelle page annexe si aucune zone suffisante n'existe Manus 2026-04-15 07:35:41 -04:00
  • 927ab2ff22 Checkpoint: Correction du ReferenceError sur le VPS : isEligibleForBAPValidation déplacée avant filteredInvoices et statusCounts pour éviter l'erreur de hoisting dans le bundle minifié. Manus 2026-04-14 08:24:00 -04:00
  • 776324f315 Checkpoint: Ajout du filtre "À compléter" dans Factures BAP : affiche toutes les factures dont le bouton BAP n'est pas actif (score < 100%, champs manquants, déjà exportée ou abonnement). Bouton ambré avec compteur dynamique. Manus 2026-04-14 08:19:14 -04:00
  • 4090678f6f Checkpoint: Accordéon +/- dans Factures BAP : bouton global ChevronsUpDown en en-tête, bouton individuel ChevronRight/Down par ligne, seconde ligne dépliable avec Service/Type achat/Ventilation, colonnes retirées de la ligne principale Manus 2026-04-12 18:31:22 -04:00
  • 5d0c8fbda9 Checkpoint: Titre et sous-titre sur une ligne dédiée, boutons d'action sur une ligne séparée avec flex-wrap pour éviter le défilement horizontal Manus 2026-04-12 18:17:42 -04:00
  • 412da0e68f Checkpoint: Ajout du téléchargement groupé ZIP dans Factures BAP, bouton Re-générer dans Historique BAP, filtres Validées BAP / En attente BAP dans Factures BAP Manus 2026-04-12 17:53:38 -04:00
  • ba3392b1e4 Checkpoint: La route /api/download-bap accepte maintenant un param filename et le met dans Content-Disposition (RFC 5987). Les fonctions downloadBapPdf dans InvoicesBAP.tsx et BapHistory.tsx passent le filename formaté dans l'URL. Manus 2026-04-12 17:42:15 -04:00
  • d1dda66b9a Checkpoint: Bouton Télécharger toujours visible pour les factures en état Validé dans InvoicesBAP, même après rechargement. Le pdfUrl est récupéré depuis bapHistory via une nouvelle route tRPC getBapPdfUrls. Nommage uniforme Date - Fournisseur - N°Facture.pdf sur tous les points d'export. Manus 2026-04-12 17:36:09 -04:00
  • bcc421c6a7 Checkpoint: Toutes les restrictions sur les cases à cocher dans Factures BAP ont été supprimées : n'importe quelle facture peut être cochée pour l'export et la relance des automatismes, sans restriction de score ou de champs remplis. Manus 2026-04-12 15:56:17 -04:00
  • 132f8ccec2 Checkpoint: isSubscription appliqué lors des imports. Seuil de confiance persisté en base (champ learningConfidenceThreshold dans userSettings). LearningSettings.tsx charge et sauvegarde le seuil via settings.get/upsert. Manus 2026-04-12 15:27:19 -04:00
  • 95aee693ea Checkpoint: Apprentissage déclenché depuis le select Abonnement (OUI/NON) dans la liste Factures (Invoices.tsx). Correction du commentaire erroné dans InvoiceDetail.tsx. Manus 2026-04-12 15:20:13 -04:00
  • e80f899498 Checkpoint: Apprentissage déclenché depuis les selects serviceConcerne/typeAchat/ventilation dans la liste Factures BAP. Page Apprentissages IA refaite avec indicateur de confiance (Confirmé/En observation) et seuil configurable. Manus 2026-04-12 15:11:24 -04:00
  • 3ae1e47ca6 Checkpoint: Bouton Relancer corrigé (automatismes uniquement, sans LLM). Système d'apprentissage complet : table invoiceLearnings, routes tRPC, déclenchement depuis InvoiceDetail, application lors des imports, page LearningSettings dans Configuration > Apprentissages IA. Manus 2026-04-12 14:54:29 -04:00
  • 120f56bb23 Checkpoint: Ajout d'un champ texte libre qui s'affiche quand "Autre..." est sélectionné dans les selects typeAchat, serviceConcerne et ventilationComptable des règles d'automatisme. Le texte saisi remplace "AUTRE" dans le tampon BAP. Disponible dans les deux modes (wizard et avancé). Manus 2026-04-12 14:40:18 -04:00
  • 8acfb4eae1 Checkpoint: Ajout route tRPC invoices.reprocessSelected et bouton Relancer (violet) dans la barre d'outils de Factures BAP Manus 2026-04-12 14:20:05 -04:00
  • e9c727d679 Checkpoint: Renommage menus (Paramètres IA et Signatures, Paramètres import/export), paramètres export BAP refondus (switches indépendants navigateur+dossier, types local/Teams/SharePoint), historique BAP simplifié (colonnes supprimées, bouton Réexporter), import manuel par dossier entier Manus 2026-04-12 13:47:30 -04:00
  • 8b12f4fdcb Checkpoint: Modification du nommage des PDFs BAP téléchargés : format "AAAA-MM-JJ - Fournisseur - N°Facture.pdf" dans BapHistory.tsx et InvoicesBAP.tsx. Les paramètres invoiceNumber et validatedAt sont passés à la fonction downloadBapPdf. Manus 2026-04-12 12:23:48 -04:00
  • d4fe15c23d Checkpoint: Correction du bouton téléchargement BAP : la route /api/download-bap utilise maintenant un query param pdfPath pour accepter les chemins complets avec sous-dossiers (ex: /storage/2026-04/BAP_xxx.pdf). Ajout d'une route de compatibilité qui cherche dans tous les sous-dossiers. Sécurité anti-path-traversal maintenue. Manus 2026-04-12 10:31:18 -04:00
  • 9d71f1e34a Checkpoint: Ajout du bouton de téléchargement direct du PDF annoté BAP : route Express /api/download-bap/:filename avec Content-Disposition attachment, bouton Télécharger dans InvoicesBAP (apparaît après validation), boutons Voir + Télécharger dans l'Historique BAP. Correction du layout PDF (2 colonnes) également incluse. Manus 2026-04-12 10:05:02 -04:00
  • 3cbd705249 Checkpoint: Correction du layout de la zone BAP dans les PDFs annotés : mise en page 2 colonnes (texte à gauche / signature à droite), séparation du destinataire sur sa propre ligne, suppression du chevauchement entre le nom d'établissement et l'image de signature. Appliqué aux deux routes validateBAP et validateBAPBulk. Manus 2026-04-12 09:49:38 -04:00
  • 76554214b2 Checkpoint: Ajout du bouton "Valider tout en BAP" sur la fenêtre Factures BAP : route validateBAPBulk côté serveur (traitement de toutes les factures éligibles en une passe), mutation côté client avec ouverture des PDFs générés, bouton vert dans le header de la page. Manus 2026-04-12 09:40:33 -04:00