Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

Demander à ChatGPT une analyse financière des comptes annuels

0000003308     -      22/10/2025

Nous montrons ici comment interagir avec ChatGPT pour obtenir une analyse financière sur base des comptes annuels au format BNB - Légal. Ceci requiert l'installation du plugin MercatorAI.OpenAI et ne fonctionne qu'avec une version Core de Mercator. (Le code est toutefois compilable dans une version classique).

Le code installe cet élément dans le menu contextuel :

Il permet de déclencher la demande d'analyse. Une fenêtre de chat s'ouvre. Il est possible de poursuivre la conversation en plaçant un message dans la partie inférieure de l'écran et en cliquant sur "Interroger".

Le code s'établit comme suit : 

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MercatorApi;
using MercatorExtensions;
using MercatorUi;
using MercatorDatabase;
using System.Windows.Forms;

// <CompileWithRoslyn />

namespace Main
{
    public class Customizer : MercatorUi.ICustomizers.IExec
    {
        public void Main(MercatorUi.ICustomizers.ExecAction action)
        {
            if (action == MercatorUi.ICustomizers.ExecAction.DossierOpen)
            {
                Globals.Main.BaseFormCreating += Main_BaseFormCreating;
            }
            else if (action == MercatorUi.ICustomizers.ExecAction.DossierClose)
            {
                Globals.Main.BaseFormCreating -= Main_BaseFormCreating;
            }
        }

        void Main_BaseFormCreating(object sender, MercatorUi.Main.BaseFormCreatingEventArgs e)
        {
            if (e.Form is MercatorUi.Forms.Accounting.AccountingBilanForm accountingBilanForm)
            {
                ToolStripMenuItem mi_analysis = new ToolStripMenuItem(_Divers.Iif_langue(Globals.Langue, "Financiële Analyse", "Financial Analysis", "Financiële Analyse", "Analyse Financière"), GraphicKit.CurrentGraphicKit.Images.AI16,
                    (s, e2) =>
                    {
                        string title = ((ToolStripMenuItem)s).Text + " " + accountingBilanForm.Tree.Columns[2].Text + (accountingBilanForm.WithYear2 ? "-" + accountingBilanForm.Tree.Columns[3].Text : "");

                        string legislat;
                        if (Globals.Params["LEGISLAT"] == "LU")
                            legislat = _Divers.Iif_langue(accountingBilanForm.Langue, "luxemburgischem", "Luxembourg", "Luxemburgse", "luxembourgeoise");
                        else
                            legislat = _Divers.Iif_langue(accountingBilanForm.Langue, "belgischem", "Belgian", "Belgische", "belge");

                        string systemMessage = _Divers.Iif_langue(accountingBilanForm.Langue,
                            $"Du bist ein Experte für Finanzanalyse und analysierst die Bilanz gemäß {legislat} Recht, wie unten dargestellt.\n",
                            $"You are an expert in financial analysis and you are analyzing the balance sheet under {legislat} legislation as shown below.\n",
                            $"Je bent een expert in financiële analyse en je analyseert de balans volgens de {legislat} wetgeving zoals hieronder weergegeven.\n",
                            $"Tu es un expert en analyse financière et tu analyses le bilan en législation {legislat} repris ci-dessous.\n")
                            + accountingBilanForm.Text + "\n";
                        if (accountingBilanForm.WithYear2)
                            systemMessage += _Divers.Iif_langue(accountingBilanForm.Langue,
                                "Tot1 enthält den Saldo des Bilanzjahres. Tot2 enthält den Saldo des Vorjahres.\n",
                                "Tot1 contains the balance for the year of the balance sheet. Tot2 contains the balance for the previous year.\n",
                                "Tot1 bevat het saldo van het boekjaar van de balans. Tot2 bevat het saldo van het voorgaande jaar.\n",
                                "Tot1 contient le solde de l'année du bilan. Tot2 contient le solde de l'année précédente.\n");
                        else
                            systemMessage += _Divers.Iif_langue(accountingBilanForm.Langue,
                                "Tot1 enthält den Saldo des Bilanzjahres.\n",
                                "Tot1 contains the balance for the year of the balance sheet.\n",
                                "Tot1 bevat het saldo van het boekjaar van de balans.\n",
                                "Tot1 contient le solde de l'année du bilan.\n");
                        systemMessage += _Divers.Iif_langue(accountingBilanForm.Langue,
                            "Sie antworten AUSSCHLIESSLICH in Markdown.",
                            "You answer EXCLUSIVELY in Markdown.",
                            "Je antwoordt UITSLUITEND in Markdown.",
                            "Tu réponds EXCLUSIVEMENT en Markdown.");

                        systemMessage += "\n\n" + accountingBilanForm.JsonData;

                        string question = _Divers.Iif_langue(accountingBilanForm.Langue,
                            "Kannst du die Analyse dieser Bilanz mit den üblichen Kennzahlen durchführen und mich über eventuelle Auffälligkeiten informieren, die du feststellen würdest?",
                            "Can you perform the analysis of this balance sheet using the usual ratios and inform me of any anomalies you might detect?",
                            "Kan je de analyse van deze balans uitvoeren met de gebruikelijke ratio’s en me informeren over eventuele anomalieën die je zou detecteren?",
                            "Peux-tu effectuer l'analyse de ce bilan avec les ratios habituels et m'informer des anomalies que tu détecterais.");

                        MercatorAI.FactoryOpenAI.ChatOptions chatOptions = new MercatorAI.FactoryOpenAI.ChatOptions
                        {
                            Temperature = 0.2f, // autoriser une légère variation
                            TopP = 1.0f
                        };

                        MercatorUi.Forms.Other.ChatForm.SimpleOpenAiChat("gpt-4o", title, systemMessage, question, autoAskFirstQuestion: false, chatOptions: chatOptions, userControl: null, responseUpdater: null, standardStreamingAction: MercatorUi.Forms.Other.ChatForm.StandardStreamingActionEnum.RawStreamShow);
                    });
                EventHandler fullInitializedHandler = null;
                fullInitializedHandler = (s, e2) =>
                {
                    accountingBilanForm.FullInitialized -= fullInitializedHandler;
                    if (accountingBilanForm.Type == MercatorUi.Forms.Accounting.AccountingBilanForm.BilanType.Legal)
                        accountingBilanForm.Tree.ContextMenuStrip.Items.AddRange(new ToolStripItem[] { new ToolStripSeparator(), mi_analysis });
                };
                accountingBilanForm.FullInitialized += fullInitializedHandler;
            }
        }
    }
}

 

 Les informations sont envoyées à un tiers (OpenAI). Il ne faut donc en aucun cas transmettre des données revêtant un caractère confidentiel. 

L'analyse et/ou suggestions proposées par ce code sont générées automatiquement à l’aide d’un modèle d’intelligence artificielle (IA). Bien que conçu pour fournir des réponses utiles et pertinentes, celles-ci peuvent être incomplètes, inexactes, partiellement ou totalement.



Cookies fonctionnels : Cookies nécessaires à l'utilisation du site et cookies de préférence. Ils ne contiennent aucune donnée à caractère personnel. (En savoir plus)

Cookies statistiques : Captation de statistiques liées aux comportements des internautes. (En savoir plus)

Cookies marketing : Pour effectuer le suivi des visiteurs au travers des sites web, à des fins publicitaires. (En savoir plus)