PosnetServer od wersji 4.3 umożliwia odczyt pamięci fiskalnej. Oznacza to że w wygodny sposób można uzyskać dostęp do historii wystawionych faktur, paragonów, raportów dobowych czy zdarzeń takich jak awarie zasilania czy błędy mechanizmu drukującego.

Odczytu zdarzeń można dokonać za pomocą nowych RESTpoint takich jak:

  • POST /raporty/events/dobowy
  • POST /raporty/events/custom
  • POST /raporty/sellhistory

Wykonujemy je w następujący sposób:

W odpowiedzi otrzymujemy identyfikator tasku, ponieważ skanowanie pamięci fiskalnej może długo trwać. Stąd, bardzo ważnym parametrem requestu jest dobranie odpowiedniego zakresu dat w polach “dateFrom” i “dateTo”. Pole “dateTo” jest opcjonalne i jeśli nie zostało podane to znaczy że wyszukujemy do “teraz”. Jeśli zakres dat będzie bardzo szeroki, skanowanie pamięci może trwać nawet kilkadziesiąt minut, stąd status tasku można sprawdzić za pomocą RESTpoint:

  • GET /tasks/get/<identyfikator taska>
  • GET/tasks/list

Przykładowa odpowiedź API:

W momencie gdy “inprogress” zmieni wartość na “false”, wówczas metoda zwraca pełen wynik, przykładowo:

Aby cyklicznie nie odpytywać PosnetServer o aktualny status tasku, podczas wysyłania requestu można zdefiniować strukturę “callback”, aby PosnetServer wysłał wyniki do zewnętrznego serwisu jak tylko task się zakończy. Przykładowo:

Dodatkowo, wykorzystując atrybut “saveResults” można zapisać wyniki do pliku, przykładowo do pliku “/tmp/sellhistory.json”.

Optymalizacja

Na dłuższą metę skanowanie pamięci fiskalnej podczas każdego requestu jest niewydajne, stąd warto użyć wbudowanego w PosnetServer cache. Do dyspozycji mamy dwa rodzaje cache: “sections” i “full“. Cache typu “sections” buduje lokalny index plików i zapisuje go w katalogu wskazanym w pliku konfiguracyjnym config.json:

Lokalny index to lista identyfikatorów dokumentów wraz ze znacznikiem czasu i dokładną lokalizacją tych danych w pamięci fiskalnej drukarki. Budowanie cache może chwilę potrwać, ale dzięki temu PosnetServer podczas kolejnego requestu o historię dokumentów nie będzie musiał już skanować pamięci fiskalnej żeby odnaleźć dokumenty, gdyż od razu zna ich lokalizacje i czas requestu znacząco się skróci. Komunikacja z drukarką jest niezbędna jedynie do pobrania zawartości paragonu lub faktury. Cache typu “full” również indeksuje pamieć fiskalną na lokalnym dysku ale dodatkowo przechowuje w tym samym katalogu zawartość pamięci fiskalnej. Jeśli zbudowany zostanie cache typu “full”, wyszukiwanie dokumentów odbywa się praktycznie bez komunikacji z drukarką, gdyż wybrany zakres pamieć fiskalnej jest w całości pobrany na dysk. Lokalnym cache można zarządzać za pomocą REStpoint’ów:

  • DELETE /cache/clean
  • GET /cache/ranges
  • POST /cache/update
  • POST /cache/build

Aby zindeksować pamięć fiskalną od 2023-07-30 do 2023-08-20, należy wykonać następujący request:

Proces jest czasochłonny, w tym czasie drukarka nie przyjmuje transakcji do wydruku. Nowo fiskalizowane dokumenty nie aktualizują automatycznie cache, stąd należy go odświeżać. Nie jest konieczne przebudowywanie go od początku za każdym razem, wystarczy użyć metody /cache/update aby doczytać nowe, nie indeksowane wcześniej zdarzenia z pamięci fiskalnej. Przykładowo:

Aby używać cache w naszym przykładzie do wyszukiwania dokumentów, należy ustawić parametr “useCache” na “true” w następujący sposób:

Zachęcamy do używania cache typu “full” (jest on najbardziej efektywny) o ile przechowywanie kopii danych z pamięci fiskalnej na komputerze gdzie uruchomiony jest PosnetServer nie jest wbrew polityce Security naszej firmy. Jeśli jest, to wygodniej używać cache typu “sections”. Ten cache nie zawiera żadnych poufnych danych dotyczących sprzedaży. Składa się jedynie z numeru dokumentu, jego rodzaju i znacznika czasu.

Aby przetestować powyższe polecenia, w katalogu /docs w paczce instalacyjnej umieściliśmy kilka nowych skryptów.

WYDRUK KOPII PARAGONU

Drukarki nie mają funkcjonalności wydruku kopii paragonu, jednak po odczytaniu zawartości pamięci fiskalnej, można wykonać wydruk niefiskalny zbliżony swoim formatem do paragonu. Przykładowy request może wyglądać następująco (uwaga, użyty w przykładzie RESTpoint /raporty/textlines dostępny jest od wersji 5.2):

PYTANIA I ODPOWIEDZI (Q&A)

Q: Jak odróżnić w wynikach eParagony od zwykłych paragonów?
A: Dla drukarki fiskalnej obydwa typy paragonów są równoznaczne, stad w nie ma możliwości aby na podstawie zwróconych wyników określić czy dany paragon był wystawiony jako klasyczny paragon czy eParagon. Jako rozwiązanie, proponujemy dodawanie opisu do paragonu, np. w parametrze “extralines”.

Share This

What's your reaction?
0Smile0Lol0Wow0Love0Sad0Angry

Leave a comment