XL184 – Parser pliku wyciągu bankowego

Praca z parserem wyciągu bankowego

Wyciągi bankowe są przekazywane przez instytucje finansowe zazwyczaj w formie plików tekstowych (np. format MT940) lub w postaci ustrukturyzowanej (standard XML).

System Comarch ERP XL natywnie obsługuje format SWIFT MT940, co pozwala odczytać i zaimportować większość standardowych plików tekstowych. Ze względu na uniwersalny charakter tego mechanizmu nie zawsze zapewnia on jednak pełną zgodność ze specyficznymi formatami danych lub niestandardowym kodowaniem znaków. Z kolei formaty ustrukturyzowane (np. CAMT.053) były dotychczas dostępne wyłącznie przez kanał Webservice, zgodnie ze specyfikacją danego banku. Oba te ograniczenia znosi parser opisany w niniejszym dokumencie.

Rozwiązanie opiera się na przeniesieniu odczytu i interpretacji wyciągów z rdzenia systemu do zewnętrznego modułu wykonawczego, co zapewnia użytkownikowi pełną kontrolę nad przetwarzaniem danych.

Kluczowe cechy rozwiązania:

  • Otwartość technologiczna: System Comarch ERP XL umożliwia wykorzystanie programów napisanych w dowolnym języku programowania.
  • Wsparcie programistyczne: Comarch dostarcza przykładowy kod źródłowy oraz definicję agenta AI, które mogą służyć jako baza do samodzielnej modyfikacji i dostosowania do specyficznych wymagań.
  • Mechanizm wymiany danych:
    • System ERP XL przekazuje plik źródłowy wyciągu do zewnętrznego programu.
    • Zewnętrzny moduł dokonuje transformacji danych.
    • System odbiera przetworzony plik o ustandaryzowanej strukturze, gotowy do dalszego księgowania.

Definicja ustrukturyzowanego formatu wymiany

Budowa formatu z wykorzystaniem parsera

Konfiguracja parsera polega na wskazaniu systemowi, jak ma współpracować z zewnętrznym programem przetwarzającym wyciągi: którego programu użyć, jakie pliki mu przekazywać i w jaki sposób go uruchamiać. Dzięki takiemu podejściu obsługę nietypowego formatu wyciągu można dodać bez modyfikowania samego systemu Comarch ERP XL. Wszystkie te ustawienia definiuje się w module Administrator, w obszarze zarządzania formatami przelewów i wyciągów.

Aby skonfigurować nowy format wymiany, należy:

  • Przejść do okna Lista formatów przelewów (ścieżka: Firma / Formaty przelewów).
  • Wybrać opcję dodania nowego formatu wymiany.
  • Ustawić opcję Własny parser pliku wyciągu bankowego.

Podobnie jak w pozostałych definiowalnych formatach przelewów, w oknie formatu można wskazać domyślne rozszerzenie plików. Parametr ten określa, jakiego typu pliki system będzie automatycznie pobierał i przekazywał do parsera (np. .txt lub .xml).

Najważniejszym ustawieniem jest komenda wywołania — polecenie, które system Comarch ERP XL uruchamia w powłoce systemowej Windows w chwili rozpoczęcia odczytu wyciągu. To ona uruchamia zewnętrzny program parsera i inicjuje przetwarzanie danych.

Poprawnie zbudowana komenda zawiera ścieżkę do pliku wykonywalnego (np. interpretera języka Python lub skompilowanego pliku .exe) oraz parametry przekazujące dane między systemem a parserem.

Podczas importu system może dodatkowo przekazać do zewnętrznego programu identyfikator rejestru bankowego. Pozwala to parserowi rozpoznać, z którego rejestru pochodzi wyciąg, i w zależności od tego zastosować inną logikę przetwarzania — na przykład odmienne typy operacji dla różnych rachunków obsługiwanych w systemie Comarch ERP XL.

Dodanie formatu wymiany

W dolnej części okna konfiguracji, w sekcji Przykład wywołania, system prezentuje podgląd gotowej komendy — z pełną ścieżką do programu oraz wszystkimi argumentami — którą Comarch ERP XL uruchomi podczas odczytu wyciągu. Pozwala to zweryfikować poprawność konfiguracji jeszcze przed pierwszym uruchomieniem, a na etapie wdrożenia ułatwia diagnostykę (troubleshooting), ponieważ dokładnie pokazuje, z jakimi parametrami parser jest wywoływany.

Zadaniem wywoływanego programu jest przekształcenie pliku otrzymanego z banku na ustrukturyzowany format pośredni, który system Comarch ERP XL następnie odczytuje i księguje. Kierunek tej konwersji wskazuje argument import, przekazywany parserowi w komendzie wywołania.

