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
10 days ago
-
feat(exercice): base du benefice globale (encaisse / accorde)
Le bouton "Base du benefice" passe dans la barre laterale et pilote tous les modules : - Dashboard : KPI, analyse mensuelle, repartition. - Optimizer : realise selon la base ; interets restant a echoir ajoutes seulement en base encaissee. - Digital Twin : projection du benefice jusqu'au 31/12 de l'exercice (realise + part interets/penalites simulee) au lieu de la tresorerie totale sur 52 semaines ; base accordee = realise. - Rapports IA et JASMINE : base retenue dans les donnees et la consigne. Echeancier contractuel : vraies dates (Dates_Versements) si renseignees. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>2d6c8b9 -
feat(exercice): separation de toute l'application par annee civile
- core/exercice.py : source unique (lecture des dates FR/ISO, bornes, selecteur EXERCICE de la barre laterale, regle A : chaque flux dans l'annee de sa propre date, echeancier contractuel, synthese par exercice). - Objectifs de benefice par exercice (2026 = 2,2 M, 2027 = 3,5 M XOF, annees futures = dernier objectif connu), editables par annee. - Dashboard, Optimizer, rapports IA, JASMINE, Digital Twin : chiffres de l'exercice choisi + comparaison N-1 ; benefice = interets + penalites encaisses dans l'annee. - IA : consigne d'exercice dans tous les prompts. ML : variable Annee_Deblocage + erreur hors echantillon par exercice. - Correctif : "2026-03-01" n'est plus lu comme le 3 janvier. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>631cd58
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
24 days ago
-
Rendre le taux de marge de l'Optimizer éditable via Règles Métier
- Ajouter la règle 'Regle_Plafond_Marge_Optimizer' dans vortex_params.py (défaut: 1.0%) - Modifier jasmine_optimizer.py pour lire le plafond depuis les règles métier au lieu du hardcode - Ajouter l'UI dans regles_metier.py pour éditer et historiser les changements - Utiliser le plafond configurable dans les scénarios, diagnostics et rapport IA - Le taux est modifiable par pas de 0.1% sans redéploiement96cc64a
28 days ago
-
Fix optimizer margin history selection
a7e8e94 -
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
-
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
-
Centralise les appels IA et ajoute des outils de calcul agentiques a JASMINE
Remplace 7 points d'appel Gemini/Groq duppliques (jasmine_agent, AI_Reports, digital_twin, jasmine_optimizer, document_validator, kyc_form, client_simulator) par un client LLM unique (src/core/llm_client.py) avec une seule cascade de repli texte-only. Migre du SDK google-generativeai (deprecie par Google) vers le nouveau SDK officiel google-genai. Ajoute 3 outils de calcul partages (src/agent/calc_tools.py) - previsions de tresorerie, simulation de portefeuille, prediction de taux - branches sur l'agent JASMINE global (Ontology) et corrige au passage l'outil highlight_node qui existait sans etre annonce au LLM. Ajoute un widget JASMINE leger (src/modules/jasmine_widget.py), sans moteur RDF/SPARQL, integre sur Repayments, Digital Twin, Optimizer et le simulateur client public - scope aux donnees deja chargees par la page. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>e3e63b6 -
Centralise l'objectif annuel et fiabilise le Forecasting
Ajoute vortex_params.py comme source de verite unique pour l'objectif annuel de profit (remplace les deux valeurs codees en dur et desynchronisees dans jasmine_optimizer.py et AI_Reports.py), le rend editable dans l'Optimizer, corrige le filtrage YTD par annee, et branche une comparaison optionnelle avec la tendance XGBoost. Ajoute une projection annuelle vs objectif dans le Digital Twin. Corrige aussi le reporting Forecasting qui restait vide : AI_Reports ne lisait jamais l'onglet Forecasting, independamment de toute synchronisation, et celle-ci n'etait declenchee que manuellement. Ajoute une synchronisation automatique si les donnees sont absentes ou perimees (+12h). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>4f24ce4
-
Update src/modules/jasmine_optimizer.py
Verified signature1a94a47 -
Update src/modules/jasmine_optimizer.py
Verified signatureb146a13 -
Update src/modules/jasmine_optimizer.py
Verified signaturea868984
-
Update src/modules/jasmine_optimizer.py
Verified signature18d7f17
-
Update src/modules/jasmine_optimizer.py
Verified signature6ed54a0 -
Update src/modules/jasmine_optimizer.py
Verified signaturec69ef26 -
Update src/modules/jasmine_optimizer.py
Verified signature0ea5649 -
Update src/modules/jasmine_optimizer.py
Verified signature531ec47 -
Rename src/modules/JasmineOptimizer.py to src/modules/jasmine_optimizer.py
Verified signatured63d8d4