Isertion module financier
Build and Push Docker Image / build-and-push (push) Successful in 2m35s

This commit is contained in:
xavier committed 2026-08-29 07:50:32 +02:00
1 parent a2261ab8dd
commit b96d402ae9
5 files changed
+118 -14

No files matched your search

+85 -8
View File
@@ -1,10 +1,87 @@
# modules/export_utils.py
import os
import json
import pandas as pd
from datetime import datetime
from modules.logger import log_event
def generer_donnees_json(contenu):
"""Prépare la structure de données pour l'export JSON."""
return {
"app": "Aethas38 Core",
"timestamp": time.time() if 'time' in globals() else None,
"content": contenu
}
DOSSIER_FINANCE = "/DATA/AppData/MULTI-IA-AETHAS38/Finances"
FICHIER_AUDIT = os.path.join(DOSSIER_FINANCE, "aethas_financial_audit.json")
def initialiser_dossier_finance():
os.makedirs(DOSSIER_FINANCE, exist_ok=True)
if not os.path.exists(FICHIER_AUDIT):
with open(FICHIER_AUDIT, 'w', encoding='utf-8') as f:
json.dump([], f)
def generer_export_comptable():
"""
Génère un Livre des Recettes Excel conforme URSSAF via Pandas.
Idéal pour le calcul direct du Chiffre d'Affaires à déclarer.
"""
initialiser_dossier_finance()
chemin_export = os.path.join(DOSSIER_FINANCE, f"Livre_Recettes_URSSAF_{datetime.now().strftime('%Y_%m')}.xlsx")
try:
with open(FICHIER_AUDIT, 'r', encoding='utf-8') as f:
donnees_brutes = json.load(f)
except Exception:
donnees_brutes = []
# Formatage strict pour la comptabilité d'auto-entrepreneur
lignes_comptables = []
if not donnees_brutes:
# Génération d'une ligne d'exemple légale si le fichier est vide
lignes_comptables.append({
"Date d'encaissement": datetime.now().strftime("%Y-%m-%d"),
"Référence (N° Facture / Chat ID)": "EXEMPLE-001",
"Client (Utilisateur)": "Exemple_Client",
"Nature de la prestation": "Services techniques IA (Prestation de services)",
"Coût API Brut HT (€)": 0.05,
"Marge Commerciale (€)": 0.45,
"Montant encaissé HT (€)": 0.50
})
else:
for transaction in donnees_brutes:
cout_brut = float(transaction.get("cout_api", 0.0))
montant_facture = float(transaction.get("montant_facture", 0.0))
lignes_comptables.append({
"Date d'encaissement": transaction.get("date", datetime.now().strftime("%Y-%m-%d")),
"Référence (N° Facture / Chat ID)": transaction.get("id", "N/A"),
"Client (Utilisateur)": transaction.get("utilisateur", "Inconnu"),
"Nature de la prestation": f"Requête IA - {transaction.get('modele', 'Multi-modèle')}",
"Coût API Brut HT (€)": cout_brut,
"Marge Commerciale (€)": montant_facture - cout_brut,
"Montant encaissé HT (€)": montant_facture
})
# Création du DataFrame Pandas
df = pd.DataFrame(lignes_comptables)
# Calcul des totaux pour le TCD
total_ca = df["Montant encaissé HT (€)"].sum()
total_marge = df["Marge Commerciale (€)"].sum()
# Création du fichier Excel avec onglets multiples via Openpyxl
with pd.ExcelWriter(chemin_export, engine='openpyxl') as writer:
df.to_excel(writer, sheet_name="Livre des Recettes", index=False)
# Onglet de synthèse analytique
resume = pd.DataFrame({
"Indicateur Financier": ["Chiffre d'Affaires Total (Déclaration URSSAF)", "Coûts d'Infrastructure (API)", "Bénéfice Net Estimé"],
"Montant (€)": [total_ca, df["Coût API Brut HT (€)"].sum(), total_marge]
})
resume.to_excel(writer, sheet_name="Synthèse_Fiscale", index=False)
# Accès aux feuilles pour le formatage esthétique
workbook = writer.book
worksheet = writer.sheets["Livre des Recettes"]
worksheet.insert_rows(1)
worksheet.cell(row=1, column=1, value="AETHAS38 - Siège : Charvieu-Chavagneux (38230) - Registre des recettes")
worksheet.column_dimensions['A'].width = 18
worksheet.column_dimensions['C'].width = 20
worksheet.column_dimensions['D'].width = 45
log_event("INFO", "FINANCE", f"Export comptable généré : {chemin_export}")
return chemin_export
+2
View File
@@ -1,4 +1,5 @@
import os
from tkinter import Button
import requests
from fasthtml.common import *
from modules.database import load_history
@@ -153,6 +154,7 @@ def render_main_page(chat_id, utilisateur_nom="xavier", role="Super Admin"):
A("+ Nouvelle discussion", href="/new_chat", cls="new-chat-btn"),
A("💾 Exporter JSON", href="/export_json", target="_blank", cls="export-btn"),
Button("📚 Gestion RAG", hx_get="/admin/rag_modal", hx_target="body", hx_swap="beforeend", cls="export-btn", style="background-color: #2196f3; color: white; border-color: #2196f3; margin-top: 5px; cursor: pointer;") if role.lower() in ["super admin", "admin"] else "",
A("📊 Export URSSAF (Excel)", href="/admin/export_comptable", cls="export-btn", style="background-color: #4caf50; color: white; border-color: #4caf50; margin-top: 5px; text-decoration: none; text-align: center;") if role.lower() in ["super admin", "admin"] else "",
A("🚪 Déconnexion", href="/logout", cls="export-btn", style="background-color: #8b0000; color: white; border-color: #8b0000; margin-top: 5px;"),
cls="nav-buttons", style="display: flex; flex-direction: column; gap: 10px;"
), cls="sidebar-top"