Spaces:
Running
Running
Commit History
2 days ago
-
fix(codes): envoi groupe ignore liens encore valables et codes bloques Running
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>3cd3b4d -
feat(signature): role Client/Garant affiche sur la page et dans l'email du code de signature
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>31bb20d
3 days ago
-
JASMINE chat: control guides and what-if data on every chat page
Capture sidebar page controls (nav/theme/refresh excluded) and data_editor contents. Add guide_controles to Digital Twin, Loans Engine, Repayments, Request Loans, Check Up Loans, Forecasting, Dashboard, USIS and Logistique map: what each control changes, its direction of effect and which buttons write for real. Dashboard also passes the profit under both bases. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>2308a61 -
JASMINE chat sees page controls and answers what-if questions
Capture checkbox/toggle/radio/selectbox/slider/number/date/button labels, options, help and current state (never password fields). System prompt now asks the model to reason about controls from guide_page and formulas instead of answering "no information". Optimizer: pass both trend scenarios (historical vs XGBoost) with the resulting required margin, plus a guide for the XGBoost checkbox. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>4edda61 -
JASMINE chat sees all on-screen text on every page
The chat only received chart data, so it could not answer about recommendations, metrics, alerts or tables shown on a page (Optimizer XGBoost trend case). graphiques_contexte now also captures markdown, caption, titles, info/success/warning/error, metric and dataframe/table, patched on DeltaGenerator so col.* and container.* calls are covered too, and the sidebar is ignored. Charts moved to the same class-level patch (the theme's st.plotly_chart override bypassed the old st-level wrapper). The widget passes the result as texte_affiche_a_l_ecran. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>b10db6c -
Theme BLEU/NOIR selectable on every public route
The BLEU/NOIR toggle only lived in the login and admin sidebar, so clients on the public routes (simulateur, signature, verification, onboarding) were stuck on the default NOIR theme. The toggle now renders once, before the routes. The choice stays a per-browser cookie, so other clients and the admin are unaffected. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>7a522b9 -
fix(signature): mention guidee pas a pas, role client/garant affiche
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>0ebd505
4 days ago
-
perf(simulateur): un seul controle Jev, calculs en parallele, soumission en une lecture et email en arriere-plan
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>4e0f37b -
perf(signature): cache de la demande par session, alerte admin a contresigner en arriere-plan
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>71c4066 -
perf(demarrage,kyc): Docling paresseux, modules admin a la demande, analyse KYC en parallele
- docling importe seulement a l'analyse ; prechauffage Docling/CLIP en arriere-plan - modules admin importes apres connexion (_module_admin) - documents KYC analyses en parallele (3 max), Docling/CLIP serialises par verrou Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>05de7d4 -
feat(sim_gate): lien d'inscription inclus dans l'email d'acces si profil inconnu
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>867367d -
feat(signature): code de signature personnel a 4 chiffres
Lien de definition envoye a la validation de l'onboarding et depuis l'onglet admin Codes de signature. Remplace l'OTP email a la signature (repli OTP si pas de code). 3 erreurs -> code bloque, deblocage admin. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>fdeb873 -
fix(repayments): cartes penalites alignees, ecart avec boutons, slider sans chevauchement
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>d976ee4 -
feat(rappels): echeances EN_RETARD relancees deux fois par jour (12h et 18h), client + garant
Second passage a HEURE_ENVOI_2 reserve aux EN_RETARD ; ecart minimum de 4 h entre deux rappels de la meme echeance ; CRITIQUE reste a un rappel par jour. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>ac7f1c9 -
fix(repayments): slider taux dans la carte option 3, boutons alignes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>969d390 -
feat(rappels): export CSV et Excel de la selection du journal d'audit des rappels
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>e506d19
6 days ago
-
feat(simulateur): score de remboursement sans Jev, selon la qualite du modele
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 -
feat(jasmine): chat et contenu de la carte Logistique (Mapbox) transmis au chat
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>57c9004 -
feat(jasmine): le chat lit tous les graphiques de la page (Plotly et natifs), par module
Les graphiques affiches sont captes (core/graphiques_contexte.py) et transmis au chat de leur page via graphiques_affiches ; le chat lit ceux du run precedent. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>2ce0542 -
fix(jasmine): le chat voit les donnees des graphiques C et H (residus vs predits, stats, historique)
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>373f99b
7 days ago
-
fix(signature): localisation facultative — le code email reste saisissable sans position
Le lieu non communique est inscrit a la place (refusee / non recue) avec l'IP. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>06df37a -
feat(jasmine): chat JASMINE sur la page prevision, avant la section A — Signal operationnel
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>b3acfb7 -
fix(ui): legende evolution reelle suit le theme (Ambre en noir)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>c928c1f -
fix(sheets): colonnes sans titre ne bloquent plus get_all_records
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>8caf834 -
docs(onboarding): mail insiste sur localisation obligatoire
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>bb9984f -
fix(kyc): geolocalisation facultative si refusee par le navigateur
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>8beadd4 -
feat(signature): apercu des contrats dans la page, plus de PDF dans les emails
Lien de signature et confirmation sans piece jointe ; apercu par page (client et preteur), telechargement immediat apres signature, PDF definitifs envoyes a la contresignature. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>966c823 -
fix(logistique): lecture des feuilles tolerante aux onglets absents, quota remonte au bandeau 429
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>5ba382e
8 days ago
-
feat(logistique): carte de renseignement — liens adresses/IP/tel/email/piece entre clients et garants
- core/liens_logistique.py : croisement pur (adresses normalisees + GPS, IP publiques, telephones, emails, pieces, employeurs, garants). IP d'audit limitees aux sessions publiques. - modules/carte_html.py : carte plein ecran noire, clic = dossier du lieu + liens, recherche, alertes. - map_dashboard : retrait du bloc ANSD (donnees externes) et des KPI codes en dur. - sheets_quota : invalidation par onglet (l'audit ne vide plus les autres feuilles). Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>1030d8c
9 days ago
-
feat(tarif): forfait duree minimale = plancher, taux machine si plus eleve
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>8661ddc -
fix(demandes): montants lus a 0 quand le Sheet fournit une espace insecable
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>6ff8ef6 -
feat(ui): base du benefice Accordé et theme Gotham par defaut
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>6cefb3d -
perf(sheets): bouclier anti-429 global (cache GET gspread, invalidation sur ecriture, secours perime, reessais)
Cache au niveau HTTPClient.request : valeurs 60 s, metadonnees 10 min, Drive 1 h, dedoublonnage des lectures concurrentes, disjoncteur + cache perime sur 429. Bouton ACTUALISER LES DONNEES, lecture fraiche pour la generation d'ID. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>dd08ad5 -
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 -
feat(signature): localisation obligatoire pour signer et contresigner
- Etape 3 de la page de signature : lieu detecte (ville, quartier) affiche avant le formulaire ; sans position, pas de formulaire. - Apres un refus : case obligatoire qui relance la demande au navigateur (audit_log.redemander_gps, nouvelle cle du composant) ; aide pour reactiver une localisation bloquee. - signer/contresigner(exiger_position=True) refusent une position vide, refusee ou non recue (verification cote service, pas seulement dans l'interface). - Contresignature du preteur : meme localisation (Localisation_Preteur, GPS_Preteur) imprimee dans son bloc ; module partage localisation_ui. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>cfbb492 -
feat(ui): theme NOIR "poste de commandement" (Gotham) + style tactique partout
- core/theme.py : theme BLEU (defaut, inchange) et NOIR ; interrupteur "MODE NOIR · GOTHAM" dans la barre laterale (connexion et admin), choix memorise par navigateur (cookie 1 an) - NOIR = table de correspondance BLEU -> NOIR appliquee au rendu de tout le HTML/CSS injecte (st.markdown, st.html, components.html) et des figures Plotly : fonds noirs, gris neutres, accent ambre, etats desatures ; une seule source de style pour les deux themes - composants natifs habilles dans les deux themes : fonds, champs, listes, boutons, onglets, expanders, metriques, code, progression, chat, barres de defilement - alertes encapsulees en bandeau tactique : CONFIRMATION / INFORMATION / AVERTISSEMENT / ALERTE / EXCEPTION SYSTEME (liserai de couleur, etiquette), toasts au meme style - NOIR : titres fins en capitales espacees (style mission suite) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>4aa6677 -
feat(signature): localisation (ville, quartier) dans le bloc de signature
- GPS du navigateur reutilise (audit_log) : geocodage inverse Nominatim en "Ville, Quartier" ; refus ou absence = mention explicite. - Ligne "Localisation (GPS)" dans le contrat, IP conservee a cote ; absente des signatures anterieures (PDF identiques octet pour octet). - Signatures_Contrats : Localisation_Signature et GPS_Signature (coordonnees brutes + precision, jamais imprimees) ; journal de signature enrichi. - Page de signature : information sur l'enregistrement de la position. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>3f6c2b9
10 days ago
-
feat(erreurs): incidents techniques en bloc Gotham explique par l'IA + Telemetrie
- core/incidents.py : bloc sobre (bleu-gris, jamais rouge) avec DIAGNOSTIC et ACTION en une phrase chacune (call_llm, repli sur regles locales), fleche "Journal technique" avec les lignes de log en texte simple (type, message, traceback) - chaque incident part dans la Telemetrie (ERREUR / INCIDENT) avec ses valeurs : type, message, contexte, traceback, diagnostic, action, analyse ; dedoublonne 60 s - appels IA bornes : cache par signature (24 h), 15/heure, 15 s au total ; emails, numeros et jetons masques avant envoi, traceback jamais envoyee - branche sur : exceptions non gerees d'un module admin, st.error technique (pas les consignes de saisie), afficher_erreur_sheets ; le public ne voit jamais le detail - tests : aucun appel IA reel (garde-fou conftest), un test lent ne bloque plus la suite Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>001eb74 -
feat(ui): bandeau jaune 429 partout dans l'application
- core.errors.est_quota() : detecte [429], code 429, Quota exceeded, RESOURCE_EXHAUSTED, Too Many Requests, rate limit (sans faux positif sur un nombre comme 1 429 000) - core.errors.installer_bandeau_429() : tout st.error / st.warning (sidebar, container...) dont le message est un quota s'affiche en bandeau jaune explicatif au lieu d'un cadre rouge (texte Google Sheets ou service externe selon le message) - bandeau unique partage avec afficher_erreur_sheets ; gestionnaire global du module utilise la meme detection Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>a62a48f -
feat(signature): faire signer tous les prets en cours, avec ou sans remboursement
- lister_prets_a_signer : inclut les prets avec remboursements (colonne Remboursements), exclut seulement ceux deja signes par toutes les parties. - Un pret avec remboursements reste ACTIF pendant l'attente de signature (journal PRET_RESTE_ACTIF) ; sans remboursement il passe EN_ATTENTE_SIGNATURE. - Onglet "Prets a faire signer" : case "Tout selectionner". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>bc03a3d -
feat(signature): suivi d'ouverture des emails de lien de signature
- Les emails de lien (et rappels) portent le tag Brevo vortex-signature et sont enregistres dans Suivi_Emails (Type=SIGNATURE, ID_Signature, ID_Pret). - Onglet Signatures > Ouvertures : liens envoyes / ouverts / signes, delai entre premiere ouverture et signature, filtres. - Plus de copie cachee admin sur le lien (son ouverture fausserait le suivi). - envoyer_email accepte tags et meta (message_id Brevo). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>c44d4c8
12 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 -
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 -
feat(signature): mention manuscrite "Bon pour..." saisie par le debiteur
- reconnaissance de dette : montant en toutes lettres (snapshots v2), mention recopiee par le signataire, verifiee avant l'OTP, stockee (Mention_Manuscrite) et imprimee - echeancier du contrat repris tel quel des donnees du pret (recalcul en controle seulement) - mention bornee a 300 caracteres (texte public) Travail d'une autre session, relu et teste avant commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>6122be7 -
feat(auth): cookie "Rester connecte" (survit aux redeploiements)
- jeton signe HMAC (SESSION_SECRET, sinon cle derivee de SIGNATURE_SECRET), 30 jours, renouvele a l'usage ; aucun etat en memoire, donc valable apres un push - invalide si mot de passe change, compte supprime, ou deconnexion (hash du jeton inscrit dans la feuille Sessions_Revoquees, cookie efface) - role et modules relus a chaque restauration - case "Rester connecte sur cet appareil" (cochee par defaut) a l'ecran de connexion Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>5f4c0ba -
feat(signature): onglet Actions, plusieurs demandes affichees en meme temps
Selection multiple : une carte par demande, avec ses propres boutons. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>0a12997
13 days ago
-
fix(ui): bandeau explicite au lieu de la traceback sur quota Sheets (429)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>b6cc722 -
feat(signature): email au signataire quand sa demande est annulee
- annulation par l'admin : email "lien annule, ne l'utilisez plus" (journal ANNULATION_NOTIFIEE) - nouveau lien a la meme adresse : le mail du nouveau lien annonce que l'ancien est annule - nouveau lien a une adresse corrigee : l'ancienne adresse recoit l'email d'annulation - ecran admin : confirme l'envoi ou signale l'echec de l'email d'annulation Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>103bca0
14 days ago
-
feat(ontology): module serieux (vue 360, fraude, coherence, terminal IA fiable)
Exactitude - core/kg_data.py : une ligne par pret (Prets_Master + derniere version Prets_Update), classes canoniques (Prêt = Pret), ID_Officiel n'est plus classe "Officiel", identifiants normalises (telephone, email, piece) - montant_net = Montant_Total de la version courante (plus le MAX de tout "montant") - qualite RDF sur toutes les classes : completude reelle + cardinalites - controles de coherence : references orphelines, doublons, chaine des soldes (solde de depart = Montant_Total), statuts incoherents - fraude : identifiants partages entre personnes distinctes (client = garant compte pour une personne), auto-garantie, garantie croisee, garant multi-emprunteurs Securite - plus aucun HTML brut issu des donnees (chat en st.chat_message, infobulles neutralisees) - identifiants sensibles masques dans le RDF, l'export et tout ce qui part vers LLM/Jev - SPARQL de l'agent en lecture seule (SERVICE/INSERT/DROP... refuses) Robustesse - lecture groupee en cache (values_batch_get)…c6c39e9 -
fix(sidebar): base du benefice en liste deroulante, libelles courts
Le segmented_control coupait les libelles longs dans une sidebar etroite. Liste "Encaissé" / "Accordé", definition en legende. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>a798bd8