Przejdź do głównej zawartości

Jak automatycznie streścić dokument i zmapować dane na formularz w AMODIT?

Ten poradnik pokaże Ci, jak wykorzystać funkcje AMODIT do automatycznego streszczenia dokumentu (np. umowy najmu lokalu) i przeniesienia wybranych danych do pól formularza za pomocą pliku JSON.

Instrukcja Krok po Kroku:

  1. Przygotuj formularz w AMODIT

    • Utwórz lub edytuj formularz, dodając pola odpowiadające informacjom, które chcesz wyciągnąć z dokumentu (np. wartość czynszu, data zawarcia, nazwa najemcy).

ai_ocr_strszczn1-frmlrz

  1. Wskaż atrybuty do wyciągnięcia

    • Określ, które atrybuty z dokumentu mają zostać wyodrębnione (np. wartość czynszu, data zawarcia, nazwa najemcy).
    • W konfiguracji procesu lub reguły wskaż, że wynik ma być zwrócony w formacie JSON.

ai_ocr_strszczn2-fnkcj

  1. Przetwórz dokument za pomocą funkcji AI/OCR

    • Skorzystaj z funkcji komunikacji z silnikiem AI OCR (AmoditGetAttachmentContent()) lub czatem AI (AskAI()), aby automatycznie streścić dokument.
    • Upewnij się, że wynikowy plik zawiera interesujące Cię atrybuty w formacie JSON.

ai_ocr_strszczn3-wnk1

  1. Zmapuj dane z pliku JSON na pola formularza

    • Wykorzystaj funkcję np. JSONPath() lub pętlę foreachobject w regułach AMODIT, aby automatycznie przypisać wartości z pliku JSON do odpowiednich pól formularza.
    • Wybierz metodę, która jest dla Ciebie czytelniejsza i łatwiejsza w użyciu.

ai_ocr_strszczn4-jsnmp

Pełny kod przykładowej reguły wykonującej wszystkie powyższe operacje:

