Spaces:
Running
Running
Update src/Analytics/AnalyseFinance.py
Browse files
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 =
|
| 104 |
-
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}}
|