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 paragon
Obiekt
cashier
:- nie jest wymagany
- String
- atrybut name
to nazwa kasjera, jaka jest prezentowana klientowi
- atrybut number
to numer kasjera w systemie
Obiekt
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_id
to nr NIP klienta. Domyślnie wartośćnull
lub 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 atrubytmode
ma 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:{2. Dodanie pierwszego produktu:
"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
}
{ "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.json
II. 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).