/* -- odczytanie zawartości umowy przez AI OCR -- */
if([Dokument]!="")
{
[Treść z AMODIT OCR]=AmoditGetAttachmentContent("Dokument");
}
else
{
ShowMessage(1,"Załącz jakiś dokument.");
}
if([Treść z AMODIT OCR]!="")
{
/* -- wyciągnięcie z treści umowy potrzebnych atrybutów za pomocą czata AI -- */
sPrompt="Pracujesz w kancelarii prawnej. Twoim zadaniem jest streszczenie przekazanej treści umowy. ";
sPrompt=sPrompt+"W szczególności podaj następujące atrybuty umowy: "+[Lista atrybutów];
sPrompt=sPrompt+" Dodatkowo kwoty podaj bez kodu waluty i w formacie programistycznym. Wszystkie zwracane daty prezentuj w formacie rrrr-mm-dd, gdzie ";
sPrompt=sPrompt+"rrrr - 4 cyfry roku, mm - 2 cyfry miesiąca i dd - 2 cyfry dnia.";
sPrompt=sPrompt+" Wynik zwróć w postaci JSON bez dodatkowych znaczników markdown. Nazwy atrybutów w JSON nie mogą zawierać polskich znaków, a literę ó zamień na o.";
sPrompt=sPrompt+"Lista nazw atrybutów w JSON: najemca_nazwa, najemca_nip, data_zawarcia, przedmiot_umowy, powierzchnia, okres_najmu_od, ";
sPrompt=sPrompt+"okres_najmu_do, data_wydania_powierzchni, raportowanie_obrotow, czynsz_wartosc, waluta_czynszu, czynsz_od_obrotow, ";
sPrompt=sPrompt+"termin_platnosci, warunki_indeksacji_czynszu_w_pln, minimalny_wskaznik_indeksacji, zabezpieczenie_platnosci.";
settings.SystemMessage=sPrompt;
settings.Model = "GPT-4o";
settings.IsJSONResponse=true;
resp = AskAI("Oto treść umowy do streszczenia: "+[Treść z AMODIT OCR], settings);
sAnswerJSON = resp.Answer;
[Streszczenie] = sAnswerJSON;
/* -- mapowanie odczytanych danych z "pliku" JSON na formularz sprawy -- */
if(sAnswerJSON!="")
{
[Najemca_nazwa]=JsonPath(sAnswerJSON, "najemca_nazwa");
[Najemca_NIP]=JsonPath(sAnswerJSON, "najemca_nip");
[Data_zawarcia]=JsonPath(sAnswerJSON, "data_zawarcia");
[Przedmiot_umowy]=JsonPath(sAnswerJSON, "przedmiot_umowy");
[Powierzchnia]=JsonPath(sAnswerJSON, "powierzchnia");
[Okres_najmu_od]=JsonPath(sAnswerJSON, "okres_najmu_od");
[Okres_najmu_do]=JsonPath(sAnswerJSON, "okres_najmu_do");
[Data_wydania_powierzchni]=JsonPath(sAnswerJSON, "data_wydania_powierzchni");
[Raportowanie_Obrotów]=JsonPath(sAnswerJSON, "raportowanie_obrotow");
[Czynsz_wartosc]=JsonPath(sAnswerJSON, "czynsz_wartosc");
[Waluta_czynszu]=JsonPath(sAnswerJSON, "waluta_czynszu");
[Czynsz_od_obrotow]=JsonPath(sAnswerJSON, "czynsz_od_obrotow");
[Termin_platnosci]=JsonPath(sAnswerJSON, "termin_platnosci");
[Warunki_indeksacji_czynszu_w_PLN]=JsonPath(sAnswerJSON, "warunki_indeksacji_czynszu_w_pln");
[Minimalny_wskaznik_indeksacji]=JsonPath(sAnswerJSON, "minimalny_wskaznik_indeksacji");
[Zabezpieczenie_platnosci]=JsonPath(sAnswerJSON, "zabezpieczenie_platnosci");
}
}
  1. Zatwierdź i przetestuj działanie

    • Przetestuj cały proces na przykładowym dokumencie, aby upewnić się, że dane są poprawnie wyciągane i przypisywane do pól formularza.

ai_ocr_strszczn5-wnk2

Wskazówki i dobre praktyki:

  • Przed uruchomieniem procesu upewnij się, że wszystkie wymagane pola formularza są poprawnie nazwane i skonfigurowane.
  • Wybierz metodę mapowania (np. JSONPath() lub foreachobject) zgodnie z własnymi preferencjami i złożonością danych.
  • Funkcja AI/OCR sprawdzi się zarówno dla dokumentów tekstowych, jak i zeskanowanych obrazów.
  1. Przykład streszczania dokumentów zawierających tabele

W poniższym przykładzie zakładamy, że dokument zawiera tabelę z danymi, której zawartość chcemy przenieść do tabeli na formularzu w sprawie. Aby to wykonać, w prompcie do funkcji AskAI() wskażemy, aby zawartość tabeli w skanowanym (AI OCR) dokumencie została sformatowana w postaci struktury tabelarycznej w formacie JSON (patrz: linie 9 - 16 na poniższym obrazku). Następnie mając taki format wstawienie wierszy do tabeli na formularzu sprawy będziemy realizować za pomocą pętli foreachobject() i forrow() (patrz: linie 28 - 45 na poniższym obrazku). Pętla foreachobject() służy do iteracji po strukturze tabelarycznej w JSON, zaś pętla forrow() wstawia pojedynczy wiersz do tabeli.

ai_ocr_4eb4r2-kod

Przykład dotyczy odczytania z dokumentu zawartości tabeli z zamówionymi lekami i przeniesienie jej zawartości do tabeli na formularzu sprawy. Wynik działania powyższego kodu przedstawia poniższy obrazek.

ai_ocr_4eb4r1-wnk

Odczytana z dokumentu w formacie JSON struktura tabelaryczna o nazwie “zamowienia” została wstawiona do pola “AskAI result”, a w tabeli “Result table” znajdują się wiersze odpowiadające tabeli z dokumentu.

