using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MercatorApi;
using MercatorUi;
using MercatorExtensions;
namespace MyAssembly
{
public static class ChatGPT
{
public static void CheckSuppliers()
{
MercatorAI.FactoryOpenAI factory = new MercatorAI.FactoryOpenAI();
MercatorAI.Interfaces.IOpenAiChat openAiChat = factory.CreateOpenAiChat("gpt -4o", out string error);
if (!string.IsNullOrEmpty(error))
{
Dialogs.Stop("Kan de OpenAI-chat niet initialiseren: " + error);
return;
}
string reqSql = @"select fou.f_id as idfournisseur,lignes_c.journal,lignes_c.piece,(case when lignes_c.tot<0 then -lignes_c.tot else 0 end) as debit,(case when lignes_c.tot>0 then lignes_c.tot else 0 end) as credit,lignes_c.date,case when echeance> '19000101' then lignes_c.echeance else null end as echeance,lignes_c.commentair as info
from LIGNES_C
inner join FOU on lignes_c.id_fou=fou.f_id
where (lignes_c.lettrage <= 0) and (lignes_c.type_ligne >= 0)
order by fou.f_id,lignes_c.date".UnIndent(9);
MercatorUi.Wait.WaitStatic.WaitWindow(Api.Iif_langue(Globals.Langue, IifLangueEnum.SeekingData));
List<BookingDescriptor> bookings = Api.Zselect<BookingDescriptor>(Globals.RepData, reqSql);
if (bookings == null)
{
MercatorUi.Wait.WaitStatic.WaitClear();
return;
}
string question = @"Duid eventuele mogelijke anomalieën aan, zoals:
- niet-afgepunte bewegingen die wel afgepunt zouden kunnen worden (identieke of gelijkaardige bedragen, saldo van meerdere bewegingen is nul of bijna nul, ...),
- betalingen zonder bijbehorende factuur,
- facturen zonder betaling, met uitzondering van diegene die nog niet vervallen zijn,
- andere anomalieën die je opmerkt.
De betalingen staan in de dagboeken ING en VBDA. ODV is een dagboek voor correctieve diverse boekingen.".UnIndent(8);
string systemMessage = "Je bent een expert-boekhoudassistent. Je antwoordt UITSLUITEND in Markdown. Hier is een lijst van openstaande leveranciersboekhoudkundige posten op heden in JSON-formaat.\n" + Api.JsonConvertSerializeObject(bookings);
MercatorAI.FactoryOpenAI.ChatOptions chatOptions = new MercatorAI.FactoryOpenAI.ChatOptions
{
Temperature = 0.2f, // lichte variatie toestaan
TopP = 1.0f
};
MercatorUi.Forms.Other.ChatForm.SimpleOpenAiChat("gpt-4o", "Analyseer openstaande leveranciersposten", systemMessage, question, autoAskFirstQuestion: false, chatOptions: chatOptions, userControl: null, responseUpdater: null, standardStreamingAction: MercatorUi.Forms.Other.ChatForm.StandardStreamingActionEnum.RawStreamShow);
}
public class BookingDescriptor
{
public string IdFournisseur { get; set; }
public string Journal { get; set; }
public Int64 Piece { get; set; }
public decimal Debit { get; set; }
public decimal Credit { get; set; }
public DateTime Date { get; set; }
public DateTime? Echeance { get; set; }
public string Info { get; set; }
}
}
}