JSON reprezentujący rekordy w pamięci fiskalnej jest dość rozbudowany, stąd jego parsowanie może być na początku kłopotliwe. Dla przykładu przeanalizujemy rekordy zwracane przez API /raporty/events/dobowy.
1 2 3 4 5 6 |
curl -s -XPOST "http://localhost:3050/raporty/events/dobowy?fulldebug=true" -H 'Content-type: application/json' -d ' { "dateFrom":"2023-07-31T23:20:00+02:00", "dateTo":"2023-08-29T23:49:59+02:00", "mergeSections": true }' |
W odpowiedzi otrzymujemy identyfikator tasku, a następnie jego status sprawdzamy za pomocą RESTpoint:
- GET /tasks/get/<identyfikator taska>
- GET/tasks/list
W momencie gdy “inprogress” zmieni wartość na “false”, wówczas metoda zwraca pełen wynik, przykładowo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
{"hits":{"task":{"ts":1701639330320,"task":"45c53051-cf9b-4089-8864-6b1caf38bee0","inprogress":false,"progress":0,"success":true,"message":null,"result":{"ok":true,"code":0,"error":"", "results":[ {"sections":[ {"type":"raport_dobowy","date":"2023-10-02T19:01:50Z","date_ts":749588510,"nb":1730,"fisk":1,"taxid":"5554442211","prefix":"","compress":0,"sw":0,"number":83, "date_112":"2023-10-02T19:01:50Z","date_ts_112":749588510,"currency":"PLN","ptu.0":2300,"ptu.1":800,"ptu.2":500,"ptu.3":0,"ptu.4":-1,"ptu.5":-2,"ptu.6":-2, "ptuChange":0,"malfunctionCount":0,"programmingLCount":0,"programmingOCount":0, "waPa.0":221021,"waPa.1":0,"waPa.2":0,"waPa.3":0,"waPa.4":0,"waPa.5":0,"waPa.6":0,"paragonCount":14,"paragonCancelledCount":0,"paragonCancelledAmount":0, "waFv.0":0,"waFv.1":0,"waFv.2":0,"waFv.3":0,"waFv.4":0,"waFv.5":0,"waFv.6":0,"invoiceCount":0,"invoiceCancelledCount":0,"invoiceCancelledAmount":0, "ticketsCount":0,"foreignTicketsCount":0,"dbChangesCount":7,"nonfiscalPrintoutsCount":0, "dateReportStart":"2023-10-02T07:45:16Z","dateReportEnd":"2023-10-02T18:40:21Z","dateReportStart_ts":749547916,"dateReportEnd_ts":749587221, "unsuccessfulTransfersCount":0,"type_65":"raport_dobowy","fisk_65":1,"cancelled":0,"nb_65":0, "date_65":"2023-10-02T19:01:50Z","date_ts_65":749588510, "uniq":"UNIQ_2221114422","cashNumber":"001","cashier":"KIEROWNIK", "taxid_65":"","taxidPrefix":"","taxidStyle":0,"compress_65":0,"sw_65":0} ] }, {"sections":[ {"type":"raport_dobowy","date":"2023-10-03T18:59:44Z","date_ts":749674784,"nb":1746,"fisk":1,"taxid":"5554442211","prefix":"","compress":0,"sw":0,"number":84, "date_112":"2023-10-03T18:59:44Z","date_ts_112":749674784,"currency":"PLN","ptu.0":2300,"ptu.1":800,"ptu.2":500,"ptu.3":0,"ptu.4":-1,"ptu.5":-2,"ptu.6":-2," ptuChange":0,"malfunctionCount":0,"programmingLCount":0,"programmingOCount":0, "waPa.0":178581,"waPa.1":0,"waPa.2":0,"waPa.3":0,"waPa.4":0,"waPa.5":0,"waPa.6":0,"paragonCount":15,"paragonCancelledCount":0,"paragonCancelledAmount":0, "waFv.0":0,"waFv.1":0,"waFv.2":0,"waFv.3":0,"waFv.4":0,"waFv.5":0,"waFv.6":0,"invoiceCount":0,"invoiceCancelledCount":0,"invoiceCancelledAmount":0, "ticketsCount":0,"foreignTicketsCount":0,"dbChangesCount":6,"nonfiscalPrintoutsCount":0, "dateReportStart":"2023-10-03T07:18:20Z","dateReportEnd":"2023-10-03T16:07:37Z","dateReportStart_ts":749632700,"dateReportEnd_ts":749664457, "unsuccessfulTransfersCount":0,"type_65":"raport_dobowy","fisk_65":1,"cancelled":0,"nb_65":0, "date_65":"2023-10-03T18:59:44Z","date_ts_65":749674784, "uniq":"UNIQ_2221114422","cashNumber":"001","cashier":"KIEROWNIK", "taxid_65":"","taxidPrefix":"","taxidStyle":0,"compress_65":0,"sw_65":0} ] } ]}}},"ok":true} |
W powyższej odpowiedzi widzimy 2 raporty dobowe (lista results[] zawiera dwa obiekty JSON). Każdy obiekt posiada atrybut “sections“. W pamięci fiskalnej rekordy złożone są z sekcji, stąd odpowiedź to odzwierciedla. Raporty dobowe są one złożone z 3 sekcji. Ponieważ w request użyte zostało “mergeSections=true“, PosnetServer połączył 3 sekcje w jeden obiekt JSON, aby ułatwić analizę wyników. Jeśli w request ustawione zostanie “mergeSections=false, wówczas lista “sections” będzie zawsze zawierała 3 dokumenty JSON będące dokładnym odwzorowaniem sekcji z pamięci fiskalnej.
Każdy z obiektów w liście results[] posiada zestaw atrybutów:
- type – typ rekordu w pamięci fiskalnej. W przypadku listy raportów dobowych wartość będzie zawsze taka sama: “raport_dobowy”, ale w przypadku /raporty/events/custom, który zwraca rożne zdarzenia, atrybut może mieć następujące wartości: raport_dobowy, fiskalizacja, zerowanie, zmiana_ptu, readonly_state, zmiana_waluty, ustawienie_przekazu_danych, adres_podatnika, aktualizacja, nieudana_aktualizacja, tryb_serwisowy,wymiana_pamieci, kasowanie_alg_weryfikujacego, zrodlo_aktualizacji, zmiana_daty_czasu, wymiana_klucza_publicznego, przeglad_techniczny, blad_pamieci_chronionej, awaria_zasilania, utrata_ciaglosci_dokumentow, blad_weryfikacji, pamiec_chroniona_pelna, pamiec_fiskalna_pelna, odlaczenie_mechanizmu_drukujacego, odlaczenie_wyswietlacza_nabywcy, brak_przekazu_klucza_publicznego, reserved, qrcode, zmiana_harmonogramu_polaczen
- number – numer raportu dobowego. Widzimy tu dwa raporty dobowe, jeden o numerze 83 , drugi o numerze 84
- dateReportStart, dateReportEnd – zakres raportu dobowego (daty od i do). Wartości podane są w UTC,
- ptu.0, ptu.1, ptu.2, ptu.3, ptu.4 itd. – stawki VAT dla każdego indeksu. Zwyczajowo indeks 0 reprezentuje stawkę A, czyli 23%, indeks 1 stawkę B 8% itd. Wartości te są reprezentowane jako liczby całkowite, w taki sposób ze dwie najmłodsze cyfry reprezentują cześć ułamkową, czyli “ptu.0″=2300 oznacza, że stawka na indeksie 0 ma wartość 23.00 %. Wartość “-1” oznacza stawkę VAT zwolnioną, a wartość “-2” oznacza ze pod tym indeksem nie zaprogramowano żadnej stawki VAT,
- waPa.0, waPa.1, waPa.2, waPa.3 itd. – wartość sprzedaży na paragonach dla każdej ze stawek,
- waFv.0, waFv.1, waPa.2, waPa.3 itd. – wartość sprzedaży na fakturach dla każdej ze stawek,
- paragonCount – ilość wystawionych paragonów,
- paragonCancelledCount – ilość anulowanych paragonów,
- paragonCancelledAmount – wartość anulowanych paragonów,
- invoiceCount – ilość wystawionych faktur
- invoiceCancelledCount – ilość anulowanych faktur
- invoiceCancelledAmount – wartość anulowanych faktur
- ticketsCount – liczba wystawionych biletów
- foreignTicketsCount – liczba biletów zagranicznych
- dbChangesCount – liczba zmian w bazie towarowej
- nonfiscalPrintoutsCount – ilość wydruków niefiskalnych
- unsuccessfulTransfersCount – liczba nieudanych prób przekazu od ostatniego raportu dobowego
- malfunctionCount – liczba awarii
- programmingLCount – liczba programowań (L)
- programmingOCount – liczba programowań (O)
- ptuChange – ilość zmian stawek PTU
- date – data raportu w UTC
- uniq – unikalny numer drukarki fiskalnej
- cashNumber – zaprogramowany numer kasy
- cashier – zaprogramowany domyślny kasjer
- taxid – zaprogramowany numer NIP
- currency – waluta, praktycznie zawsze PLN jeśli kasa jest zarejestrowana na terytorium Polski.