Pełny kod przykładowej reguły wykonującej wszystkie powyższe operacje:

// -- wysłanie dokumentu do AI OCR w celu pozyskania jego zawartości --
sAttContent = AmoditGetAttachmentContent("File to be sent to OCR");
// -- przygotowanie polecenia dla funkcji AskAI --
sPrompt = "Pracujesz jako analityk chemiczny w laboratorium przy produkcji leków. Twoim zadaniem jest weryfikacja zamawianych leków. ";
sPrompt = sPrompt + "Z treści dokumentu, zawierającego tabele z zamawianymi lekami, wyciągnij następujące informacje dla każdego leku (wiersza tabeli): ";
sPrompt = sPrompt + "przedmiot zamówienia, jednostka miary, ilość, cena jednostkowa netto, cena jednostkowa brutto, wartość netto, VAT %, wartość VAT, ";
sPrompt = sPrompt + "wartość brutto, opis preparatu oferowanego, producenta i nazwę handlową.";
sPrompt = sPrompt + "W treści dokumentu tabele z zamawianymi lekami są na wielu stronach. ";
sPrompt = sPrompt + "Przeanalizuj wszystkie strony i wyświetl wszystkie wyniki bez pytania o kontynuację. ";
sPrompt = sPrompt + "Pobieraj pełną treść przedmiotu zamówienia, która występuje po nazwie leku. Nazwy leków odczytuj tak jak są zapisane, nie skracaj.";
sPrompt = sPrompt + "Wynik przedstaw w postaci tabeli JSON o nazwie 'zamowienia'. Jeden przedmiot zamówienia to jeden obiekt/wiersz w tabeli JSON.";
sPrompt = sPrompt + "Atrybuty obiektu JSON: przedmiot_zamowienia, jednostka_miary, ilosc, cena_jednostkowa_netto, cena_jednostkowa_brutto, ";
sPrompt = sPrompt + "wartosc_netto, vat_procent, wartosc_vat, wartosc_brutto, opis_preparatu_oferowanego, producent, nazwa_handlowa. ";
sPrompt = sPrompt + "Wartości liczbowe atrybutów podawaj w formacie programistycznym, czyli bez separacji tysięcy i kropka jako separator części ułamkowej. ";
sPrompt = sPrompt + "Jeśli przy liczbie stoi symbol waluty, to pomiń go i zwróć tylko liczbę.";
settings.SystemMessage=sPrompt;
settings.Temperature = 0;
settings.Model = "GPT-4o";
settings.IsJSONResponse = true;
// -- wysłanie polecenia do AI i odbiór wyniku w postaci JSON'a --
sAIQuery = "Treść dokumentu z zamówionymi lekami: " + sAttContent;
sAIQuery = sAIQuery + " Pamiętaj, aby przeanalizować wszystkie strony i wyświetlić wszystkie wyniki bez pytania o kontynuację.";
resp = AskAI(sAIQuery, settings);
[AskAI result] = resp.Answer;
// -- przekształcenie JSON'a na tabelę na formularzu --
foreachobject(resp.Answer,"zamowienia")
{
// -- wstawianie wiersza z "tabeli" na dokumencie do tabeli na formularzu sprawy --
forrow("Result table",AddTableRow("Result table"))
{
[Przedmiot zamówienia]=this.przedmiot_zamowienia;
[Jednostka miary]=this.jednostka_miary;
[Ilość]=this.ilosc;
[Cena jedn. netto]=this.cena_jednostkowa_netto;
[Cena jedn. brutto]=this.cena_jednostkowa_brutto;
[Wartość netto]=this.wartosc_netto;
[Stawka VAT]=this.vat_procent;
[Wartość VAT]=this.wartosc_vat;
[Wartość brutto]=this.wartosc_brutto;
[Opis preparatu]=this.opis_preparatu_oferowanego;
[Producent]=this.producent;
[Nazwa handlowa]=this.nazwa_handlowa;
}
}