Spaces:
Running
Running
Commit History
Today
-
Signatures: moins d'appels Google Sheets par etape Running
- _feuille garde l'onglet verifie sur le classeur (2 lectures en moins par appel) - lot_journal: les evenements d'une etape (identite, code, signature, contresignature, lancement) sont ecrits en une seule fois, chainage calcule sous verrou - duree de chaque etape dans les logs ([SIGNATURE] ...) - envoi groupe des liens de code: pause 2s -> 1s Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>52bb980 -
Signatures: bouton d'envoi à tous ceux sans code défini (lien valable inclus)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>0368c1b
2 days ago
-
fix(codes): envoi groupe ignore liens encore valables et codes bloques
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 -
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(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 -
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 -
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(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(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(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
-
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 -
feat(ui): cases carrees sur tous les st.radio, module Suppressions
- CSS radio : structure react-aria (stRadioOption / data-selected), remplace l'ancien [data-baseweb="radio"] inoperant en Streamlit 1.64 - maintien de session (fragment run_every 5 min) - module Suppressions (admin) et son journal, entree dans l'overlay orb Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>f7df762 -
fix(signature): journal chaine, lecture groupee et arret propre sur quota Sheets
- lot_envoi() : lit Clients_KYC/Garants_KYC une fois par envoi groupe et reutilise la feuille du journal (quota 429) - envoi groupe : arret propre sur APIError avec liste des prets restants - journal de signature chaine (verifier_journal), cache par classeur reinitialise entre tests Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>bbab97f -
fix(telemetrie): heure de Dakar (et non d'Abidjan) dans les libelles
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>4208fca -
chore(telemetrie): renommer le module Audit en Télémétrie
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>3caa1ab -
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(dashboard): bascule benefice encaisse / accorde
Bouton "Base du benefice" sur le Dashboard : Encaisse (interets + penalites, au mois du paiement, base de l'objectif) ou Accorde (cout du credit, au mois du deblocage). KPI, analyse mensuelle, repartition et contexte JASMINE suivent la base choisie. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>89d4159 -
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
15 days ago
-
feat(signature): contresignature du preteur (contrat et caution) avant activation
- Le preteur contresigne le dossier une fois client et garant signes (code par email, admin connecte) - Bloc preteur ajoute au contrat et a l'acte de caution ; reconnaissance de dette inchangee - Pret ACTIF seulement apres contresignature ; documents definitifs envoyes a chaque signataire - Onglet admin 'A contresigner' ; verification publique du sceau preteur - Mention 'loi ivoirienne' retiree du bandeau public Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>db7f3f2 -
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