Protokół Pact24CashRegister
Opis protokołu komunikacyjnego Pact24CashRegister
Przesyłanie komunikatów do programu Pact24 CashRegister odbywa się za pomocą znanego formatu wymiany danych JSON.Podstawowa struktura komunikatu:
{
"mode": "receipt",
"cashier": {
"name": "Jan",
"number": "5"
},
"checkout": {
"been_paid": "0,00",
"change": "0,00",
"total": "18,66",
"discount": null,
"tax_id": null,
"payment_type": null
},
"lines": [
{
"nr": 1,
"name": "Jabłka",
"code": 4002,
"quantity": "2,321",
"unit": "kg.",
"price": "3,00",
"total": "6,96",
"discount": null
},
{
"nr": 2,
"name": "Chleb baltonowski",
"code": "2",
"quantity": "1",
"unit": "szt.",
"price": "2,10",
"total": "2,10",
"discount": null
},
{
"nr": 3,
"name": "Cola 1L",
"code": "5449000054227",
"quantity": "2",
"unit": "szt.",
"price": "4,80",
"total": "9,60",
"discount": null
}
]
}
Atrybut
mode :- jest wymagany
- String
- przyjmuje zawsze jedną z dwóch wartości:"receipt"lub"checkout"
- określa obecny stan paragonu na kasie:receipt: paragon pusty, paragon w trakcie transakcji, paragon anulowany (=paragon pusty)
checkout: zapłata za paragonObiekt
cashier:- nie jest wymagany
- String
- atrybut name to nazwa kasjera, jaka jest prezentowana klientowi- atrybut number to numer kasjera w systemieObiekt
checkout:- jest wymagany
- poletotal(string) zawsze wskazuje bieżącą wartość paragonu do zapłaty. Gdy paragon jest pusty wówczas pole to przyjmuje wartość"0,00"
- polediscount(string) to pole tekstowe, w którym jest bieżąca informacja na temat udzielonego całościowego rabatu dla bieżącego paragonu np.:null- nie udzielono rabatu"5%"- udzielono rabatu pięcioprocentowego"2,30"- udzielono rabatu kwotowego w wysokości 2,30
- polebeen_paid(string) t o kwota wpłacona przez klienta
- polechange(string) to reszta należna klientowi
- poleObiekttax_idto nr NIP klienta. Domyślnie wartośćnulllub String z nr NIP np."9720969679"
- polepayment_type(string) określa formę płatności za paragon i przyjmuje następujące wartości:null- gdy atrubytmodema wartośćreceipt"CASH"- gotówka"CARD"- karta płatnicza"BOND"- bon"CURRENCY"- waluta"CHECK"- czek"CREDIT"- kredyt
lines: - jest wymagany
- jest tablicą zawierającą dane poszczególnych linii paragonu
- gdy paragon jest pusty (lub anulowany), wtedy: "lines": null
- pojedyncza linia jest zdefiniowana przez następujące pola:nr- numer produktu na paragonie (int)name- nazwa produktu (string) (jest wymagane)code- kod produktu np. kod ean-13. Jeżeli produkt nie ma kodu ean, wtedy kod krótki (string)quantity- ilość (jest wymagane) (string)unit- jednostka np.'szt.'lub"kg."itp.price- cena jednostkowa (string)total- wartość linii (total = price * quantity) (string) (jest wymagane)
discount- wartość udzielonego rabatu dla tej pojedynczej linii (string)Zdarzenia po stronie programu kasowego, które wywołują przesłanie komunikatu do Pact24CashRegister:
- gotowość do pracy (pusty paragon)
- dodanie każdego produktu do paragonu
- stornowanie
- anulacja paragonu
- podsumowanie paragonu
- zakończenie paragonu
- zakończenie paragonu
- podanie/poprawienie nr NIP klienta
Należy pamiętać aby przy każdorazowym dodaniu lub usunięciu linii paragonowej odpowiednio uaktualnić wartość pól
3. Dodanie kolejnego produktu:
4. Zapłata za paragon (gotówka, do zapłaty: 16,50 zł; wpłacono: 20 zł; reszta: 3,50 zł oraz klient podał NIP):
5. Stornowanie pozycji (gdy z przykładu nr 3 dokonamy storna ostatniego produktu, to wysyłamy komunikat z przykładu nr 2).
6. Anulowanie paragonu (wówczas wysyłamy komunikat z przykładu nr 1).
Uwaga - Program Pact24CashRegister służy tylko do prezentacji otrzymanych danych i nie weryfikuje poprawności logicznej (np. czy kwota do zapłaty faktycznie wynika z podsumy kwoty za poszczególne produkty). Zakładamy, że dane otrzymane na temat paragonu są zawsze prawdziwe.
Należy pamiętać aby przy każdorazowym dodaniu lub usunięciu linii paragonowej odpowiednio uaktualnić wartość pól
total i discount (o ile był przyznany rabat) obiektu checkout.Polskie znaki
Aby polskie znaki były prawidłowo wyświetlane na ekranie klienta, należy cały tekst komunikatu kodować zgodnie ze standardem UTF-8.Przykładowe komunikaty
1. Pusty paragon z zalogowanym kasjerem "Jan" o numerze 5:{
"mode": "receipt",
"cashier": {
"name": "Jan",
"number": "5"
},
"checkout": {
"been_paid": "0,00",
"change": "0,00",
"total": "0,00",
"discount": null,
"tax_id": null,
"payment_type": null
},
"lines": null
}
2. Dodanie pierwszego produktu:{
"mode": "receipt",
"cashier": {
"name": "Jan",
"number": "5"
},
"checkout": {
"been_paid": "0,00",
"change": "0,00",
"total": "6,96",
"discount": null,
"tax_id": null,
"payment_type": null
},
"lines": [
{
"nr": 1,
"name": "Jabłka",
"code": "4002",
"quantity": "2,321",
"unit": "kg.",
"price": "3,00",
"total": "6,96",
"discount": null
}
]
}
3. Dodanie kolejnego produktu:
{"mode": "receipt","cashier": {"name": "Jan","number": 5},"checkout": {"been_paid": "0,00","change": "0,00","total": "16,56","discount": null, "tax_id": null,"payment_type": null},"lines": [{"nr": 1,"name": "Jabłka","code": "4002","quantity": "2,321","unit": "kg.","price": "3,00","total": "6,96","discount": null},{"nr": 2,"name": "Cola 1L","code": "5449000054227","quantity": "2","unit": "szt.","price": "4,80","total": "9,60","discount": null}]}
4. Zapłata za paragon (gotówka, do zapłaty: 16,50 zł; wpłacono: 20 zł; reszta: 3,50 zł oraz klient podał NIP):
{"mode": "checkout","cashier": {"name": "Jan","number": "5"},"checkout": {"been_paid": "20,00","change": "3,50","total": "16,50","discount": null, "tax_id": "9721002531","payment_type": "CASH"},"lines": [{"nr": 1,"name": "Jabłka","code": "4002","quantity": "2,321","unit": "kg.","price": "3,00","total": "6,96","discount": null},{"nr": 2,"name": "Cola 1L","code": "5449000054227","quantity": "2","unit": "szt.","price": "4,80","total": "9,60","discount": null}]}
5. Stornowanie pozycji (gdy z przykładu nr 3 dokonamy storna ostatniego produktu, to wysyłamy komunikat z przykładu nr 2).
6. Anulowanie paragonu (wówczas wysyłamy komunikat z przykładu nr 1).
Uwaga - Program Pact24CashRegister służy tylko do prezentacji otrzymanych danych i nie weryfikuje poprawności logicznej (np. czy kwota do zapłaty faktycznie wynika z podsumy kwoty za poszczególne produkty). Zakładamy, że dane otrzymane na temat paragonu są zawsze prawdziwe.
Komunikacja z programem Pact24CashRegister
Przesyłanie powyższych komunikatów do programu Pact24CashRegister odbywać się może na dwa sposoby:I. REST API (zalecany):
Do tego celu wykorzystywana jest metoda
gdzie
Przykład wysłania komunikatu:
Należy wówczas:
a) przechwycić wyjątek
b) kontynuować pracę jakby wszystko odbyło się prawidłowo.
Dzięki temu gdy komputer z Pact24CashRegister będzie ponownie aktywny, wszystko zacznie samoczynnie działać (nie będzie konieczny restart programu kasowego).
Do tego celu wykorzystywana jest metoda
POST dla adresu http://adres_ip/update gdzie
adres_ip to adres komputera, na którym jest zainstalowany i uruchomiony program Pact24CashRegister (najczęściej jest to localhost).Przykład wysłania komunikatu:
curl -X POST http://localhost/update -d @plik_z_komunikatem.jsonII. Poprzez zapis do pliku w formacie JSON
Obsługa wyjątków
Zaleca się obsługę zdarzenia, gdy host (komputer z Pact24CashRegister) będzie niedostępny.Należy wówczas:
a) przechwycić wyjątek
b) kontynuować pracę jakby wszystko odbyło się prawidłowo.
Dzięki temu gdy komputer z Pact24CashRegister będzie ponownie aktywny, wszystko zacznie samoczynnie działać (nie będzie konieczny restart programu kasowego).