W kolejnych wersjach planowane jest rozszerzenie tego mechanizmu o możliwość eksportu. System Comarch ERP XL będzie wówczas przygotowywał zlecenia w tym samym formacie pośrednim, a następnie uruchamiał skrypt użytkownika, który przekształci je do formatu wymaganego przez dany bank. Dzięki temu ten sam format pośredni oraz ten sam parser będą mogły obsłużyć wymianę danych w obu kierunkach.

W przypadku wywoływania programu poprzez pełną ścieżkę dostępu (szczególnie gdy zawiera ona spacje, np. C:\Program Files\…), należy bezwzględnie użyć operatora wywołania &. Zapewnia on poprawną interpretację ciągu znaków jako komendy wykonywalnej, a nie zwykłego tekstu.

Przyklad
& “C:\Sciezka Do Programu\app.exe” –parametr

Podłączenie ustrukturyzowanego pliku wymiany

Oprócz współpracy z zewnętrznym parserem (opisanej w rozdziale 2.1) system Comarch ERP XL umożliwia bezpośredni import gotowego pliku w formacie XML lub JSON. Ścieżkę tę stosuje się, gdy plik został przygotowany wcześniej i jest już zgodny ze strukturą wymaganą przez system — na przykład został wygenerowany przez inny program użytkownika albo utworzony ręcznie. Funkcja ta jest również przydatna diagnostycznie: pozwala szybko sprawdzić, czy dany plik JSON lub XML został zbudowany poprawnie i zostanie prawidłowo odczytany przez Comarch ERP XL.

Import bezpośredni sprawdza się w przypadku plików o prostej, płaskiej strukturze. Nie należy natomiast używać go do natywnych wyciągów w standardzie ISO 20022 (np. CAMT.053) — mimo że są to pliki XML, ich wielopoziomowe zagnieżdżenie uniemożliwia bezpośredni odczyt. Takie pliki wymagają wcześniejszego przetworzenia przez parser (rozdział 2.1), przygotowany w oparciu o dokumentację techniczną banku, dlatego w praktyce zaleca się dla nich ścieżkę parsera zamiast importu bezpośredniego.

Niezależnie od wybranej ścieżki plik przekazywany do systemu musi spełniać następujące wymagania techniczne:

  • Obsługiwane formaty: Dane muszą zostać zapisane w formacie XML lub JSON.
  • Kodowanie: UTF-8
  • Struktura danych: składa się z dwóch obszarów:
    • Nagłówek: Określa dane ogólne wyciągu, takie jak numer rachunku, daty operacji oraz salda początkowe i końcowe.
    • Pozycje: Definiuje strukturę poszczególnych operacji bankowych, w tym kwoty, dane kontrahentów oraz tytuły płatności.

Poniżej przedstawiono przykładowy fragment pliku w formacie JSON, który użytkownik chciałby zaimportować do rejestru bankowego.

Przykładowa zawartość pliku JSON dla nagłówka wyciągu

W tym przykładzie plik opisuje numer rachunku, walutę i datę wyciągu, a poszczególne transakcje zebrane są w kluczu „ntry”. Aby system poprawnie odczytał takie dane, każdą informację należy powiązać z odpowiednim polem Comarch ERP XL — wskazując nazwę klucza, pod którą znajduje się ona w pliku. To powiązanie, nazywane mapowaniem, jest warunkiem prawidłowej interpretacji i dekretacji zapisów. Sposób konfiguracji mapowania dla nagłówka oraz pozycji opisano szczegółowo w rozdziale 3.

Struktura pliku wymiany

Nagłówek pliku wymiany

W zakładce Nagłówek mapuje się dane ogólne wyciągu — te, które pozwalają przypisać go do właściwego rejestru kasowo-bankowego. Dla każdej pozycji wskazuje się nazwę klucza, pod którą dana wartość występuje w pliku.

Nagłówek pliku wymiany

Parametry wymagane: obowiązkowo należy zmapować dwa klucze:

  • Numer konta — rachunek, którego dotyczy wyciąg.
  • Pozycje wyciągu — sekcja zawierająca ciąg kolejnych operacji na tym rachunku.

Parametry opcjonalne: dodatkowo można zmapować standardowe dane bankowe, takie jak:

  • Data wyciągu.
  • Saldo otwarcia i zamknięcia.
  • Waluta rachunku.

