klydekushy commited on
Commit
2f88465
·
verified ·
1 Parent(s): 4aab82b

Update src/Analytics/AnalyseFinance.py

Browse files
Files changed (1) hide show
  1. src/Analytics/AnalyseFinance.py +22 -6
src/Analytics/AnalyseFinance.py CHANGED
@@ -18,6 +18,22 @@ SEUILS = {
18
  "duree_courte_semaines": 6
19
  }
20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  # ============================================================================
22
  # LOGIQUE D'AMORTISSEMENT
23
  # ============================================================================
@@ -100,8 +116,8 @@ def generer_tableau_amortissement(type_code, montant, taux_hebdo, duree_semaines
100
  # ============================================================================
101
  def analyser_capacite(type_code, montant, taux_hebdo, duree_semaines, montant_versement, nb_versements, revenus_mensuels, charges_mensuelles, montant_total=0, cout_credit=0):
102
 
103
- revenus_mensuels = float(revenus_mensuels)
104
- charges_mensuelles = float(charges_mensuelles)
105
 
106
  # --- LOGIQUE IN FINE ---
107
  if type_code == "IN_FINE":
@@ -162,10 +178,10 @@ def analyser_capacite(type_code, montant, taux_hebdo, duree_semaines, montant_ve
162
  msg += f"\n⚠️ ATTENTION : Le capital final ({int(montant):,} XOF) nécessiterait une épargne de {int(epargne_necessaire):,} XOF/mois."
163
 
164
  details = f"""**Analyse Mensuel - Intérêts**
165
- Taux endettement (intérêts seuls): {taux_endettement:.1f}%
166
- Intérêts mensuels: {int(interet_mensuel):,} XOF
167
- Reste à vivre: {int(reste_vivre):,} XOF
168
- Capital final à prévoir: {int(montant):,} XOF au mois {duree_mois}"""
169
 
170
  return {"statut": statut, "couleur": couleur, "message": msg, "details": details,
171
  "metriques": {"taux_endettement": taux_endettement, "reste_vivre": reste_vivre}}
 
18
  "duree_courte_semaines": 6
19
  }
20
 
21
+
22
+ # ============================================================================
23
+ # fonction de nettoyage robuste
24
+ # ============================================================================
25
+ # À AJOUTER APRÈS LES IMPORTS (ligne ~8)
26
+ def clean_currency_value(val):
27
+ """Convertit une valeur monétaire (string ou float) en float propre"""
28
+ try:
29
+ if isinstance(val, (int, float)):
30
+ return float(val)
31
+ # Nettoyage des strings: "100,000 XOF" → 100000.0
32
+ cleaned = str(val).upper().replace("XOF", "").replace("FCFA", "").replace(" ", "").replace(",", "")
33
+ return float(cleaned) if cleaned else 0.0
34
+ except (ValueError, AttributeError):
35
+ return 0.0
36
+
37
  # ============================================================================
38
  # LOGIQUE D'AMORTISSEMENT
39
  # ============================================================================
 
116
  # ============================================================================
117
  def analyser_capacite(type_code, montant, taux_hebdo, duree_semaines, montant_versement, nb_versements, revenus_mensuels, charges_mensuelles, montant_total=0, cout_credit=0):
118
 
119
+ revenus_mensuels = clean_currency_value(revenus_mensuels)
120
+ charges_mensuelles = clean_currency_value(charges_mensuelles)
121
 
122
  # --- LOGIQUE IN FINE ---
123
  if type_code == "IN_FINE":
 
178
  msg += f"\n⚠️ ATTENTION : Le capital final ({int(montant):,} XOF) nécessiterait une épargne de {int(epargne_necessaire):,} XOF/mois."
179
 
180
  details = f"""**Analyse Mensuel - Intérêts**
181
+ Taux endettement (intérêts seuls): {taux_endettement:.1f}%
182
+ Intérêts mensuels: {int(interet_mensuel):,} XOF
183
+ Reste à vivre: {int(reste_vivre):,} XOF
184
+ Capital final à prévoir: {int(montant):,} XOF au mois {duree_mois}"""
185
 
186
  return {"statut": statut, "couleur": couleur, "message": msg, "details": details,
187
  "metriques": {"taux_endettement": taux_endettement, "reste_vivre": reste_vivre}}