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:
-
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).

-
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.

-
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.
- Skorzystaj z funkcji komunikacji z silnikiem AI OCR (

-
Zmapuj dane z pliku JSON na pola formularza
- Wykorzystaj funkcję np.
JSONPath()lub pętlęforeachobjectw 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.
- Wykorzystaj funkcję np.

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"); }}-
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.

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()lubforeachobject) 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.
- 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.

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.

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; }}