Listę parametrów obsługuje się tak samo jak w pozostałych oknach systemu ERP:

  • Dodawanie i usuwanie: pozycje dodaje się i usuwa przyciskami funkcyjnymi — plusem (dodaj) oraz koszem (usuń).
  • Edycja: nazwę klucza zmienia się bezpośrednio na liście — dwukrotne kliknięcie wiersza w kolumnie Nazwa klucza uruchamia edycję w miejscu (edit-in-place). System podpowiada przy tym najczęściej używane nazwy kluczy.

Pozycje pliku wymiany

Zakładka Pozycje określa, jak system ma interpretować pola opisujące pojedynczą transakcję w ramach wyciągu — na przykład jej kwotę czy tytuł płatności. Podobnie jak w Nagłówku, każde pole mapuje się, wskazując nazwę klucza, pod którą występuje ono w pliku.

Pola obowiązkowe

Poniższe pola są obowiązkowe — bez ich zmapowania system nie zaimportuje transakcji:

  • Data operacji: data, pod którą zapis zostanie ujęty w rejestrze kasowo-bankowym.
  • Kwota: wartość transakcji.
  • Strona operacji: określa, czy kwota ma zostać zaksięgowana jako uznanie, czy obciążenie rachunku. System rozpoznaje standardowe oznaczenia stosowane w wyciągach bankowych:
    • Uznanie (przychód środków pieniężnych) — oznaczenie C (dopuszczalne warianty: Cr, Credit).
    • Obciążenie (rozchód środków pieniężnych) — oznaczenie D (dopuszczalne warianty: Db, Debit).
  • Nazwa kontrahenta: identyfikuje drugą stronę operacji i jest wymagana do zaimportowania zapisu. Gdy stroną operacji jest sam bank (np. prowizje lub opłaty), dane kontrahenta mogą nie występować w pliku źródłowym — w takim przypadku parser użytkownika powinien uzupełnić to pole wartością domyślną, np. nazwą banku lub frazą „N/A”.
  • Tytuł operacji: opis transakcji przekazany przez bank.

Pola opcjonalne – dodatkowa identyfikacja kontrahenta

Opcjonalnie można przekazać dodatkowe pola ułatwiające identyfikację kontrahenta:

  • Adres kontrahenta: pole tekstowe przeznaczone na pełne dane adresowe kontrahenta.
  • Numer rachunku kontrahenta: na jego podstawie system samodzielnie odnajduje kontrahenta i przypisuje go do operacji. Dopasowanie następuje, gdy przekazany numer rachunku widnieje wśród kont przypisanych do karty kontrahenta w systemie Comarch ERP XL. Rachunki są w bazie zapisane w notacji IBAN (z kodem kraju na początku), dlatego najlepiej przekazywać numer wraz z kodem kraju — także dla krajów spoza strefy IBAN, np. USA czy Chin. Jeśli kod kraju nie zostanie podany, system spróbuje rozpoznać go automatycznie, co jednak wydłuża wyszukiwanie.
  • Pełny rachunek wirtualny: umożliwia identyfikację kontrahenta na podstawie indywidualnego numeru konta, na który dokonano wpłaty — funkcja wykorzystywana w rejestrach obsługujących płatności masowe. System wymaga podania pełnego polskiego numeru w standardzie NRB (26 cyfr wraz z sumą kontrolną). Jeśli bank udostępnia jedynie końcowy fragment rachunku wirtualnego, parser użytkownika musi rozwinąć go do pełnej, 26-cyfrowej formy przed przekazaniem danych do systemu.

Pola opcjonalne – dodatkowy opis operacji

Opcjonalnie można przekazać pola, które dokładniej opisują typ operacji i wspierają jej automatyczne rozliczenie:

  • Identyfikator operacji: łączy przelew zlecony wcześniej z poziomu systemu Comarch ERP XL z odpowiadającą mu pozycją na wyciągu. Gdy identyfikator nadany przez system pojawi się w importowanym wyciągu, transakcja zostaje automatycznie rozliczona — bez ręcznego kojarzenia zlecenia z zapisem bankowym. Zwykle jest to 10-znakowy kod szesnastkowy rozpoczynający się od litery C (np. C000006001), przy czym jego dokładny format może zależeć od serwisu bankowego i konfiguracji bazy.
  • Bankowy kod operacji: pole tekstowe zawierające ciąg cyfr lub znaków definiujących typ operacji zgodnie ze specyfikacją danego banku. Wykorzystanie kodów transakcyjnych umożliwia precyzyjne określenie rodzaju przelewu w sytuacjach, gdy treść pola Tytuł operacji jest niewystarczająca do poprawnej klasyfikacji zdarzenia gospodarczego.
  • Numer referencyjny operacji banku: unikalny identyfikator, jaki bank nadaje konkretnej transakcji (stosowany m.in. przez bank Pekao). System wykorzystuje go do wykrywania duplikatów — zablokuje ponowny import operacji, jeśli pod tą samą datą istnieje już zapis o identycznej kwocie i tym samym numerze referencyjnym.

