Spaces:
Running
Running
Commit History
8 days ago
-
feat(communications): suivi d'ouverture des emails (Brevo)
- Envoi HTML tague par campagne, une ligne par destinataire dans Suivi_Emails. - Synchronisation des evenements Brevo (delivre, ouvertures, proxy Apple, clics, rebonds, spam) a la demande et toutes les heures (scheduler). - Onglet Statistiques d'ouverture : tableau par campagne + detail par personne. - Recapitulatif unique a l'admin au lieu d'une copie cachee par email. - Lecture du messageId Brevo sans jamais faire echouer un envoi reussi. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>c45c242
28 days ago
-
Réduit la consommation de quota Google Sheets : lectures groupées + cache étendu
- core/sheets_cache.py : ajoute get_cached_dfs_batch() (1 appel API via values_batch_get au lieu de N appels par feuille), tout en reproduisant la numérisation par défaut de get_all_records() pour un résultat identique. - request_loans.py, client_simulator.py, Usis.py, map_dashboard.py, logistique.py, communications.py, ml_dashboard.py : lectures regroupées en un seul appel (avec repli feuille par feuille si une feuille optionnelle manque), ou mises en cache quand elles ne l'étaient pas. - regles_metier.py : cache la lecture de Clients_KYC (liste déroulante), inchangé pour les lectures qui doivent rester immédiates (règles de tarification en direct). - Laissé volontairement sans cache : Check_Up_Loans.py (désactive la numérisation gspread pour éviter une corruption des décimales françaises — incompatible avec le nouveau cache groupé), les lectures juste après une écriture (forecasting, règles métier), et les tâches planifiées en arrière-plan (notifications).c20487a -
Garde anti double-clic sur les boutons d'écriture restants
Complète la protection déjà posée (core/ui_guards.py, voir commit précédent sur kyc_form/repayments/request_loans/client_simulator) sur les boutons restants qui écrivent dans Google Sheets ou envoient un email : - Check_Up_Loans.py : validation d'une renégociation de prêt, envoi du contrat mis à jour. - loans_engine.py : octroi direct d'un prêt, envoi du contrat. - communications.py : envoi groupé de communications. - logistique.py : déclenchement manuel du digest admin. - map_dashboard.py : envoi du lien de vérification géolocalisation. - jasmine_optimizer.py : enregistrement de l'objectif annuel et application de la marge globale. - regles_metier.py : formulaires d'édition de règle et du barème de pénalité retard (fermeture de la fenêtre de double-clic déjà réduite par la vérification "valeur inchangée"). Les actions ponctuelles par dossier (octroi, encaissement, renégociation, KYC) restent désactivées après usage avec la mention "Bouton déjà utilisé" ; les actions répétabl…95313e0
-
Securite et fiabilite : corrections sur l'ensemble du simulateur/octroi/notifications
Relecture complete (17 fichiers modifies + 4 nouveaux) des corrections suivantes, apportees en parallele sur le poste : Securite : - Simulateur public : recherche client remplacee (ne liste plus toute la base), mot de passe partage remplace par un lien d'onboarding a usage unique, outils JASMINE (portefeuille reel) retires cote page publique (allowed_tools=[]). - Mots de passe hashes PBKDF2-HMAC-SHA256 (core/auth.py), compatible avec les comptes pas encore migres, comparaison en temps constant y compris pour un identifiant inconnu (anti-enumeration). - Verrouillage apres 5 tentatives de connexion echouees (5 min). - IP client lue depuis le dernier maillon de X-Forwarded-For (celui ajoute par le proxy de confiance) plutot que le premier (falsifiable par le client) ; bug qui empechait l'enregistrement du GPS corrige. - Motif libre du client (et l'analyse JASMINE qui en decoule) traite comme une donnee a citer, jamais une instruction, avec echappement HTML avant afficha…397b23d
-
Migre l'envoi d'email vers l'API HTTPS Brevo (SMTP bloque sur HF Spaces)
Hugging Face Spaces bloque les connexions SMTP sortantes (587/465/25) pour la plupart des Spaces -- confirme par plusieurs fils du forum HF et par l'erreur "Connexion SMTP : timed out" observee en conditions reelles sur le module Communications. Le SMTP (Gmail ou Brevo relay) ne peut donc jamais aboutir depuis ce deploiement, quel que soit le fournisseur. Nouveau module central src/core/email_client.py : utilise l'API Brevo (BREVO_API_KEY, deja present dans les secrets, HTTPS/443 jamais bloque) en priorite, et ne retombe sur smtplib que si aucune cle API n'est configuree (utile en local ou sur un hebergement autorisant le SMTP). email_sender.py, notifications.py, geoloc_verify.py et communications.py delegent maintenant tous a ce module -- toute la logique SMTP dupliquee (login, port, enveloppe) est supprimee de ces 4 fichiers. Corrige au passage un vrai Bcc (enveloppe/API) a la place d'un simple en-tete "Bcc:" visible dans email_sender.py. Co-Authored-By: Claude Sonnet 5 <noreply@a…f56ffd3
-
Ajoute un identifiant de connexion SMTP distinct de l'adresse expediteur
Necessaire pour Brevo (et tout relais SMTP similaire) : le login SMTP (ex. aced4d001@smtp-brevo.com) est different de l'adresse d'expediteur verifiee affichee dans le "From". Nouveau secret optionnel SMTP_LOGIN, utilise pour server.login() a la place de SENDER_EMAIL ; retombe sur SENDER_EMAIL si absent (comportement Gmail inchange). Retire aussi quelques emojis au passage sur le code touche. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>dda528d
-
Ajoute detection de proximite/geolocalisation verifiee et module Communications
- Corrige l'agent ontologie (rdfs:label != nom) et cable les donnees manquantes des widgets JASMINE (USIS, onboarding). - TACTICAL MAP : lignes de proximite plus-proche-voisin (detection de collusion), geocodage sur adresse complete + pays dynamique au lieu du Senegal force, correction manuelle persistante par client. - Onboarding : capture GPS navigateur + comparaison IP (non bloquant pour l'instant, le temps de confirmer que la permission navigateur fonctionne sur l'environnement de deploiement). - Nouveau : lien de verification de localisation par email (usage unique, declenchement manuel par client) et module Communications pour l'envoi groupe a une selection de clients/garants. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>6916dd5