Spaces:
Running
Running
Commit History
2 days ago
-
feat(simulateur): score de remboursement sans Jev, selon la qualite du modele Running
Le score s'affiche si le modele a passe ses controles (historique mature, classes equilibrees, test chronologique, Brier, AUC). Jev reste pour l'analyse Jasmine et Ontology. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>2278cb0
5 days ago
-
fix(demandes): montants lus a 0 quand le Sheet fournit une espace insecable
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>6ff8ef6 -
style(ui): emojis remplaces par des balises tactiques sobres
- [OK] [ECHEC] [ATTENTION] [ALERTE] [REFUS] [STOP] [ANALYSE] [IA] [DOSSIER]... a la place des emojis dans tous les libelles, messages et journaux - puces d'etat (couleurs) remplacees par des carres/ronds geometriques - aucun changement de logique : les tests et la detection des messages suivent la nouvelle forme Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>495d60d
8 days ago
-
fix(securite): XSS sur donnees publiques, limite d'envoi des liens simulateur
- echappement HTML des donnees saisies par le public avant rendu brut : analyse IA des documents KYC (kyc_form), profession/secteur (request_loans), nom et valeurs des garants (Data_exploration). Plus important depuis que le cookie de session est lisible en JavaScript. - simulateur public : email valide obligatoire, 3 liens/heure par adresse, 40 liens/heure au total (protege le compte Brevo et la feuille des tokens) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>c4a01d3
11 days ago
-
feat: journal d'audit, pénalités, cohérence remboursements et signature
- Journal d'audit (core/audit_log.py, module audit_viewer) : traces des envois d'email, connexions et jobs - Pénalités : consommation de l'occurrence à l'octroi uniquement, idempotente - Correctifs remboursements, rappels et décimaux du Sheet (virgule française) - Pages et module de signature électronique restants (voir commit précédent) Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>56277f7 -
feat(signature): signature electronique des contrats (lien email + 4 derniers car. ID_Officiel + OTP + case a cocher)
- Pret cree EN_ATTENTE_SIGNATURE (bloque), ACTIF quand client (et garant) ont signe - Pages publiques ?sign=<token> et ?verifysig=<ID> ; bloc de signature electronique en fin de PDF - PDF deterministes (invariant=1) + snapshot JSON : documents reconstituables sans stockage de fichier - Sceau HMAC (secret SIGNATURE_SECRET), token et OTP jamais stockes en clair, journal append-only - Relances 24 h, re-emission automatique apres expiration (3 max), alerte admin - Module admin Signatures : suivi, rattrapage des prets sans remboursement, actions, journal - Branche sur octroi direct, demandes approuvees et Check-Up ; EN_ATTENTE_SIGNATURE compte dans la limite de prets - 79 tests (faux classeur Sheets, AppTest Streamlit) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>de5e25f
13 days ago
-
fix: decimaux du Sheet lus correctement (17,61 n'est plus lu 1761) et logs LLM/Jev
Le classeur est en locale francaise : gspread supprimait la virgule des decimaux a la lecture ("17,61" -> 1761, "1,5" -> 15, "252,4" -> 2524). core/gspread_fr.py lit desormais une virgule decimale comme un decimal, pour toute l'application (get_all_records, cache partage) et le job de rappels. Neutralise la rustine "diviser par 10 tant que > maximum" de Demandes Prets qui reduisait un taux legitime de 24,11 % en 2,41 %. Diagnostic : [LLM] modele, duree et erreur de chaque tentative ; [JEV <etape>] trace envoyee et reponse brute complete. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>c73b85c -
feat(simulateur): progression de l'analyse IA en une ligne et durée dans Demandes Prêts
Sous le bouton d'analyse, une seule ligne remplacée à chaque étape (taux ML, Jasmine, contrôles Jev, modèle de remboursement) avec le temps écoulé, puis "Analyse terminée en X s". Durée totale et détail par étape enregistrés dans Prets_Requests (Duree_Analyse_IA_s, Detail_Analyse_IA) et affichés dans la fiche de la demande. Chronométrage de chaque étape aussi écrit dans les logs ([CHRONO simulation]). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>f40f505
26 days ago
-
Corriger le pourcentage et diagnostiquer les refus Jev
e3cb468 -
Clarifier les rapports mail et corriger l'endettement affiché
7ec09c4 -
Ajouter les validations Jev et l'estimation de remboursement
e07d8ff
27 days ago
-
retrait de l'emoji 🔍 dans VOIR LE DOSSIER COMPLET & RAPPORTS JASMINE
f1c8fc8
28 days ago
-
Capture request origin for fraud review
5b425ba -
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 -
Fix simulator and loan request flows
8cbb101 -
Score_Jasmine en Markdown sûr (plus de HTML brut stocké/affiché), et garde anti double-clic sur les boutons d'écriture
- client_simulator.py : l'audit financier/algorithmique stocké dans Score_Jasmine est généré en Markdown standard au lieu de HTML brut, pour ne plus persister de balises dans Prets_Requests. - request_loans.py : affichage du rapport JASMINE via st.markdown() natif (sans unsafe_allow_html) au lieu d'un échappement manuel qui cassait la mise en forme de l'audit. - core/ui_guards.py (nouveau) : garde-fou générique anti double-soumission pour les boutons qui écrivent dans Google Sheets ou envoient un email, appliqué à l'octroi de prêt, à l'encaissement de remboursement, à l'envoi de rappels/reçus et à la validation KYC.c638843 -
Barème de majoration par montant, détail des frais, et fix quota 429
Barème : la majoration pour retard pardonné dépend désormais du montant du prêt simulé (5% < 50k, 2,5% entre 50k et 150k, 2% > 150k XOF), remplaçant le forfait unique précédent. Pilotable dans Règles Métier. Détail des frais : le simulateur écrit maintenant la composition du taux (frais de transfert, risque brut IA, marge, majoration retard) dans de nouvelles colonnes de Prets_Requests, affichées dans le module Demandes Prêts. Quota 429 : l'initialisation du registre de pénalités ouvrait la feuille et écrivait une ligne par client/occurrence, épuisant le quota de lecture Google Sheets. Elle n'ouvre désormais la feuille qu'une fois et écrit toutes les lignes en un seul appel. Nouvelle fonction afficher_erreur_sheets() (bandeau jaune 429 / rouge générique) appliquée au chargement du simulateur et aux appels Sheets de Règles Métier ; la majoration se dégrade silencieusement en cas d'échec plutôt que de casser la page du client. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>4d00d77
-
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 -
Corrige les doublons de pret a l'octroi et l'ID base sur un comptage de lignes
L'ID de pret genere par comptage de lignes (len(ws.get_all_values())) peut reutiliser l'identifiant d'un pret existant des qu'une ligne a ete supprimee/deplacee dans la feuille — or c'est cet ID qui relie un pret a ses remboursements. Ajoute un generateur partage (core/id_generator.py) base sur le MAX des numeros deja utilises cette annee, et l'utilise a la fois dans Init Loan (loans_engine.py) et dans l'octroi via Demandes Prets (request_loans.py), qui dupliquaient deja des logiques legerement differentes. Ajoute aussi une garde anti-doublon a l'octroi : le pret est ecrit dans Prets_Master puis le statut de la demande est mis a jour dans Prets_Requests en 2 ecritures separees. Si la 2e echoue (ex: 429), le message invitait a reessayer l'octroi, ce qui creait un 2e pret pour la meme demande. Avant d'ecrire, on verifie maintenant si un pret correspondant a cette demande (meme ID_Client + Date_Creation, stables sur toute nouvelle tentative) existe deja dans Prets_Master ; si oui, l'octr…47776fe
-
Rendre non bloquante l'alerte de risque d'endettement (>130%)
L'alerte reste affichee (theme jaune/Gotham) mais ne bloque plus la soumission de la demande : le gerant garde la decision finale. Ajoute un affichage de l'historique de remboursement (retards passes) du client, visible cote simulateur public et cote module Demandes Prets, pour aider a evaluer le risque reel du dossier. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>3d15e49
-
Enrichit le contexte JASMINE de 9 modules avec guide et definitions de champs
Chaque widget JASMINE ne recevait que des valeurs brutes sans aucune explication de ce qu'elles representent ni du role de la page — meme cause racine que le bug "meilleur mois" et "CRITIQUES" deja corriges sur Dashboard et USIS. Ajoute systematiquement guide_page (role de la page, workflow) et definitions_champs (definition metier de chaque valeur transmise, y compris les enumerations type_pret/statut_analyse/ statut_echeance) sur : request_loans, loans_engine, Check_Up_Loans, repayments, client_simulator, jasmine_optimizer, digital_twin, et complete ml_dashboard/Usis deja touches precedemment. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>25c2bcc
-
Etend le widget JASMINE aux 6 modules restants
Integre render_scoped_widget sur Dashboard, USIS, Check Loan, Demandes Prets, Init Loan et Onboarding, chacun avec son propre contexte (client selectionne, pret en cours, scores KYC...). Complete le deploiement commence sur Repayments, Digital Twin, Optimizer et le simulateur client. Corrige au passage une 3e copie codee en dur de l'objectif annuel (ml_dashboard.py, "objectif_2026 = 2_200_000") qui avait echappe a la Phase 1 : elle lit maintenant la meme source de verite unique (vortex_params.get_objectif_annuel) que l'Optimizer et les Rapports IA. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>54b48aa
-
Update src/modules/request_loans.py
Verified signature4284ba6
-
Update src/modules/request_loans.py
Verified signaturec826189
-
Update src/modules/request_loans.py
Verified signatureba77684 -
Update src/modules/request_loans.py
Verified signature89f6ac5 -
Update src/modules/request_loans.py
Verified signaturecf04e96
-
Update src/modules/request_loans.py
Verified signature94b3414
-
Update src/modules/request_loans.py
Verified signature8fd48f1 -
Update src/modules/request_loans.py
Verified signature44bf241
-
Update src/modules/request_loans.py
Verified signature6e03046 -
Create request_loans.py
Verified signature4c65fab