Pola opcjonalne – instrukcje sterujące

Standardowo system sam rozpoznaje kontrahenta (po numerze rachunku) i typ operacji (po bankowym kodzie). Poniższe pola pozwalają pominąć to automatyczne rozpoznawanie i narzucić systemowi konkretne wartości już na etapie importu:

  • XL Akronim kontrahenta: wskazuje wprost, którego kontrahenta przypisać do zapisu. Po uzupełnieniu tego pola system pomija wyszukiwanie po numerze rachunku i przypisuje podmiot o podanym akronimie.
  • XL GidTyp: uzupełniany razem z akronimem; określa typ przypisywanego podmiotu. Dopuszczalne wartości: brak — kontrahent (domyślnie, GidTyp 32), 944 — pracownik, 4304 — urząd, 48 — bank, 0 — podmiot typu „INNY”. Pozwala jednoznacznie wskazać typ rekordu, eliminując ryzyko błędnej identyfikacji, gdy ten sam akronim występuje w różnych kategoriach podmiotów.
  • XL Kod operacji: narzuca typ operacji kasowo-bankowej, którym system zaksięguje dokument. Jego przekazanie pozwala pominąć automatyczne rozpoznawanie operacji i bezpośrednio wskazać właściwy typ dla importowanego zapisu. Aby dany typ był dostępny, musi być wcześniej powiązany z rejestrem; przy wielu typach (np. wynagrodzenia, prowizje, odsetki) system rozpoznaje je na podstawie definicji z modułu Księgowość / Kasa/Bank / Definicje banków.

Gotowe narzędzia i przykłady

Zawartość pakietu

Do dokumentacji dołączono pakiet ParserAgent.zip, który przyspiesza przygotowanie własnego parsera wyciągów. Zamiast pojedynczych plików testowych udostępniono kompletny zestaw materiałów: gotowy parser referencyjny, przykładowe wyciągi, instrukcje dla agenta AI oraz materiały potrzebne do zbudowania i wdrożenia rozwiązania u klienta.

ParserAgent

Na pakiet składają się następujące elementy:

Element pakietuPrzeznaczenie
mt940_parser.py / mt940_parser.exeReferencyjny parser MT940 — w wersji źródłowej (Python) oraz jako samodzielny plik wykonywalny.
Katalog PlikiPrzykładowe wyciągi bankowe do testów.
AGENTS.mdInstrukcje dla agenta AI — pozwalają wygenerować własny parser dla dowolnego formatu wejściowego i w dowolnym języku.
BUILD.md, build_exe.ps1 Materiały do zbudowania pliku wykonywalnego parsera na podstawie wersji źródłowej.
DISTRIBUTION.mdWskazówki dotyczące dystrybucji parsera u klienta.

Budowa parsera z pomocą AI

Głównym zadaniem pakietu jest wsparcie budowy własnego parsera przy pomocy agenta AI. Dołączone instrukcje (plik AGENTS.md), gotowy parser referencyjny MT940 oraz przykładowe wyciągi stanowią dla agenta komplet kontekstu, na podstawie którego potrafi on wygenerować parser dopasowany do indywidualnego formatu danych klienta — w dowolnym języku programowania. Pozwala to znacząco skrócić czas przygotowania niestandardowego rozwiązania.

Aby skorzystać z tej ścieżki, wystarczy otworzyć folder pakietu w wybranym narzędziu AI (np. GitHub Copilot, Cursor lub Claude Code) — agent samodzielnie odczyta instrukcje z pliku AGENTS.md. Następnie należy wskazać przykładowy plik ze swojego banku oraz preferowany język programowania; na tej podstawie agent wygeneruje parser zgodny z wymaganiami systemu Comarch ERP XL i zweryfikuje go na dołączonych przykładach.

Parser referencyjny można też wykorzystać samodzielnie — jako gotowe narzędzie do testów lub punkt wyjścia do własnej implementacji. Jest dostępny w wersji źródłowej (Python) oraz jako samodzielny plik wykonywalny, który nie wymaga instalowania środowiska Python u klienta. Kodowanie pliku wejściowego i powiązanie pól wyciągu z nazwami kluczy konfiguruje się w sekcji ustawień na początku pliku parsera, dzięki czemu dostosowanie do konkretnego banku najczęściej nie wymaga ingerencji w logikę przetwarzania.

Czy ten artykuł był pomocny?