Spaces:
Running
Running
Commit History
5 days ago
-
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
11 days ago
-
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: remboursements, pénalités, rappels et cohérence des calculs
Remboursements (AnalyseRepayment, repayments): - Un paiement en retard qui ne couvre pas les pénalités est PARTIEL et ne clôture plus le prêt tant qu'un solde reste dû (garde-fou 1 %) - Pénalités dues une seule fois par échéance (celles déjà encaissées sont retirées), prélevées en premier dans la limite du versement : plus d'intérêts négatifs ; trop-perçu refusé avec message ; la dernière échéance absorbe le reliquat cumulé ; scénario de pénalités obligatoire en cas de retard - Registre des retards pardonnés : une échéance qui a déjà encaissé des pénalités n'est plus comptée comme pardonnée - Numéro de reçu et ID de transaction : plus grand numéro émis + 1, lus du même instantané juste avant l'écriture - Rappels : pénalités annoncées = pénalités encaissées (une seule règle pour le bouton, le tir groupé et le job de 12 h) ; bilan du tir groupé conservé après rechargement, clients sans email journalisés - Reçu PDF : adresse échappée (balisage dans l'adresse ne casse plus …92d7dac
22 days ago
-
fix: consolide get_credential, log silences critiques, securise MIME/SPARQL/Mapbox
- Rapport IA : filtre mois/trimestres multi-select par cases a cocher (union exacte des mois coches, non contigu) - get_credential() centralisee dans core/email_client.py : supprime 10 copies dupliquees (client_simulator, Check_Up_Loans, loans_engine, repayments x2, notifications, geoip_client, sim_gate, map_dashboard, geoloc_verify) - except Exception: pass nus remplaces par log_swallowed() ou Weitere silences critiques (demarrage scheduler, cache Usis, schema_cache AIP, prediction ML post-reentrainement) - Logs InvoiceRepayment.py : retrait numero_recu/trans_id des print() (fuite potentielle dans les logs du Space) - validation_engine.py : validation du format cls/prop avant interpolation SPARQL - map_dashboard.py : token Mapbox echappe via json.dumps au lieu de concatenation brute en JS - document_validator.py : verification magic bytes avant Docling (fichier renomme ne passe plus silencieusement) - Ajout tests/ (62 tests : penalites_retard, AnalyseFinance, doc…2fe4365
28 days ago
-
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
29 days ago
-
fix(ui): simplify "AJOUTER ECHEANCE" button label
Remove the brackets and leading plus sign, keeping just the two words.f0eec26
-
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
-
Nettoie les imports et fonctions mortes detectes par audit statique
Scan AST (imports jamais references) + scan par occurrences (fonctions jamais appelees) sur tout src/, verifie manuellement pour ecarter les faux positifs (accents cassant les limites de mot dans un grep de controle). Retire ~35 imports inutilises repartis sur 24 fichiers, et 3 fonctions mortes : get_form_elapsed_time (doublon d'un calcul deja fait dans kyc_form.py), get_select_index (jamais appelee), et refresh_data (dupliquee a l'identique dans Check_Up_Loans.py et loans_engine.py, jamais branchee a un bouton). Laisse de cote apply_ai_algorithms, detect_fraud_logic, is_closed et build_from_networkx -- a activer, pas a supprimer (suite dans un prochain commit). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>5b0dd39
-
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/loans_engine.py
Verified signaturec512fc7 -
Update src/modules/loans_engine.py
Verified signature370f33f
-
Update src/modules/loans_engine.py
Verified signature67f8b65 -
Update src/modules/loans_engine.py
Verified signaturec0518bd
-
Update src/modules/loans_engine.py
Verified signature2cfc5fa
-
Update src/modules/loans_engine.py
Verified signaturecfb225f
-
Update src/modules/loans_engine.py
Verified signature04cb7e8
-
Update src/modules/loans_engine.py
Verified signature86c16b7
-
Update src/modules/loans_engine.py
Verified signaturedf3af06
-
Update src/modules/loans_engine.py
Verified signature018a533
-
Update src/modules/loans_engine.py
Verified signaturee3f7023 -
Update src/modules/loans_engine.py
Verified signature8545c0a -
Update src/modules/loans_engine.py
Verified signature3660169
-
Update src/modules/loans_engine.py
Verified signature81a6bde
-
Update src/modules/loans_engine.py
Verified signatured06b542 -
Update src/modules/loans_engine.py
Verified signatureb806625 -
Update src/modules/loans_engine.py
Verified signaturec274b10 -
Update src/modules/loans_engine.py
Verified signature92e65a1 -
Update src/modules/loans_engine.py
Verified signature4aab82b -
Update src/modules/loans_engine.py
Verified signature543681b
-
Update src/modules/loans_engine.py
Verified signatured0ee815 -
Update src/modules/loans_engine.py
Verified signaturef3cf3d4 -
Update src/modules/loans_engine.py
Verified signature738bd81 -
Update src/modules/loans_engine.py
Verified signaturecee9e01 -
Update src/modules/loans_engine.py
Verified signature501b6ac -
Update src/modules/loans_engine.py
Verified signature84d518b -
Update src/modules/loans_engine.py
Verified signaturefc338ef -
Update src/modules/loans_engine.py
Verified signature806f2d0 -
Update src/modules/loans_engine.py
Verified signature3aa0c78 -
Update src/modules/loans_engine.py
Verified signature945582b -
Update src/modules/loans_engine.py
Verified signatured26530b -
Update src/modules/loans_engine.py
Verified signature706ece4 -
Update src/modules/loans_engine.py
Verified signature6bc0383 -
Update src/modules/loans_engine.py
Verified signature4f2ce17 -
Update src/modules/loans_engine.py
Verified signatureedbcbe3 -
Update src/modules/loans_engine.py
Verified signatureee2d1bd
-
Update src/modules/loans_engine.py
Verified signature03fd86e -
Update src/modules/loans_engine.py
Verified signature4be1152 -
Update src/modules/loans_engine.py
Verified signatureb0275c0