Documentatie driver DxPrint v1.0.18


Descarcare si instalare

Pentru a descarca driverul este nevoie sa stiti exact pentru ce sistem de operare il doriti, si in functie de acesta sa-l descarcati de pe prima pagina din sectiunea Descarcari. Este recomandat sa-l descarcati de aici ori de cate ori este nevoie pentru ca in acest mod veti avea tot timpul ultima versiune de driver.

Daca folositi navigatorul Chrome dupa ce se alege directorul unde doriti sa salvati arhiva, exista probabilitatea sa va apara o alerta de securitate, la care trebuie sa alegeti "Pastrati" sau "Keep". Pentru a va asigura ca driverul este sigur dorim sa va informam ca acesta este semnat cu certificat de securitate care a fost dobandit in urma unor verificari ale societatii noastre din partea unor institutii internationale, in cazul nostru Comodo.

Daca folositi navigatorul Internet Exporer sau Firefox nu trebuie decat sa alegeti directorul unde sa salvati arhiva.

Dupa descarcare trebuie sa dezarhivati arhiva, care poate fi cu numele de dxprint.zip in cazul sistemului de operare Windows, dxprint_linux.zip in cazul sistemului de operare Linux sau dxprint_mac.zip pentru sistemul de operare MacOS.

Dezarhivarea pe Windows se poate face prin click dreapta pe arhiva, alegeti "Extract All" si dupa acest pas trebuie sa alegeti unde doriti sa se dezarhiveze. Pentru sistemul de operare Linux se alege meniul de click dreapta si se alege "Extract Here". Pentru sistemul de operare MacOS este necesar sa dati dublu click pe arhiva si aceasta se va dezarhiva automat.

Dupa dezarhivare directorul rezultat va contine driverul cu numele de dxprint.exe (sau dxprint in cazul Linux sau MacOS), fisierul de configurare cu numele de config.json si un director cu numele de bonuri_exemple care contine peste 38 de bonuri care pot fi folosite imediat ca si teste.

Cerintele minime de rulare ale driverului sunt:
Pentru Windows este necesara versiunea Windows XP SP3 sau mai noua.
Pentru Linux este necesar un kernel 2.6.23 sau mai mare (de la Centos 6 inclusiv in sus).
Pentru MacOS este necesara versiunea Snow Leopard 10.6 sau mai noua.


Configurare

Fisierul de configurare este in format JSON, si este foarte usor de modificat. Tot ce aveti nevoie este un editor de text cum ar fi Wordpad (Windows), Text Editor (Linux) sau TextEdit (MacOS).

{
"echipament": {
"tipEchipament": "datecs",
"port": "COM1",
"baudRate": 115200,
"numarOperator": 1,
"parolaOperator": "0001",
"numarLogic": 1,
"connTimeout": 30
},
"rulare": {
"rezident": false,
"directorBonuri": "bonuri",
"ftpServer": "",
"ftpUtilizator": "",
"ftpParola": "",
"ftpDirectorBonuri": "",
"ftpIntervalVerificareInSecunde": 300,
"httpServerActiv": false,
"httpPort": 8090,
"httpUtilizator": "",
"httpParola": "",
"httpPermiteListareDirBonuri": true,
"embedded": false,
"corsActiv": false,
"logLevel": "INFO",
},
"general": {
"directorBonuriExecutate": "executate",
"directorBonuriRaspuns": "raspuns",
"generareFisierCuNrBonFiscal": true,
"directorRapoarteAnaf": "ANAF",
"extensieFisierBon": "inp,bon",
"intervalPastrareBonuriInDirector": 7,
"tiparesteRaportZAutomat": true,
"raspundeCuNrEroareInFisierRaspuns": false,
"transformaCifDinTextPublicitarInFactura": "",
"trimiteRaportZPeEmail": "",
"prevalidareValoareBon": "false",
"ziDinLunaPentruExtragereAutomataFisiereXml": 0,
"trimiteFisiereXmlPeEmail": "",
"httpProxy": "",
"tiparesteRaportPluInainteDeRaportZ": false,
"nrMaximRapoarteZNetrimise": 0,
"nrMaximRapoarteZNetrimiseNotificare": 0,
"mapareModalitatiPlata": [
{
"modalitate": "NUMERAR",
"pozitie": 0
},
{
"modalitate": "CARD",
"pozitie": 1
},
{
"modalitate": "CREDIT",
"pozitie": 2
},
{
"modalitate": "TICHETE_MASA",
"pozitie": 3
},
{
"modalitate": "TICHETE_VALORICE",
"pozitie": 4
},
{
"modalitate": "VOUCHER",
"pozitie": 5
},
{
"modalitate": "PLATA_MODERNA",
"pozitie": 6
},
{
"modalitate": "CARD_AVANS_NUMERAR",
"pozitie": 7
},
{
"modalitate": "ALTE_METODE",
"pozitie": 8
}
]
},
"licenta": "Cumpara licenta de pe www.dxprint.ro",
"versiune": 10
}

Acesta este format din 5 sectiuni principale echipament, rulare, general, licenta si versiune.

a) Sectiunea echipament:

Dupa instalarea adaptorului de la usb la serial in calculator, este recomandat sa verificati in Device Manager(Windows) sau in /dev/ttyXXX (Linux, MacOS) si sa identificati numarul portului COM. Dupa identificare acesta trebuie sa fie de forma COM1, COM2, COMXX pentru Windows, si sub forma de /dev/ttyACM0, /dev/ttyACM1, /dev/ttyACMX pentru Linux si MacOS. Aceasta informatie trebuie introdusa in sectiunea port din fisierul de configurare. Valoare implicita COM1.

Daca doriti sa faceti conectarea pe TCP/IP atunci trebuie sa specificati portul sub forma tcp://ip:port. Exemplu: tcp://192.168.1.23:3999.
De obicei casele care permit conectarea pe retea au setat portul 3999 dar acesta se poate afla prin comanda dxprint.exe -sn.

Viteza de comunicatie este de obicei setata in casa de marcat la 115200, dar daca este nevoie se poate modifica direct din sectiunea baudRate conform cu viteza setata in casa. De preferat ca viteza setata in casa sa fie trecuta si in Device Manager la viteza portului COM pentru a nu exista discrepante in comunicarea dintre driver si casa de marcat. Pentru conectarea prin TCP/IP acest parametru este ignorat. Valoare implicita 115200.

De retinut faptul ca daca echipamentul are setata o viteza mai mica de 57600 exista probabilitatea ca informatiile trimise sau primite dintre echipament si driver sa nu fie receptionate in intregime, ceea ce va rezulta in informatii afisate eronate sau a netiparirii bonului fiscal.

Nou tipEchipament reprezinta tipul de echipament la care se doreste conectarea. Acesta este datecs. Valoarea initiala este datecs.

numarOperator reprezinta utilizatorul setat in casa de marcat. Echipamentul fiscal este programat initial cu numarul de operator 1.

parolaOperator reprezinta parola utilizatorului setat in casa de marcat. Echipamentul fiscal este programat initial cu parola de operator 0001.

connTimeout reprezinta timpul de asteptare in secunde al driverului pana cand primeste un raspuns de la echipament. Valoare initiala este de 30 de secunde.


b) Sectiunea rulare:

Driverul are doua modalitati de rulare: rezident si nerezident. Pentru a rula in modul rezident este nevoie sa treceti valoarea true la optiunea rezident. In modul rezident driverul monitorizeaza daca in directorul specificat in optiunea directorBonuri exista fisiere de bon noi si pe masura ce acestea sunt adaugate in acest director driverul le prelucreaza pe fiecare in parte.

In cazul in care se doreste ca driverul sa lucreze in modul nerezident atunci acesta asteapta in momentul in care este lansat numele fisierului de bon dorit pentru tiparire, ca si exemplu lansarea in modul nerezident se face sub forma dxprint.exe <bon.inp>, <bon.inp> putand fi un fisier din directorul driverului sau daca este situat in alt director atunci apelarea lui se va face prin cale absoluta si anume dxprint.exe c:\bon.inp.

Toate optiunile de mai jos sunt valabile doar atunci cand driverul ruleaza in modul rezident (FTP , HTTP) sau in modul embedded (doar HTTP).

ftpServer reprezinta adresa de conectare a serverului FTP la care driverul se conecteaza pentru a putea prelua bonurile generate in directorul specificat prin optiunea ftpDirectorBonuri. Adresa de conectare trebuie sa fie trecuta sub forma ip:port sau hostname:port. Daca portul de conectare este cel standard 21 atunci adresa de conectare poate fi trecuta si fara port.

ftpUtilizator reprezinta utilizatorul pentru conectarea la serverul FTP. In cazul in care serverul permite si conectare Anonymous este obligatoriu sa se specifice numele de utilizator ca fiind Anonymous iar la parola trebuie completat orice.

ftpParola reprezinta parola utilizatorului de server FTP. In cazul in care serverul permite si conectare Anonymous este obligatoriu ca acest camp sa fie completat.

ftpDirectorBonuri reprezinta directorul din cadrul serverului FTP de unde vor fi extrase bonurile fiscale. Ex: bonuri/generate, bonuri. Driverul va incerca sa schimbe in momentul conectarii directorul in cel specificat aici.

ftpIntervalVerificareInSecunde reprezinta intervalul in secunde de verificare a bonurilor noi in directorul specificat din cadrul serverului FTP. Valoare minima 60 de secunde.

Pentru mai multe informatii referitoare la modul de lucru cu un director de pe un server FTP gasiti in sectiunea Printare bonuri din director FTP.

httpServerActiv reprezinta optiunea prin care daca este true se va porni un web server pe portul ales in optiunea httpPort prin care se pot printa bonurile direct printr-un apel POST catre endpointul /bonuri.

httpPort reprezinta optiunea se poate seta portul pentru serverul HTTP. Acest port trebuie sa fie cuprins intre 1024 - 65535.

httpUtilizator reprezinta numele de utilizator dorit pentru protejarea serverului web prin autentificare de tip Basic Auth.

httpParola reprezinta parola de utilizator dorit pentru protejarea serverului web. Doar in momentul in care utilizatorul si parola sunt specificate autentificarea va fi activa.

httpPermiteListareDirBonuri reprezinta optiunea prin care daca este true se va putea accesa din interfata web al driverului disponibila din browser la adresa http://IP:port, directoarele de bonuri executate si de bonuri raspuns specificate in configuratia driverului.

embedded reprezinta optiunea prin care daca este true se vor putea trimite apeluri web atat pentru vanzare cat si pentru rapoartele zilnice printr-un webservice HTTP REST JSON. Adresa ip de lansare al webservice-ului depinde strict de optiunea httpServerActiv, si daca aceasta este activa atunci adresa de ip la care va putea fi accesat va fi adresa de retea de forma 192.168.1.x, iar daca aceasta este inactiva atunci serviciul web se va deschide pe adresa de ip 127.0.0.1, iar portul in ambele cazuri se va citi din optiunea httpPort. Si in acest mod protejarea webservice-ului se poate face prin user si parola specificate in optiunile de mai sus.

Pentru mai multe informatii referitoare la modul de integrare cu aplicatii prin websevice JSON gasiti in sectiunea Integrare cu aplicatii prin serviciu web JSON

corsActiv reprezinta optiunea prin care daca este true se vor putea trimite apeluri web din javascript chiar daca requestul nu este de pe acelasi domain. Afla mai multe despre CORS. Aceasta optiune este valabila doar atunci cand optiunea embedded este activa.
Serverul va trimite urmatoarele headere catre client atunci cand aceasta optiune este activa:
- Access-Control-Allow-Origin: *
- Access-Control-Allow-Methods: OPTIONS,GET,POST,PUT,DELETE,HEAD
- Access-Control-Allow-Headers: X-Requested-With, Content-Type, Authorization, Origin, Accept

logLevel reprezinta nivelul de logare afisat in consola si in fisierul de log. Variantele posibile sunt: DEBUG, INFO sau ERROR.


c) Sectiunea general:

Aceasta sectiune contine variabilele generale de folosire a driverului, ele fiind valabile pentru ambele modurile de rulare (rezident/nerezident).

directorBonuriExecutate reprezinta directorul in care vor fi copiate bonurile executate. Bonul copiat aici nu va contine informatiile de raspuns. Acesta poate avea cale relativa de forma "executate" si asta inseamna ca se va crea un director cu numele de executate in directorul unde se afla driverul dxprint.exe, sau cale absoluta de forma "c:\\executate", si asta inseamna ca bonul va fi copiat in directorul c:\executate. De retinut faptul ca pentru calea absoluta este necesara trecerea unui \ suplimentar, de forma c:\\ in loc de c:\.

directorBonuriRaspuns reprezinta directorul in care vor fi generate fisierele de raspuns ale bonurilor executate. Acesta poate avea cale relativa de forma "raspuns" si asta inseamna ca se va crea un director cu numele de raspuns in directorul unde se afla driverul dxprint.exe, sau cale absoluta de forma "c:\\raspuns", si asta inseamna ca fisierul va fi generat in directorul c:\raspuns. De retinut faptul ca pentru calea absoluta este necesara trecerea unui \ suplimentar, de forma c:\\ in loc de c:\. Fisierul de raspuns contine informatiile de raspuns exact ca Fprint cu coduri de eroare Er, Ok, Sd si suplimentar la sfarsitul fiecarui rand in cazul in care unul din randuri nu este valid se va trece si motivul pentru care bonul a fost respins. Suplimentar in cazul in care avem situatii de Lipsa hartie sau Raport Z neefectuat, se va trece pe ultimul rand din fisier acest mesaj de eroare.

generareFisierCuNrBonFiscal reprezinta optiunea prin care daca este true atunci in directorul de directorBonuriRaspuns se va genera suplimentar pe langa fisierul de raspuns si un fisier cu extensia .nrb care contine informatii legate de respectivul bon, cum ar fi numarul bonului, numarul Z-ului, numele fisierului si data de executie : OK;Z=38|NR=503|UNIQUE_ID=bon.txt|2018_07_09_17_00_04_312. De retinut faptul ca acest fisier este generat doar atunci cand bonul a fost executat cu succes. Valoare implicita true.

directorRapoarteAnaf reprezinta directorul in care vor fi extrase fisierele in format XML/P7B din echipamentul fiscal, necesare pentru rapoartarea ANAF. Acesta poate avea cale relativa de forma "anaf" si asta inseamna ca se va crea un director cu numele de "anaf" in directorul unde se afla driverul dxprint.exe, sau cale absoluta de forma "c:\\anaf", si asta inseamna ca fisierul va fi generat in directorul c:\anaf. De retinut faptul ca pentru calea absoluta este necesara trecerea unui \ suplimentar, de forma c:\\ in loc de c:\. Suplimentar driverul in momentul executiei rapoartelor de extragere a fisierelor pentru anaf va genera cate un subdirector pentru fiecare tip de raport. Pentru tipul de raport de extragere pe baza numarului Z va genera un director cu numele Z10-20 care reprezinta practic numerele Z de inceput - sfarsit trimise in linia de comanda. Pentru tipul de raport de extragere pe baza intervalului de timp va genera un director cu numele 09-2018 care repezinta luna - an, informatii extrase din data de pornire trimisa in linia de comanda.

extensieFisierBon reprezinta lista de extensii de fisier bon pe care driverul le prelucreaza. Acestea pot fi trecute cu virgula una dupa alta sub forma inp,bon,txt si asta inseamna ca driverul va prelucra doar acele fisiere de bon care au extensia .inp, .bon sau .txt. Daca un fisier de bon nu are extensia trecuta in aceasta optiune va fi ignorat atat in modul rezident cat si in modul nerezident. Valoare implicita inp,bon.

intervalPastrareBonuriInDirector reprezinta numarul maxim de zile prin care un fisier din directoarele definite in directorBonuriExecutate si directorBonuriRaspuns este pastrat. Toate fisierele care sunt mai vechi de numarul de zile specificat in aceasta optiune vor fi sterse automat la pornirea driverului. Numarul de zile maxim permis este 30. Valoare implicita 7 zile.

tiparesteRaportZAutomat reprezinta optiunea prin care daca este true in momentul in care se doreste tiparirea unui bon fiscal si au trecut mai mult de 24 de ore se va tipari mai intai raportul Z urmat apoi de bonul fiscal dorit pentru tiparire initial. Valoare implicita true.

raspundeCuNrEroareInFisierRaspuns reprezinta optiunea prin care daca este true in momentul in care o comanda dintr-un bon fiscal intampina o eroare in executie se va inregistra respectiva eroare in fisierul raspuns al bonului si va fi trecuta sub forma Er-111024. Pentru integrare aveti nevoie de intreaga lista de erori ce poate fi descarcata de aici. Valoare implicita false.

transformaCifDinTextPublicitarInFactura reprezinta optiunea prin care se poate printa codul fiscal in formatul nou cerut de legislatie chiar daca acesta a fost trimis prin text publicitar si anume comanda P. Ca si exemplu, daca aplicatia va genereaza in acest moment urmatoarea comanda: P,1,______,_,__;CUI client: RO123456789;;;;; veti putea trece in aceasta optiune exact textul CUI client: iar in momentul in care se prevalideaza bonul driverul va sti sa extraga codul fiscal si sa-l printeze in formatul nou. Continutul optiunii este case insensitive.

trimiteRaportZPeEmail reprezinta optiunea prin care se poate trimite email cu raportul Z in momentul in care acesta este lansat si va fi trimis catre adresele de email specificate in aceasta optiune. Pot fi trecute mai multe adrese de email cu virgula una dupa alta. Ca si exemplu: suport@dxprint.ro,test@test.com. Apelul de trimitere raport Z pe email este apel HTTP POST catre webservice-ul https://www.dxprint.ro, iar acesta dupa validare continut primit va trimite email mai departe cu informatiile primite de la driver. De retinut faptul ca aceste informatii sunt trimise in mod securizat, nu sunt stocate pe serverele noastre sau pe serverele Amazon. Firma noastra foloseste serviciile Amazon AWS pentru trimiterea tuturor email-urilor.

prevalidareValoareBon reprezinta optiunea prin care daca este activata bonul nu se trimite catre echipament decat atunci cand sumele sunt validate. Avand aceasta optiune activa sansele ca bonul sa ramana deschis ca nu s-au trimis sumele de total plata corect sunt minime. Valoare implicita false.

ziDinLunaPentruExtragereAutomataFisiereXml reprezinta ziua din luna in care se va incerca exportul fisierelor XML din luna precedenta si trimiterea lor catre o adresa de email daca optiunea trimiteFisiereXmlPeEmail este completata cu cel putin o adresa de email. Exportul se face indiferent daca optiunea trimiteFisiereXmlPeEmail este completata sau nu. Valoarea acestei optiuni poate fi intre 0 si 20. Valoarea 0 inseamna ca aceasta optiune este dezactivata. Intervalul 1 - 20 reprezinta zilele din luna in care se va putea face exportul automat. In momentul in care optiunea este activa iar exportul de fisiere XML se va lansa, aceasta procedura va genera in directorul definit in optiunea directorRapoarteAnaf o arhiva de forma luna-an.zip,(Ex: 04-19.zip). De retinut faptul ca daca avem data de 5 aleasa ca data de export automat a fisierelor XML iar in data de 5 a lunii nu se deschide casa din varii motive driverul va incerca in urmatoarele 2 zile adica pe data de 6 si pe data de 7 acelasi lucru de export automat. In cazul in care pe data de 5 fisierele XML au fost extrase si arhiva a fost creata atunci driverul nu va mai incerca aceasta procedura de export in urmatoarele 2 zile. Valoare implicita 0.

trimiteFisiereXmlPeEmail reprezinta optiunea prin care fisierele XML exportate automat din echipamentul fiscal se pot trimite catre adresa sau adresele de email specificate in aceasta optiune. Este necesar ca optiunea ziDinLunaPentruExtragereAutomataFisiereXml sa fie activa. Pot fi trecute mai multe adrese de email cu virgula una dupa alta. Ca si exemplu: suport@dxprint.ro,test@test.com. Apelul de trimitere fisiere XML pe email este apel HTTP POST catre webservice-ul https://www.dxprint.ro, iar acesta dupa validare continut primit va trimite email mai departe cu informatiile primite de la driver. De retinut faptul ca aceste informatii sunt trimise in mod securizat, nu sunt stocate pe serverele noastre sau pe serverele Amazon. Firma noastra foloseste serviciile Amazon AWS pentru trimiterea tuturor email-urilor.

httpProxy reprezinta serverul proxy folosit pentru cele 2 servicii disponibile in driver de trimitere raport Z pe email si de trimitere fisiere XML generate automat din echipament fiscal pe email. De obicei se foloseste atunci cand calculatorul de client unde este instalat driverul are accesul la internet restrictionat de obicei printr-un proxy. Formatul adresei de proxy este (http|https)://(hostname:ip):port. Apelurile de trimitere raport Z/fisiere XML pe email sunt apeluri http POST catre webservice-ul https://www.dxprint.ro.

tiparesteRaportPluInainteDeRaportZ reprezinta optiunea prin care daca este activata se va tipari raportul de produse Z PLU inainte de raportul Z. Valoare implicita false.

nrMaximRapoarteZNetrimise reprezinta numarul de rapoarte Z nesincronizate cu serverul ANAF. In cazul in care numarul de rapoarte Z nesincronizate depaseste aceasta optiune driverul se va opri din executie. Daca optiunea este 0 inseamna ca aceasta verificare nu se va face. Valoare implicita 0.

nrMaximRapoarteZNetrimiseNotificare reprezinta numarul de rapoarte Z nesincronizate cu serverul ANAF care vor genera o notificare pe email. Daca numarul de rapoarte Z nesincronizate depasteste aceasta optiune se va genera o notificare pe email prin care se transmite ca exista un nr de x rapoarte Z nesincronizate. Aceasta notificare va folosi adresele de email definite in optiunea trimiteRaportZPeEmail. Aceasta notificare va fi trimisa doar daca driverul ruleaza in modul embedded sau rezident. Daca optiunea este 0 inseamna ca aceasta verificare nu se va face. Valoare implicita 0.

Nou mapareModalitatiPlata reprezinta optiunea prin care se pot remapa modalitatile de plata in momentul in care este tiparit bonul fiscal. Aceasta remapare ofera o compatibilitate mai mare cu aplicatiile existente.


d) Sectiunea licenta:

Reprezinta licenta de functionare a driverului. Fara aceasta licenta nu se pot trimite comenzi catre echipamentul fiscal. Este important ca licenta de functionare sa fie trecuta pe o singura linie in locul textului Cumpara licenta de pe www.dxprint.ro, si sa contina inclusiv cele 2 egaluri de la sfarsitul acesteia. Va puteti genera licenta de teste sau de integrare direct din contul de client. Licenta de teste are o valabilitate de 14 zile. Daca nu va este suficient acest interval de timp solicitati o licenta noua de test direct pe adresa de email suport@dxprint.ro.


e) Sectiunea versiune:

Reprezinta versiunea de configuratie pentru driverul de comunicatie, este recomandat sa nu se modifice aceasta valoare.


Printare bonuri din director FTP

In momentul in care driverul ruleaza in mod rezident iar optiunile din cadrul sectiunii ftp sunt completate atunci acesta va porni un ticker care o data la intervalul specificat va incerca sa se conecteze pe serverul FTP in directorul specificat si de acolo sa extraga toate fisierele de comenzi bon care au extensia permisa in lista de extensii din optiunea extensieFisierBon. Trebuie specificat faptul ca verificarea se va face doar dupa prima extensie, si deci in cazul in care in optiune avem specificate 2 sau mai multe extensii sub forma inp,bon,txt atunci driverul va extrage doar fisierele care au extensia .inp. In cazul in care nu exista extensii specificate driverul va extrage fisierele care vor avea extensia .inp.

In momentul in care in directorul FTP exista fisiere, pentru fiecare fisier se va incerca descarcarea acestuia si copierea intr-un fisier cu acelasi nume doar ca i se va mai alipi si _FTP_datetime. In felul acesta in directorul bonurilor executate si a celor de raspuns se vor putea identifica rapid fisierele care au venit dintr-un folder FTP. Dupa ce fisierul a fost creat si salvat in directorul de bonuri al modului rezident specificat prin optiunea directorBonuri fisierul original din directorul FTP va fi sters.

Dupa executia bonului acesta va fi copiat in directoarele de bonuri executate si bonuri raspuns iar fisierul de raspuns va contine si data de executie pe langa data de preluare din directorul FTP.

Este recomandat ca intervalul de verificare sa fie unul realist si anume sa fie raportat la numarul de bonuri generate in respectiva perioada. Durata de tiparire a unui bon depinde de numarul de comenzi existente in acesta.

De specificat faptul ca driverul poate fi folosit in acelasi timp si pentru o aplicatie de vanzare locala care genereaza bonurile in acelasi director de bonuri. Faptul ca sunt extrase bonurile dintr-un director FTP nu incurca cu nimic functionarea locala a driverului. In plus se poate folosi in acelasi timp inclusiv cu primirea bonurilor prin protocol HTTP.


Printare bonuri prin web server/HTTP

In momentul in care driverul ruleaza in mod rezident iar optiunea httpServerActiv este activa atunci acesta va porni un server web prin care poate primi comenzi direct prin protocolul HTTP.

Serverul web creat va avea adresa formata din adresa de IP al calculatorului de pe care se ruleaza driverul si portul specificat in optiunea httpPort. Ca si exemplu daca calculatorul de pe care rulati driverul are ip-ul 192.168.1.23, iar portul ales de dumneavoastra este 8080, puteti accesa interfata web al driverului direct din browser prin apelarea adresei http://192.168.1.23:8080.

De retinut faptul ca exista o probabilitate foarte mare ca sistemul de operare sa va solicite permisiunea de a accepta conexiuni pe portul specificat de dumneavoastra. Este recomandat sa permiteti acest lucru pentru a putea folosi aceasta functionalitate. Trebuie specificat faptul ca serverul creat nu este unul securizat prin certificat SSL, el fiind gandit pentru retele interne cu mai mult de 2 calculatoare si cu o singur echipament fiscal.

Pentru exemplele de mai jos vom folosi adresa serverului ca fiind http://192.168.1.23:8080 pentru a fi mai simplu in exemplificare. Dar trebuie tinut cont de faptul ca adresa dumneavoastra de IP mai mult ca sigur va fi diferita.

Adresa de IP o puteti afla dupa cum urmeaza:
Wndows: Din Command Prompt apeland comanda ipconfig si in rezultat trebuie sa va uitati dupa sectiunea IPv4 Address.
Linux, Mac: Din Terminal apeland comanda ifconfig si la fel in rezultat trebuie sa se verifice sectiunea inet din cadrul eth0, sau en0 in functie de cate placi de retea aveti instalate.

Dupa pornirea driverului cu serverul de http activat puteti verifica ca acesta functioneaza apeland interfata web al driverului direct din browser la adresa http://192.168.1.23:8080. In pagina afisata o sa aveti toate detaliile pentru a putea printa un bon de pe alt calculator din retea sau din alta parte inclusiv sa accesati directoarele de bonuri executate si bonuri raspuns daca optiunea httpPermiteListareDirBonuri este activa.

Pentru a putea un bon prin HTTP aveti nevoie sa trimiteti un apel de tip POST catre adresa http://192.168.1.23:8080 iar continutul body-ului trebuie sa fie liniile de comanda din fisierul de bon. Daca se doreste specificarea numelui de bon aceasta informatie se poate trimite printr-un query param cu numele nume. Ca si exemplu avem un bon cu numele specificat bon.inp care contine un produs cu discount de 10% trimite printr-un apel http:

POST http://192.168.1.23:8080/bonuri?nume=bon.inp HTTP/1.1
Content-Type: text/plain; charset=utf-8
Content-Length: 200

S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;1;0;0;buc;
C,1,______,_,__;1;10.00;;;;
W,1,______,_,__;ic;Reducere client fidelizare: 10%;
W,1,______,_,__;ic;Va multumim!;
T,1,______,_,__;0;;;;;

In cazul in care aveti si autentificarea activata va trebuie sa trimiteti apelul cu headerul Authorization ca in exemplu de mai jos. Autentificarea este de tip Basic Auth.

POST http://192.168.1.23:8080/bonuri?nume=bon.inp HTTP/1.1
Content-Type: text/plain; charset=utf-8
Authorization: Basic dXNlcjpwYXJvbGE=
Content-Length: 200

S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;1;0;0;buc;
C,1,______,_,__;1;10.00;;;;
W,1,______,_,__;ic;Reducere client fidelizare: 10%;
W,1,______,_,__;ic;Va multumim!;
T,1,______,_,__;0;;;;;

Ca si raspuns la apelul de mai sus se va intoarce numele de fisier generat pentru tiparire. In aceasta versiune de driver nu exista validare direct in webserver. Comenzile trimise in body sunt trimise catre driver si pe baza lor se va construi un fisier de bon care va fi copiat in directorul de bonuri specificat prin optiunea directorBonuri si executat ca orice alt bon.

Un raspuns la bonul trimis prin http mai sus va contine in body numele fisierului generat de catre server/driver si trimis catre echipamentul fiscal. Totodata la numele bonului primit va fi alipit si _HTTP_ip_client_port_client_datetime pentru a se putea identifica rapid in fisierele executate sau de raspuns exact de la ce calculator a fost primit, prin ce protocol si la ce data si ora. In cazul exemplulu de mai jos bonul a fost primit de la calculatorul cu ip 192.168.1.50 in data de 12.09.2018 la ora 13:20:36.

HTTP/1.1 200 OK
Content-Type: text/html
Date: Tue, 11 Sep 2018 10:20:36 GMT
Content-Length: 52

bon_inp_HTTP_192_168_1_50_59936_2018_09_12_13_20_36_124.inp

Daca aveti nevoie de ajutor in implementarea unui client http necesar pentru aceasta procedura va rugam sa ne contactati la adresa de email suport@dxprint.ro.

De specificat faptul ca driverul poate fi folosit in acelasi timp si pentru o aplicatie de vanzare locala care genereaza bonurile in acelasi director de bonuri. Faptul ca sunt primite bonuri si prin protocolul HTTP nu incurca cu nimic functionarea locala a driverului. In plus se poate folosi in acelasi timp inclusiv cu extragerea bonurilor din director FTP.


Integrare cu aplicatii prin web service JSON Nou

Aceasta modalitate de integrare poate fi folosita doar atunci cand driverul ruleaza in modul embedded. Pe scurt in modul embedded (sau modul de integrare) este deschis un webserver http intern (127.0.0.1) daca optiunea httpServerActiv este inactiva sau local (192.168.1.x) daca optiunea httpServerActiv este activa in setari. Portul acestui webserver este la fel preluat din optiunea httpPort.

Pentru a putea folosi acest mod este nevoie sa aveti un client http care este capabil sa trimita cereri cu content type application/json catre webserverul intern sau local. In modul de lucru embedded intern adica pe 127.0.0.1, webserverul nu poate fi accesat de niciun echipament din retea, doar calculatorul care ruleaza driverul are acces la acest webserver. Acesta este si lucru recomandat pentru acest mod embedded.

Ca masura de precautie atunci cand se ruleaza in mod local, puteti stabili un user si o parola de http prin optiunile httpUtilizator si httpParola.

Webserverul expune un numar de 15 endpoint-uri JSON necesare pentru a putea comunica prin acest mod cu echipamentul fiscal.
Toate erorile intoarse de acest webservice sunt de tipul Error, obiect detaliat in lista de obiecte folosite de webservice.

Endpoint-urile folosite pentru comunicare sunt detaliate mai jos:



Acest endpoint trimite catre echipamentul fiscal un bon fiscal/nefiscal.


Metoda Cale URI Continut Body Resp. Success Resp. Error Descriere
POST /receipts Obiect SaleReceipt
{
   "statusCode": 200,
   "success": true,
   "content": {
     "numarBonCurent": "367",
     "numarRaportZ": "15",
     "numarTotalBonuriZ": "1"
   }
}
Obiect Error Trimite un bon fiscal/nefiscal catre
echipamentul fiscal.
POST /drawer/open -
{
  "statusCode": 200,
  "success": true
}
Obiect Error Trimite o comanda de deschidere sertar daca acesta este conectat la echipamentul fiscal.
GET /receipts/status -
 {
  "statusCode": 200,
  "success": true,
  "content": {
    "currentReceiptNumber": 705,
    "currentZNumber": 37,
    "receiptTotalCount": 2,
    "zReportBlockDatetime": "14-09-19 13:07:50 DST",
    "isReceiptIssuedAfterZReport": true
  }
 }
Obiect Error Extrage informatiile cu privire la situatia bonurilor fiscale emise de echipamentul fiscal.
GET /receipts/header -
 {
  "statusCode": 200,
  "success": true,
  "content": [
    {
      "index": 0,
      "text": "GESTIONAR.RO SERVICES SRL"
    },
    {
      "index": 1,
      "text": "JUDETUL ILFOV, COMUNA STEFANESTII DE JOS"
    },
    {
      "index": 2,
      "text": "STR. LIBERTATII NR.4"
    }
  ]
 }
Obiect Error Extrage liniile de antet de bon setate in echipamentul fiscal si tiparite pe fiecare bon fiscal.
GET /receipts/footer -
 {
  "statusCode": 200,
  "success": true,
  "content": [
    {
      "index": 0,
      "text": "Va multumim!"
    }
  ]
 }
Obiect Error Extrage liniile de subsol de bon setate in echipamentul fiscal si tiparite pe fiecare bon fiscal.
POST /customer/display List<CustomerDisplayMessage>
{
  "statusCode": 200,
  "success": true
}
Obiect Error Trimite mesaje catre displayul extern atasat de echipamentul fiscal.

Observatii:

Daca metoda http folosita nu este de tipul specificat in dreptul fiecarui endpoint atunci se va primi un status code de 405 - Method Not Allowed.



Acest endpoint solicita din echipamentul fiscal lista cotelor de tva si a unitatilor de masura inregistrate.


Metoda Cale URI Resp. Success Resp. Error Descriere
GET /vats
{
  "statusCode": 200,
  "success": true,
  "content": [
    {
      "index": 1,
      "value": 19
    },
    {
      "index": 2,
      "value": 9
    },
    {
      "index": 3,
      "value": 5
    },
    {
      "index": 4,
      "value": 0
    },
    {
      "index": 5,
      "value": 0
    },
    {
      "index": 6,
      "value": 100.01
    },
    {
      "index": 7,
      "value": 100
    }
  ]
}
Obiect Error Extrage lista cotelor de tva (index + valoare)
din echipamentul fiscal.
GET /units
 {
  "statusCode": 200,
  "success": true,
  "content": [
   {
     "index": 1,
     "value": "BUC"
   },
   {
     "index": 2,
     "value": "KG"
   },
   {
     "index": 3,
     "value": "GR"
   },
   {
     "index": 4,
     "value": "L"
   },
   {
     "index": 5,
     "value": "ML"
   },
   {
     "index": 6,
     "value": "M"
   },
   {
     "index": 7,
     "value": "MP"
   },
   {
     "index": 8,
     "value": "SET"
   },
   {
     "index": 9,
     "value": "BAX"
   },
   {
     "index": 10,
     "value": "POR"
   }
  ]
 }
Obiect Error Extrage lista unitatilor de masura (index + valoare)
din echipamentul fiscal.

Observatii:

Daca metoda de http folosita nu este de tip GET atunci se va primi un status code de 405 - Method Not Allowed.



Acest endpoint poate depune/retrage numerar din echipamentul fiscal.


Metoda Cale URI Resp. Success Resp. Error Descriere
POST /money/deposit?amount=:amount
{
  "statusCode": 200,
  "success": true,
  "content": {
    "cashSum": 40.81,
    "cashIn": 56.26,
    "cashOut": -32.45
  }
}
Obiect Error Depune o suma de bani specificata prin parametrul amount
care este de tip Decimal si trebuie sa fie mai mare sau egala cu 0.
Daca suma de bani este 0 atunci echipamentul nu va printa nimic
si se vor intoarce valorile existente din acel moment in echipamentul fiscal.
POST /money/withdraw?amount=:amount
{
  "statusCode": 200,
  "success": true,
  "content": {
    "cashSum": 40.81,
    "cashIn": 56.26,
    "cashOut": -32.45
  }
}
Obiect Error Retrage o suma de bani specificata prin parametrul amount
care este de tip Decimal si trebuie sa fie mai mare sau egal cu 0.
Daca suma de bani este 0 atunci echipamentul nu va printa nimic
si se vor intoarce valorile existente din acel moment in echipamentul fiscal.

Observatii:

Daca metoda de http folosita nu este de tip POST atunci se va primi un status code de 405 - Method Not Allowed.



Acest endpoint poate extrage o serie de rapoarte din echipamentul fiscal.


Metoda Cale URI Resp. Success Resp. Error Descriere
POST /reports/x
{
  "statusCode": 200,
  "success": true
}
Obiect Error Tipareste un raport X.
POST /reports/z
{
  "statusCode": 200,
  "success": true
}
Obiect Error Tipareste un raport Z.
POST /reports/ecr
{
  "statusCode": 200,
  "success": true
}
Obiect Error Tipareste un raport ECR.
POST /reports/departments
{
  "statusCode": 200,
  "success": true
}
Obiect Error Tipareste un raport pe departamente.
POST /reports/items/groups
{
  "statusCode": 200,
  "success": true
}
Obiect Error Tipareste un raport pe grupe de produse.
POST /reports/plu
{
  "statusCode": 200,
  "success": true
}
Obiect Error Tipareste un raport Z pe articole (PLU).
POST /reports/operators
{
  "statusCode": 200,
  "success": true
}
Obiect Error Tipareste un raport X pe operatori.
POST /reports/detailed/z?from=:from&to=:to
{
  "statusCode": 200,
  "success": true
}
Obiect Error Tipareste un raport detaliat pe numere Z.
Parametrii from si to sunt de tip Integer
mai mari sau egali cu 0.
POST /reports/summary/z?from=:from&to=:to
{
  "statusCode": 200,
  "success": true
}
Obiect Error Tipareste un raport sumar pe numere Z.
Parametrii from si to sunt de tip Integer
mai mari sau egali cu 0.
POST /reports/detailed/date?from=:from&to=:to
{
  "statusCode": 200,
  "success": true
}
Obiect Error Tipareste un raport detaliat pe interval de timp.
Parametrii from si to sunt de tip Date
cu formatul ZI-LUNA-AN (scurt), ex: 31-12-19.
POST /reports/summary/date?from=:from&to=:to
{
  "statusCode": 200,
  "success": true
}
Obiect Error Tipareste un raport sumar pe interval de timp.
Parametrii from si to sunt de tip Date
cu formatul ZI-LUNA-AN (scurt), ex: 31-12-19.
POST /reports/fmz?from=:from&to=:to&sumar=:sumar
 {
  "statusCode": 200,
  "success": true,
  "content": [
    "linie 1 raport",
    "linie 2 raport"
    ]
 }
Obiect Error Listeaza rapoartele Z din memoria fiscala pe interval de timp specificat.
Parametrii:
from - parametru obligatoriu de tip Date format ZI-LUNA-AN (scurt). Ex: 31-12-23, pentru 31 Decembrie 2023,
to - parametru obligatoriu de tip Date format ZI-LUNA-AN (scurt). Ex: 31-12-23, pentru 31 Decembrie 2023,
sumar - parametru optional de tip Boolean. Posibile valori: true sau false. Folosit pentru a returna raportul Z in format detaliat sau sumar.
POST /reports/fmd?from=:from&to=:to&tip_actiune=:tip_actiune&tip_actiune=:tip_document
 {
   "statusCode": 200,
   "success": true,
   "content": [
     {
       "numarZ": "22",
       "numarBonFiscal": "1023",
       "dataRaportZ": "13-08-23 23:59:59 DST",
       "continutDocument": [
            "linie 1 raport",
            "linie 2 raport"
        ]
     },
     {
        "numarZ": "22",
        "numarBonFiscal": "1024",
        "dataRaportZ": "20-08-23 12:09:08 DST",
        "continutDocument": [
            "linie 1 raport",
            "linie 2 raport"
        ]
      },
    ]
  }
Obiect Error Listeaza raport Z sau bon fiscal din memoria fiscala din intervalul de timp specificat.
Parametrii:
from - parametru obligatoriu de tip Datetime format dd-MM-YYTHH:mm:ss. Ex: 01-08-23T00:00:00, pentru 1 August 2023 ora 00:00:00,
to - parametru obligatoriu de tip Datetime format dd-MM-YYTHH:mm:ss. Ex: 31-08-23T23:59:59, pentru 31 August 2023 ora 23:59:59,
tip_actiune - parametru obligatoriu de tip string. Posibile valori: listare sau tiparire.
tip_document - parametru optional de tip string. Posibile valori: raportz sau bonfiscal.
POST /reports/fmd/bynumber?z=:z&bf=:bf&tip_actiune=:tip_actiune
 {
   "statusCode": 200,
   "success": true,
   "content": {
     "numarZ": "22",
     "numarBonFiscal": "1023",
     "dataRaportZ": "13-08-23 23:59:59 DST",
     "continutDocument": [
         "linie 1 raport",
         "linie 2 raport"
     ]
   }
 }
Obiect Error Listeaza raport Z sau bon fiscal din memoria fiscala din intervalul de timp specificat.
Parametrii:
z - parametru obligatoriu de tip integer. Reprezinta numarul Z dorit pentru listare/tiparire.
bf - parametru optional de tip integer. Reprezinta numarul de bon fiscal pentru listare/tiparire.
tip_actiune - parametru obligatoriu de tip string. Posibile valori: listare sau tiparire.
*Daca parametrul bf nu este specificat atunci raportul listat/tiparit va fi cel de raport Z. Daca parametrul este specificat atunci raportul listat/tiparit va fi cel de bon fiscal reprezentat prin combinatia de numar Z si numar bon fiscal asa cum sunt tiparite si pe bonul fiscal.

Observatii:

Daca metoda de http folosita nu este de tip POST atunci se va primi un status code de 405 - Method Not Allowed.



Acest endpoint extrage informatiile despre starea echipamentului fiscal.


Metoda Cale URI Resp. Success Resp. Error Descriere
GET /status
{
  "statusCode": 200,
  "success": true,
  "content": {
    "name": "DP-150",
    "serialNumber": "DB4XXXXXXXXX",
    "firmwareRevision": "410434",
    "firmwareDate": "14Feb18",
    "currentDate": "13-09-19 13:13:13",
    "isZReportRequired": true,
    "isFiscalized": true,
    "isResident": false,
    "isEmbedded": true,
    "ecrMode": "Normal",
    "logicNumber": 1,
    "baudRate": "115200",
    "connInterface": "Auto",
    "firm": {
      "serialNumber": "DB4XXXXXXXXX",
      "fiscalNumber": "1234567890",
      "cif": "CIF: RO123456789",
      "headerLineOne": "GESTIONAR.RO SERVICES SRL",
      "headerLineTwo": "JUDETUL ILFOV, COMUNA STEFANESTII DE JOS",
      "headerLines": [
       {
         "index": 0,
         "text": "GESTIONAR.RO SERVICES SRL"
       },
       {
         "index": 1,
         "text": "JUDETUL ILFOV, COMUNA STEFANESTII DE JOS"
       },
       {
         "index": 2,
         "text": "STR. LIBERTATII NR.4"
       }
      ],
      "footerLines": [
       {
        "index": 0,
        "text": "Va multumim!"
       }
      ]
    },
    "vats": [
      {
        "index": 1,
        "value": 19
      },
      {
        "index": 2,
        "value": 9
      },
      {
        "index": 3,
        "value": 5
      },
      {
        "index": 4,
        "value": 0
      },
      {
        "index": 5,
        "value": 0
      },
      {
        "index": 6,
        "value": 100.01
      },
      {
        "index": 7,
        "value": 100
      }
    ],
    "units": [],
    "isDemoLicence": true,
    "demoLicenceDetail": {
      "serie": "DB4XXXXXXXXX",
      "expirare": "2020-09-13 13:13:13"
    },
    "currentLicence": "Cumpara licenta de pe www.dxprint.ro",
    "driverVersion": "1.0.14 / 13.09.2019"
  }
}
Obiect Error Intoarce informatiile despre echipamentul fiscal si a driverului folosit.
GET /status/network
{
  "statusCode": 200,
  "success": true,
  "content": {
    "macAddress": "68AAD2190145",
    "dhcpActive": true,
    "ipAddress": "",
    "netmask": "",
    "gateway": "",
    "primaryDns": "",
    "secondaryDns": "",
    "lanPort": "3999"
  }
}
Obiect Error Intoarce informatiile de retea folosite de echipamentul fiscal.
GET /status/lastsync
 {
   "statusCode": 200,
   "success": true,
   "content": {
     "lastSyncDate": "2023-04-03T13:58:12Z",
     "lastSyncZNum": 78,
     "lastSyncState": "TRIMIS",
     "lastSyncErrorCode": "0"
    }
 }
Obiect Error Intoarce informatiile de la ultima sincronizare cu serverele ANAF.

Observatii:

Daca metoda de http folosita nu este de tip GET atunci se va primi un status code de 405 - Method Not Allowed.




Obiectele folosite pentru comunicare sunt detaliate mai jos:



Nume camp Tip camp Valoare initiala Obligatoriu JSON
FiscalCode String NULL Nu fiscalCode
IsNonFiscalReceipt Boolean False Nu isNonFiscalReceipt
Discount Discount NULL Nu discount
HeaderComments List<Comment> NULL Nu headerComments
Products List<Product> NULL Da products
Payments List<Payment> NULL Da payments
FooterComments List<Comment> NULL Nu footerComments
Barcodes List<Barcode> NULL Nu barcodes

Observatii:

Daca campul IsNonFiscalReceipt este true atunci bonul va fi considerat nefiscal iar singurele obiecte ce vor fi luate in considerare si procesate sunt FiscalCode, HeaderComments,FooterComments si Barcodes.
Daca campul fiscalCode este completat iar bonul este nefiscal atunci valoarea trimisa in acest camp va fi trecuta pe bon ca un comentariu centrat si ingrosat.

Exemplu:

Bon fiscal care trimite codul fiscal, dar si o lista de 4 produse, din care primele 2 au un discount procentual aplicat pe ele de 15% si respectiv 25%. Incasarea se face integral prin NUMERAR iar la sfarsit avem 2 comentarii fara niciun stil aplicat.

 {
  "isNonFiscalReceipt": false,
  "products": [
   {
    "name": "Produs cu denumire 1",
    "quantity": 1,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "comments": [
     {
      "message": "Reducere client fidelizare: 10%",
      "bold": true,
      "italic": false,
      "underline": false,
      "doubleSize": false,
      "align": 1
     }
    ],
    "discount": {
     "discountType": "PercentDiscount",
     "amount": 10
    },
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 2",
    "quantity": 2,
    "price": 5,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "discount": {
     "discountType": "PercentDiscount",
     "amount": 10
    },
    "isSubtotalDiscount": false
   }
  ],
  "payments": [
   {
    "paymentType": "Cash",
    "amount": 0
   }
  ],
  "footerComments": [
   {
    "message": "Profita de reduceri in magazin online:",
    "bold": true,
    "italic": false,
    "underline": false,
    "doubleSize": false,
    "align": 1
   }
  ],
  "barcodes": [
   {
    "barcode": "www.dxprint.ro",
    "barcodeType": "QRCode"
   }
  ]
}



Nume camp Tip camp Valoare initiala Obligatoriu JSON
Name String NULL Da name
Quantity Decimal NULL Da quantity
Price Decimal NULL Da price
Department Integer 0 Nu department
Vat String NULL Da vat
Unit String buc Nu unit
Discount Discount NULL Nu discount
IsSubtotalDiscount Boolean False Nu isSubtotalDiscount
Comments List<Comment> NULL Nu comments
Barcodes List<Barcode> NULL Nu barcodes

Observatii:

Campul vat este de tip String deoarece se poate trece in el atat valoarea cotei de tva 5%, 9%, 19%, dar se poate trece in el si indexul cotei din echipament de forma 1, 2, 4, etc.
Daca exista definit discount in cadrul unui produs si campul IsSubtotalDiscount este true atunci discountul se va comporta ca un discount de subtotal si se va aplica tuturor produselor din lista de produse pana la acest produs inclusiv.
Comentariile trecute in cadrul produsului vor fi comentarii trecute dupa produs atunci cand este tiparit bonul fiscal.
Codurile de bara trecute in cadrul produsului se vor tipari dupa comentarii daca acestea exista.
Regulile de validare sunt aceleasi ca in cadrul Comenzii de vanzare.

Exemplu:

Un produs cu comentarii stilizate, cota tva trecuta ca valoare procentuala si discount procentual de 10%.

  {
    "name": "Produs cu denumire 1",
    "quantity": 3.000,
    "price": 15.00,
    "department": 1,
    "vat": "19%",
    "unit": "kg",
    "comments": [
     {
      "message": "Reducere client fidelizare: 10%",
      "bold": true,
      "italic": false,
      "underline": false,
      "doubleSize": false,
      "align": 1
     }
    ],
    "discount": {
     "discountType": "PercentDiscount",
     "amount": 10
    },
    "isSubtotalDiscount": false
   }



Nume camp Tip camp Valoare initiala Obligatoriu JSON
DiscountType String NULL Da discountType
Amount Decimal NULL Da amount

Observatii:

Campul DiscountType poate avea urmatoarele valori, acestea fiind case sensitive):

  • PercentDiscount
  • ValueDiscount
  • PercentIncrease
  • ValueIncrease

Exemplu:

Discount procentual de 25%.

{
 "discountType": "PercentDiscount",
 "amount": 25
}



Nume camp Tip camp Valoare initiala Obligatoriu JSON
PaymentType String NULL Da paymentType
Amount Decimal NULL Da amount

Observatii:

Campul Amount daca este 0 va fi considerat ca incasare integrala pe suma bonului respectiv.
Campul PaymentType poate avea urmatoarele valori, acestea fiind case sensitive:

  • Cash
  • Card
  • Credit
  • MealTicket
  • ValueTicket
  • Voucher
  • Modern
  • CardAvansNumerar
  • Other

Exemplu:

Incasare multipla cu 25 lei Cash iar restul pe tipul de plata Card.

[
   {
    "paymentType": "Cash",
    "amount": 25.00
   },
   {
    "paymentType": "Card",
    "amount": 0.00
   }
]



Nume camp Tip camp Valoare initiala Obligatoriu JSON
Message String NULL Da message
Bold Boolean false Nu bold
Italic Boolean false Nu italic
Underline Boolean false Nu underline
DoubleSize Boolean false Nu doubleSize
Align Integer 0 Nu align

Observatii:

Campul Message poate fi gol dar trebuie sa fie existent. Daca nu contine nimic atunci pe bon se va tipari o linie noua.
Campul Align poate avea urmatoarele valori:

  • 0 - Stanga
  • 1 - Centru
  • 2 - Dreapta

Exemplu:

Comentariu cu stil ingrosat si aliniat centru.

 {
      "message": "Reducere client fidelizare: 10%",
      "bold": true,
      "italic": false,
      "underline": false,
      "doubleSize": false,
      "align": 1
 }



Nume camp Tip camp Valoare initiala Obligatoriu JSON
Barcode String NULL Da barcode
BarcodeType String NULL Da barcodeType
BarcodeSize Integer 3 Nu barcodeSize

Observatii:

Campul BarcodeSize poate avea valori intre 1 si 8 si este luata in considerare doar la tipul de cod de bare QRCode.
Campul BarcodeType poate avea urmatoarele valori, acestea fiind case sensitive:

  • Ean8
  • Ean13
  • Code128
  • QRCode

Exemplu:

O lista cu fiecare tip de cod de bare intr-un singur bon.

[
   {
      "barcode": "90311017",
      "barcodeType": "Ean8"
   },
   {
      "barcode": "9780201379624",
      "barcodeType": "Ean13"
   },
   {
      "barcode": "codprodus1",
      "barcodeType": "Code128"
   },
   {
     "barcode": "www.dxprint.ro",
     "barcodeType": "QRCode",
     "barcodeSize": 7
   }
]



Nume camp Tip camp Valoare initiala Obligatoriu JSON
StatusCode Integer NULL Da statusCode
Success Boolean NULL Da success
ErrorMessages List<ErrorMessage> NULL Da errorMessages

Observatii:

Campul Success specifica daca validarea si executia bonului a decurs cu succes.
Campul StatusCode este acelasi status intors de webservice. Toate apelurile intorc 200 pentru executiile cu succes iar 400 pentru cele cu probleme.

Exemplu:

Eroare care reprezinta un produs care are cota de tva specificata incorect.

{
  "statusCode": 400,
  "success": false,
  "errorMessages": [
    {
      "message": "TVA_INCORECT",
      "errorCode": "-1005"
    }
  ]
}



Nume camp Tip camp Valoare initiala Obligatoriu JSON
Message String NULL Nu message
ErrorCode String NULL Da errorCode

Observatii:

Campul ErrorCode reprezinta codul de eroare intors de echipamentul fiscal. Lista de erori intoarse o puteti gasi aici.

Exemplu:

Eroare pentru o cota de tva specificata incorect.

{
  "message": "TVA_INCORECT",
  "errorCode": "-1005"
}



Nume camp Tip camp Valoare initiala Obligatoriu JSON
Location Integer NULL Da location
Message String NULL Nu message

Observatii:

Campul Location reprezinta pozitia textului pe display-ul extern.
0 - Trimite comanda de curatare a display-ului.
1 - Afiseaza pe prima linie (Top) de display.
2 - Afiseaza pe ultima linie (Bottom) de display.

Campul Message poate avea intre 1 si 20 de caractere. Daca location = 0 atunci mesajul nu este obligatoriu.

Exemplu:

Pentru a scrie un text pe prima linie de afisaj extern se face un CLEAR (adica location = 0) si apoi se trimite location = 1 si mesajul dorit.

[
  {
    "location": 0
  },
  {
    "location": 1,
    "message": "Mesaj prima linie"
  }
]



Licentiere

Pentru a functiona driverul are nevoie de o licenta valida. Aceasta poate fi cumparata online direct de pe site in sectiunea Cumpara licenta, sau de la partenerii nostri. Licentierea se face pe baza seriei de echipament fiscal si se plateste o singura data indiferent daca casa a fost refiscalizata pe alta societate.

Va puteti genera licenta de teste sau de integrare direct din contul de client. Licenta de teste are o valabilitate de 14 zile. Daca nu va este suficient acest interval de timp solicitati o licenta noua de test direct pe adresa de email suport@dxprint.ro.


Comenzi din linia de comanda

Pentru a putea vedea lista de comenzi este nevoie sa rulati driverul din linie de comanda sub forma dxprint.exe -h. In momentul lansarii o sa aveti urmatoarea lista de optiuni:

-X Tipareste raportul X, Ex. dxprint.exe -X (Windows), ./dxprint -X (Linux, MacOS)

-Z Tipareste raportul Z, Ex. dxprint.exe -Z (Windows), ./dxprint -Z (Linux, MacOS)

-D Tipareste raportul zilnic pe departamente, Ex. dxprint.exe -D (Windows), ./dxprint -D (Linux, MacOS)

-p Tipareste raportul Z pe articole (PLU) Ex. dxprint.exe -p (Windows), ./dxprint -p (Linux, MacOS)

-o Tipareste raportul X pe operatori Ex. dxprint.exe -o (Windows), ./dxprint -o (Linux, MacOS)

-d=<valoare> Depunere de numerar in casa, Ex. dxprint.exe -d=12.34 (Windows), ./dxprint -d=5 (Linux, MacOS)

-r=<valoare> Retragere de numerar din casa, Ex. dxprint.exe -r=56 (Windows), ./dxprint -r=45.67 (Linux, MacOS)

-t Afisare data curenta setata pe echipamentul fiscal, Ex. dxprint.exe -t (Windows), ./dxprint -t (Linux, MacOS)

-c Seteaza data curenta pe echipamentul fiscal pe baza datei din calculatorul curent, Ex. dxprint.exe -t (Windows), ./dxprint -t (Linux, MacOS)

-xd=<data_inceput,data_sfarsit> Exporta raportul XML necesar pentru ANAF dupa data (format ZI-LUNA-AN_SCURT),
Ex. dxprint.exe -xd=01-11-18,01-12-18
exporta raportul XML pentru intervalul 1 noiembrie 2018 - 1 decembrie 2018. Aceste fisiere vor fi salvate in directorul directorRapoarteAnaf setat in fisierul de configurare.

-xz=<Z_inceput,Z_sfarsit> Exporta raportul XML necesar pentru ANAF dupa numerele Z, Ex. dxprint.exe -xz=10,23 exporta raportul XML pentru Z-urile de la 10 la numarul 23. Aceste fisiere vor fi salvate in directorul directorRapoarteAnaf setat in fisierul de configurare.

-xm Exporta raportul XML necesar pentru ANAF pentru luna precedenta. Aceste fisiere vor fi salvate in directorul directorRapoarteAnaf setat in fisierul de configurare.

-n Tipareste un bon nefiscal de test, Ex. dxprint.exe -n (Windows), ./dxprint -n (Linux, MacOS)

-nm Tipareste un bon nefiscal de test cu linii multiple delimitate prin virgula, Ex. dxprint.exe -nm="linie1 pentru tiparit,linie2 pentru tiparit" (Windows), ./dxprint -nm="linie1 pentru tiparit,linie2 pentru tiparit" (Linux, MacOS)

-s Tipareste informatiile de echipament (serie, fiscalizare, antet, cote tva), Ex. dxprint.exe -s (Windows), ./dxprint -s (Linux, MacOS). Aceasta comanda se poate lansa si fara licenta, ea fiind special conceputa sa puteti vedea seria de echipament pentru a licentia driverul si sa testati ca exista comunicare intre driver si echipament fiscal.

-sn Tipareste informatiile de retea ale echipamentului (mac,adresa ip, port, gateway, dhcp), Ex. dxprint.exe -sn (Windows), ./dxprint -sn (Linux, MacOS). Aceasta comanda se poate lansa si fara licenta, ea fiind special conceputa sa puteti vedea informatiile de echipament si sa testati ca exista comunicare intre driver si echipament fiscal.

-ds trimite comanda de deschidere sertar daca acesta este conectat la echipamentul fiscal.

-tva Salveaza cotele de tva specificate in linia de comanda.
Ex. dxprint.exe -tva=19,9,5,0 - salveaza cotele dupa cum urmeaza, pozitia 1 = 19%, pozitia 2 = 9%, pozitia 3 = 5% si pozitia 4 = 0%,
Ex. dxprint.exe -tva=19,5 - va inregistra pe primele doua pozitii cotele 19 si respectiv 5 iar pe urmatoarele 2 va inregistra valoarea 0.

-licence Solicita o licenta trial de 14 zile pentru a testa acest driver. Tot procesul este automatizat si necesita doar conexiune la internet.
Ex. dxprint.exe -licence

-syncstatus Tipareste informatiile ultimei sincronizari cu serverul ANAF, Ex. dxprint.exe -syncstatus (Windows), ./dxprint -syncstatus (Linux, MacOS)

Nou -fmz Afiseaza rapoartele Z din memoria fiscala. Ex. dxprint.exe -fmz=01-09-23,01-12-23 (Windows) - Afiseaza rapoartele Z asa cum se regasesc in memoria fiscala in intervalul 1 Septembre 2023 - 1 Decembrie 2023, ./dxprint -fmz=01-09-23,01-12-23 (Linux, MacOS)

Nou -fmd Afiseaza documentele Z si bonurile fiscale din memoria fiscala a echipamentului.
Ex. dxprint.exe fmd=01-11-23T00:00:00,01-12-23T23:59:59 -{tip_actiune} -{tip_document} (Windows),
./dxprint fmd=01-11-23T00:00:00,01-12-23T23:59:59 -{tip_actiune} -{tip_document} (Linux, MacOS)
-{tip_actiune} - {tip_actiune} poate avea una din cele doua valori: listare sau tiparire
-{tip_document} - {tip_document} poate avea una din cele doua valori: raportz sau bonfiscal

Pentru a lista toate rapoartele Z din memoria fiscala din intervalul 01.08.2023 - 31.08.2023 trebuie sa lansam comanda:
./dxprint fmd=01-08-23T00:00:00,31-08-23T23:59:59 -listare -raportz
Pentru a lista toate bonurile fiscale din memoria fiscala din intervalul 01.08.2023 - 31.08.2023 trebuie sa lansam comanda:
./dxprint fmd=01-08-23T00:00:00,31-08-23T23:59:59 -listare -bonfiscal
Pentru a tipari aceste rapoarte pe echipamentul fiscal trebuie specificat tipul de actiune sa fie -tiparire in loc de -listare.
Formatul datei solicitata de acest raport este dd-MM-YYTHH:mm:ss. Ex: 01-12-23T23:59:59 reprezinta data de 1 Decembrie 2023 ora 23:59:59.

-v Afiseaza versiunea de driver, Ex. dxprint.exe -v (Windows), ./dxprint -v (Linux, MacOS)


Rapoarte XML pentru ANAF

Pentru a exporta rapoartele XML din echipamentul fiscal este nevoie sa rulati driverul din linie de comanda cu urmatoarele optiuni:

-xd=<data_inceput,data_sfarsit> Exporta raportul XML necesar pentru ANAF dupa data (format ZI-LUNA-AN_SCURT),
Ex. dxprint.exe -xd=01-11-18,01-12-18
exporta raportul XML pentru intervalul 1 noiembrie 2018 - 1 decembrie 2018. Aceste fisiere vor fi salvate in directorul directorRapoarteAnaf setat in fisierul de configurare.

-xz=<Z_inceput,Z_sfarsit> Exporta raportul XML necesar pentru ANAF dupa numerele Z, Ex. dxprint.exe -xz=10,23 exporta raportul XML pentru Z-urile de la 10 la numarul 23. Aceste fisiere vor fi salvate in directorul directorRapoarteAnaf setat in fisierul de configurare.

Nou -xm Exporta raportul XML necesar pentru ANAF pentru luna precedenta. Aceste fisiere vor fi salvate in directorul directorRapoarteAnaf setat in fisierul de configurare.


Raportare probleme

Pentru a raporta eventuale probleme avem rugamintea sa ne trimiteti pe email la adresa suport@dxprint.ro. Va rugam sa ne specificati si versiunea de driver folosita, informatie care poate fi aflata prin comanda dxprint.exe -v.

Probleme cunoscute:

In momentul in care se doreste conectarea pe portul COM iar echipamentul nu este setat in modul de calculator, sau este oprit, sau nu este conectat corect, acesta va genera eroarea :
Problema deschidere port serial: The system cannot find the file specified.

In momentul in care se doreste conectarea prin modul TCP/IP iar echipamentul nu este setat in modul de calculator, sau este oprit, sau nu este conectat corect, acesta va genera o eroare (timeout) dupa un timp de asteptare de 20 de secunde.

Linux: In momentul in care se doreste conectarea pentru prima data pe portul COM se va genera mesajul:
Problema deschidere port serial: open /dev/ttyACM0: permission denied.
In acest caz trebuie rulata comanda sudo chmod a+rw /dev/ttyACMX, unde X este numarul portului alocat de sistemul de operare, sau daca nu doriti sa oferiti acces la toti utilizatorii pe acest port puteti rula usermod -a -G dialout <user>, unde <user> este utilizatorul la care doriti sa-i permiteti accesul.

In cazul in care echipamentul fiscal ramane fara hartie sau intampina o problema chiar atunci cand urma sau era in timpul tiparirii unui bon, driverul va astepta timp de 120 de secunde pentru a se remedia problema. De cele mai ulte ori se intampla ca bonul sa se opreasca din cauza lipsei de hartie, informatie mentionata in raspunsul driverului. Acesta va genera un mesaj de forma:
Lipsa hartie! Va rugam schimbati rola! Urmatoarea incercare de tiparire va fi peste 5 secunde!

In cazul in care aplicatia utilitara DxPrintApp se lanseaza pe un sistem de operare care are restrictionat prin firewall accesul la internet exista probabilitatea ca aceasta sa fie lansata cu intarziere din cauza verificarii valabilitatii certificatului de code signing cu serverele Comodo. Aceasta problema a fost intalnita pe Windows 8, 10.

In cazul in care aveti nevoie de mai multe informatii cu privire la o eroare avem rugamintea sa verificati si fisierul dxprint.log existent in directorul driverului. Acesta contine informatii suplimentare cu privire la comenzile trimise si la erorile receptionate.


Actualizare la versiune noua

Pentru a putea actualiza driverul este nevoie sa descarcati versiunea noua pentru sistemul dumneavoastra de operare in format arhivat (.zip) disponibila in prima pagina la sectiunea Descarca.

Va recomandam ca din directorul rezultat dupa dezarhivare sa copiati doar executabilul dxprint.exe(Windows) sau dxprint (Linux/MacOS) in directorul dumneavoastra existent de driver pentru a putea face actualizarea. La mesajul daca doriti sa rescrieti fisierul alegeti Yes (Da).
Atentie: Versiunea existenta de driver nu trebuie sa ruleze in momentul in care faceti aceasta operatiune.

Daca versiunea noua de driver contine modificari la structura fisierului de configuratie (config.json) acesta va actualiza automat la prima lansare fisierul de configuratie existent iar optiunile noi adaugate le veti regasi cu valorile initiale.

Daca driverul ruleaza pe sistemul de operare Windows va recomandam sa actualizati si aplicatia existenta in arhiva de driver DxPrintApp.exe. Aceasta aplicatie primeste actualizari cu fiecare actualizare de driver.


Formatul fisierelor de comanda

Urmatoarele comenzi de FPrint sunt compatibile si interpretabile de DxPrint:
S (vanzare), T (total), D (copie bon), P (text publicitar), C (discount/majorare), H (blocare tastatura), F (deblocare tastatura), I (retragere/depunere bani), X (raport X), Z (raport Z).

Legislatia actuala nu permite copie bon fiscal, comanda fiind pastrata doar pentru compatibilitate.
Exista o lista de 2 comenzi care nu exista in driverul FPrint, si anume:
V (afisaj client), K (cod fiscal afisat pe bon)

Suplimentar driverul permite:
a) Transmiterea in comanda de vanzare a unitatii de masura (buc, kg, etc).
b) Transmiterea in comanda de vanzare a cotei tva de forma 19%, pentru compatibilitate se poate transmite si pozitia cotei iar driverul va identifica automat ce cota tva este pe pozitia respectiva.
c) Codul fiscal se poate trimite prin comanda separata K, iar in acel moment bonul fiscal va fi tiparit conform noii legislatii.


Printare bon nefiscal Nou

Se permite printarea bonurilor nefiscale in toate cele 3 moduri disponibile (rezident, nerezident si embedded).

Singura restrictie a acestui mod este faptul ca in bonul nefiscal sunt permise doar 3 comenzi si anume:

Mai sunt permise si comenzile de Discount si de tiparire Cod fiscal doar ca acestea sunt ignorate.
In cazul in care intr-un bon nefiscal se regasesc comenzile de total sau de subtotal atunci bonul nu va fi tiparit si va fi marcat ca eronat.

In sectiunea de Exemple bon veti regasi cateva exemple de bonuri nefiscale.


Comanda de vanzare

S,nr_logic,______,_,__;denumire;pret;cantitate;departament;grupa;tva;0;0;um;

Exemple:
S,1,______,_,__;Produs vanzare cu unitate de masura specificata;19.45;3.905;1;1;19%;0;0;kg;
S,1,______,_,__;Produs vanzare cu cota tva specificata;12.00;1.000;1;1;9%;0;0;buc;
S,1,______,_,__;Produs vanzare cu pozitie tva;12.00;1.000;1;1;2;0;0;buc;
S,1,______,_,__;Produs vanzare fara unitate de masura specificata;19.45;3.905;1;1;19%;0;0;

S Reprezinta comanda de vanzare

nr_logic Reprezinta numarul logic al echipamentului, si se poate modifica din fisierul de configurare optiunea numarLogic. Valoare intre 1 - 99.

denumire Reprezinta denumirea produsului. Setul de caractere permis de echipament este ISO-8859-2. Poate avea un maxim de 72 de caractere.

pret Reprezinta pretul produsului. Acesta poate fi trecut cu pana la maxim 2 zecimale si poate avea valoare negativa pentru operatiunile de anulare.

cantitate Reprezinta cantitatea produsului. Aceasta poate fi trecuta cu pana la maxim 3 zecimale.

departament Reprezinta departamentul produsului. Valoare intre 0 - 99. 0 insemnand ca nu are departament specificat.

grupa Reprezinta grupa produsului. Valoare intre 1 - 99. Aceasta valoare este ignorata la procesarea comenzii.

tva Reprezinta tva-ul produsului. Acesta poate fi trecut ca pozitie (1 - 99) sau ca valoare sub forma de 19%, 5%, 9%. Daca procentul este prezent se va considera ca este trecuta valoarea si se va incerca identificarea cotei trimise cu lista de cote existente in echipamentul fiscal. Daca se trimite pozitia aceasta la fel se va identifica cu pozitiile existente in echipamentul fiscal si se va trimite valoarea de tva specificat prin pozitie sau valoare. Lista de cote tva si pozitii existente in echipamentul fiscal se poate afla prin comanda: dxprint.exe -s.

um Reprezinta unitatea de masura a produsului. Daca nu este specificata atunci driverul va trimite unitatea de masura BUC. In cazul in care se trimite o unitate de masura mai mare de 6 caractere, la echipament se vor trimite doar primele 6 caractere.


Comanda de discount

C,nr_logic,______,_,__;tip_discount;valoare;;;;

Exemple:
C,1,______,_,__;0;15.00;;;;//majorare procentuala de 15%
C,1,______,_,__;1;10.00;;;;//reducere procentuala de 10%
C,1,______,_,__;2;10.00;;;;//majorare valorica de 10 lei
C,1,______,_,__;3;5.00;;;;//reducere valorica de 5 lei

C Reprezinta comanda de discount

nr_logic Reprezinta numarul logic al echipamentului, si se poate modifica din fisierul de configurare optiunea numarLogic. Valoare intre 1 - 99.

tip_discount Reprezinta tipul de actiune. Acesta poate fi:
0 - Majorare procentuala
1 - Reducere procentuala
2 - Majorare valorica
3 - Reducere valorica

valoare Reprezinta procentul/valoarea de reducere/majorare. Acesta poate fi trecut cu pana la maxim 2 zecimale.

Atentie:
Daca comanda de discount apare dupa comanda de subtotal L atunci se va acorda reducere/majorare la toata valoarea bonului.
In caz contrar se va acorda reducere/majorare la produsul anterior comenzii de discount.


Comanda de subtotal

L,nr_logic,______,_,__;

Exemple:
L,1,______,_,__;

L Reprezinta comanda de subtotal.

nr_logic Reprezinta numarul logic al echipamentului, si se poate modifica din fisierul de configurare optiunea numarLogic. Valoare intre 1 - 99.


Comanda de total

T,nr_logic,______,_,__;tip_plata;valoare;;;;

Exemple:
T,1,______,_,__;1;5.65;;;;//Plata prin CARD in valoare de 5.65 lei
T,1,______,_,__;4;5.35;;;;//Plata prin TICHETE VALORICE in valoare de 5.35 lei
T,1,______,_,__;0;;;;;//Plata prin NUMERAR cu total calculat automat
T,1,______,_,__;0;25.87;;;;//Plata prin NUMERAR in valoare de 25.87 lei

T Reprezinta comanda de total.

nr_logic Reprezinta numarul logic al echipamentului, si se poate modifica din fisierul de configurare optiunea numarLogic. Valoare intre 1 - 99.

tip_plata Reprezinta modalitatea de plata acceptata. Acesta poate fi:
0 - Numerar
1 - Card
2 - Credit
3 - Tichete masa
4 - Tichete valorice
5 - Voucher
6 - Plata moderna
7 - Card + avans numerar
8 - Alte metode de plata

valoare Reprezinta valoarea de plata. Aceasta poate fi trecuta cu pana la maxim 2 zecimale.
Daca aceasta nu este specificata se va calcula automat totalul de plata.
Daca modalitatea de plata este 7 - Card + avans numerar, valoarea introdusa trebuie sa fie mai mare decat valoarea totala a bonului.


Comanda de raport X si Z

tip_raport,nr_logic,______,_,__;;;;;;;

Exemple:
X,1,______,_,__;;;;;;;
Z,1,______,_,__;;;;;;;

tip_raport Reprezinta tipul de raport dorit. Acesta poate fi:
X - Raport X
Z - Raport Z

nr_logic Reprezinta numarul logic al echipamentului, si se poate modifica din fisierul de configurare optiunea numarLogic. Valoare intre 1 - 99.

Atentie:
In momentul in care aceste rapoarte sunt executate se va genera in directorul driverului si fisier suplimentar cu totalurile din ziua respectiva intr-un format usor de inteles.


Comanda de raport verificare

R,nr_logic,______,_,__;tip_raport;tip_afisare;data/nr Z inceput;data/nr Z sfarsit;

Exemple:
R,1,______,_,__;6;0;01-12-18;31-12-18;//Raport detaliat pentru perioada 01.12.2018 - 31.12.2018
R,1,______,_,__;1;0;100;200;;;//Raport detaliat pentru intervalul Z 100 - 200.
R,1,______,_,__;2;0;;;//Raport ECR
R,1,______,_,__;3;0;;;//Raport de verificare pe departamente
R,1,______,_,__;4;0;;;//Raport de verificare pe grupe de produse
R,1,______,_,__;5;0;01-12-18;14-12-18;//Raport sumar pentru perioada 01.12.2018 - 14.12.2018
R,1,______,_,__;0;0;20;40;//Raport sumar pentru intervalul Z 20 - 40

R Reprezinta comanda de raport.

nr_logic Reprezinta numarul logic al echipamentului, si se poate modifica din fisierul de configurare optiunea numarLogic. Valoare intre 1 - 99.

tip_raport Reprezinta tipul de raport acceptat. Acesta poate fi:
0 - Raport sumar pe numere Z
1 - Raport detaliat pe numere Z
2 - Raport ECR
3 - Raport pe departamente
4 - Raport grupe produse
5 - Raport sumar pe perioada
6 - Raport detaliat pe perioada

tip_afisare Reprezinta modalitatea de afisare a raportului. Acesta poate fi 0 pentru tiparire pe echipamentul fiscal sau 1 pentru export in fisier extern. In acest moment doar tiparirea este functionala, adica parametrul 0.

data/nr Z inceput Reprezinta data de inceput in format scurt (zi-luna-an_scurt, Ex: 01-12-18) daca tipul de raport este 5 sau 6, sau numarul Z de inceput daca tipul de raport este 0 sau 1. Pentru restul de rapoarte acest parametru este ignorat. Pentru numarul Z valoarea minima admisa este 0.

data/nr Z sfarsit Reprezinta data de sfarsit in format scurt (zi-luna-an_scurt, Ex: 31-12-18) daca tipul de raport este 5 sau 6, sau numarul Z de sfarsit daca tipul de raport este 0 sau 1. Pentru restul de rapoarte acest parametru este ignorat. Atat pentru data cat si pentru numarul Z valoarea trebuie sa fie mai mare decat parametrul data/nr Z inceput.


Comanda de retragere/depunere numerar

I,nr_logic,______,_,__;tip_actiune;valoare;;;;

Exemple:
I,1,______,_,__;0;12.56;;;;//Depunere in valoare de 12.56 lei in sertar
I,1,______,_,__;1;5.89;;;;//Retragere in valoare de 5.89 lei din sertar

I Reprezinta comanda de retragere/depunere numerar.

nr_logic Reprezinta numarul logic al echipamentului, si se poate modifica din fisierul de configurare optiunea numarLogic. Valoare intre 1 - 99.

tip_actiune Reprezinta tipul de actiune dorit. Acesta poate fi:
0 - Depunere bani in sertar
1 - retragere bani din sertar

valoare Reprezinta valoarea retrasa sau depusa. Trebuie sa fie trecuta cu 2 zecimale.


Comanda de tiparire Cod fiscal

K,nr_logic,______,_,__;cod_fiscal;

Exemple:
K,1,______,_,__;RO123456789;
K,1,______,_,__;987654321;

K Reprezinta comanda de tiparire cod fiscal pe bon.

nr_logic Reprezinta numarul logic al echipamentului, si se poate modifica din fisierul de configurare optiunea numarLogic. Valoare intre 1 - 99.

cod_fiscal Reprezinta codul fiscal dorit pentru tiparire pe bonul fiscal.


Comanda de afisaj client

V,nr_logic,______,_,__;tip_actiune;text;

Exemple:
V,1,______,_,__;0;CLEAR;
V,1,______,_,__;1;AFISARE PE LINIA DE SUS;
V,1,______,_,__;2;AFISARE PE LINIA DE JOS;

V Reprezinta comanda de afisare pe afisaj extern.

nr_logic Reprezinta numarul logic al echipamentului, si se poate modifica din fisierul de configurare optiunea numarLogic. Valoare intre 1 - 99.

tip_actiune Reprezinta tipul de actiune dorit. Acesta poate fi:
0 - Sterge afisajul
1 - Tipareste textul pe linia de sus a afisajului
2 - Tipareste textul pe linia de jos a afisajului

text Reprezinta textul dorit pentru afisare. Setul de caractere permis de echipament este ISO-8859-2. Maxim 20 de caractere.


Comanda de text publicitar

P,nr_logic,______,_,__;text;;;;;

Exemple:
P,1,______,_,__;Operator: Ion Popescu;;;;;
P,1,______,_,__;Va multumim!;;;;;
P,1,______,_,__;Discount card fidelizare 20%;;;;;

P Reprezinta comanda de tiparire text publicitar pe bon.

nr_logic Reprezinta numarul logic al echipamentului, si se poate modifica din fisierul de configurare optiunea numarLogic. Valoare intre 1 - 99.

text Reprezinta textul dorit pentru afisare. Setul de caractere permis de echipament este ISO-8859-2. Maxim 42 de caractere.


Comanda de text publicitar cu diverse stiluri

W,nr_logic,______,_,__;tip_afisare;text;

Exemple:
W,1,______,_,__;b;Operator: Ion Popescu;//Text ingrosat
W,1,______,_,__;bu;Va multumim!;//Text ingrosat si subliniat
W,1,______,_,__;;Discount card fidelizare 20%;//Text fara nici un fel de stil
W,1,______,_,__;idc;Discount 20%;//Text italic, de marime dubla care este centrat pe bon
W,1,______,_,__;bur;Tranzactie #1234;//Text ingrosat, subliniat cu aliniere dreapta
W,1,______,_,__;biudc;Text publicitar cu toate stilurile de text;//Text ingrosat, italic, subliniat cu marime dubla si cu aliniere centrata

W Reprezinta comanda de tiparire text publicitar cu diverse stiluri pe bon.

nr_logic Reprezinta numarul logic al echipamentului, si se poate modifica din fisierul de configurare optiunea numarLogic. Valoare intre 1 - 99.

tip_afisare Reprezinta tipul de afisare dorit. Se pot folosi mai multe stiluri in aceeasi comanda. Acesta poate fi:
b - Ingrosat
i - Italic
u - Subliniat
d - Marime dubla text
l - Aliniere stanga (implicit)
c - Aliniere centru
r - Aliniere dreapta

text Reprezinta textul dorit pentru afisare. Setul de caractere permis de echipament este ISO-8859-2. Maxim 42 de caractere.


Comanda de tiparire cod de bare

Q,nr_logic,______,_,__;tip_codbare;codbare;marime;

Exemple:
Q,1,______,_,__;1;12345670;//Cod de bare de tipul EAN8
Q,1,______,_,__;2;1234567890128;//Cod de bare de tipul EAN13
Q,1,______,_,__;3;dxprint-1234565;//Cod de bare de tipul Code128
Q,1,______,_,__;4;www.dxprint.ro;//Cod de bare de tipul QRCode fara sa fie specificat parametrul de marime
Q,1,______,_,__;4;www.dxprint.ro;5;//Cod de bare de tipul QRCode cu marimea de 5

Q Reprezinta comanda de tiparire a unui cod de bare pe bonul fiscal.

nr_logic Reprezinta numarul logic al echipamentului, si se poate modifica din fisierul de configurare optiunea numarLogic. Valoare intre 1 - 99.

tip_codbare Reprezinta tipul de cod de bare dorit. Acesta poate fi:
1 - EAN8
2 - EAN13
3 - Code128
4 - QRCode

codbare Reprezinta codul de bare pentru afisare. Marimea maxima variaza in functie de tipul de cod de bare dorit. Aceasta poate fi: 8 caractere numerice pentru EAN8, 13 caractere numerice pentru EAN13, intre 3 si 31 de caractere alfanumerice pentru Code128, si intre 3 si 279 caractere alfanumerice pentru QRCode.

marime Reprezinta marimea codului de bare QRCode. Aceasta poate fi intre 1 si 8, 1 reprezentand cea mai mica, iar 8 cea mai mare. Daca nu se specifica marimea are o valoare implicita de 3. Pentru restul codurilor de bare acest parametru poate fi trecut doar ca va fi ignorat.


Configurare driver in SAGA

Pentru a putea tipari bonuri fiscale din aplicatia Saga C cu driverul DxPrint este nevoie sa urmati indicatiile de mai jos:

Din meniul Administrare trebuie ales submeniul Configurare societati. In fereastra deschisa se va alege societatea dorita si din sectiunea Casa de marcat se va selecta optiunea DATECSPRINTER exact ca in chenarul verde din poza de mai jos.

Selectie Casa de marcat

Selectia driverului si a modalitatilor de plata se va face din meniul Operatii submeniul Iesiri. In fereastra deschisa se alege un bon existent sau se va face un bon nou iar dupa finalizarea acestuia se va apasa pe butonul Tiparire bon fiscal. Fereastra deschisa in urma apasarii butonului va arata exact ca in poza de mai jos. Se alege sectiunea de Configurare si vor fi completate informatiile de mai jos:

Program interfata trebuie sa fie selectata optiunea DxPrint iar Modul rezident nu trebuie sa fie bifat. In cazul in care aveti o versiune de Saga mai veche puteti alege din meniu optiunea FiscalWire.

Cale fisier de interfata cu programul de tiparire trebuie aleasa calea executabilului dxprint.exe. In imaginea de mai jos driverul a fost dezarhivat in C:\DXPRINT.

Indice modalitate de incasare trebuie sa fie exact ca in imagine si anume:
Indice 0 - Cash
Indice 4 - Tichete
Indice 1 - Card

Indice cota de TVA trebuie sa coincida cu lista si pozitia cotelor de tva existente in echipament. Aceasta informatie se poate afla prin comanda dxprint.exe -s.

Pentru tiparirea codului fiscal de client pe bonul fiscal este nevoie sa se adauge valoarea CF: in fisierul de configuratie config.json la optiunea transformaCifDinTextPublicitarInFactura, Ex: "transformaCifDinTextPublicitarInFactura": "CF:".

Selectie driver


Exemple de bon

Aceste exemple le regasiti si in arhiva driverului in directorul bonuri_exemple.


Bon cu reducere produs individual si comentarii suplimentare:

Acest bon contine atat codul fiscal al firmei cat si reduceri procentuale per produs cat si text publicitar. Se incaseaza toata suma prin numerar.


K,1,______,_,__;RO78344513;
S,1,______,_,__;Produs de test1;12.12;2.000;2;1;2;0;0;
C,1,______,_,__;1;15.00;;;;
S,1,______,_,__;Produs de test2;175.23;3.000;1;1;1;0;0;
C,1,______,_,__;1;25.00;;;;
P,1,______,_,__;PROMO 2+1;;;;
S,1,______,_,__;Produs de test3;10.24;1.000;1;1;1;0;0;
S,1,______,_,__;Produs de test4;195.00;2.000;1;1;1;0;0;
P,1,______,_,__;VA MULTUMIM!;;;;
P,1,______,_,__;Casier: Ion Popescu;;;;
T,1,______,_,__;0;;;;;

                                                        
    {
     "fiscalCode": "RO78344513",
     "isNonFiscalReceipt": false,
     "products": [
      {
       "name": "Produs de test1",
       "quantity": 2,
       "price": 12.12,
       "department": 2,
       "vat": "2",
       "discount": {
        "discountType": "PercentDiscount",
        "amount": 15
       },
       "isSubtotalDiscount": false
      },
      {
       "name": "Produs de test2",
       "quantity": 3,
       "price": 175.23,
       "department": 1,
       "vat": "1",
       "comments": [
        {
         "message": "PROMO 2+1"
        }
       ],
       "discount": {
        "discountType": "PercentDiscount",
        "amount": 25
       },
       "isSubtotalDiscount": false
      },
      {
       "name": "Produs de test3",
       "quantity": 1,
       "price": 10.24,
       "department": 1,
       "vat": "1",
       "isSubtotalDiscount": false
      },
      {
       "name": "Produs de test4",
       "quantity": 2,
       "price": 195,
       "department": 1,
       "vat": "1",
       "isSubtotalDiscount": false
      }
     ],
     "payments": [
      {
       "paymentType": "Cash",
       "amount": 0
      }
     ],
     "footerComments": [
      {
       "message": "VA MULTUMIM!"
      },
      {
       "message": "Casier: Ion Popescu"
      }
     ]
    }

                                                    

Bon cu discount pe toate produsele:

Acest bon contine 2 produse la care li se aplica un discount de 15% pe intregul bon. Se incaseaza toata suma prin numerar.


S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;1;0;0;buc;
S,1,______,_,__;produs cu denumire 2;5.00;2.000;1;1;1;0;0;buc;
P,1,______,_,__;Bon cu disc. pe intregul bon;;;;
L,1,______,_,__;
C,1,______,_,__;1;15.00;;;;
T,1,______,_,__;0;;;;;

                                                        
 {
  "isNonFiscalReceipt": false,
  "products": [
   {
    "name": "Produs cu denumire 1",
    "quantity": 1,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 2",
    "quantity": 2,
    "price": 5,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "comments": [
     {
      "message": "Bon cu disc. pe intregul bon"
     }
    ],
    "discount": {
     "discountType": "PercentDiscount",
     "amount": 15
    },
    "isSubtotalDiscount": true
   }
  ],
  "payments": [
   {
    "paymentType": "Cash",
    "amount": 0
   }
  ]
}

                                                    

Bon cu discount individual produse:

Acest bon contine 2 produse la care li se aplica un discount individual de 10% si respectiv 5%. Se incaseaza toata suma prin numerar.


S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;1;0;0;buc;
C,1,______,_,__;1;10.00;;;;
S,1,______,_,__;produs cu denumire 2;5.00;2.000;1;1;1;0;0;buc;
C,1,______,_,__;1;5.00;;;;
T,1,______,_,__;0;;;;;

                                                        
{
 "isNonFiscalReceipt": false,
 "products": [
  {
   "name": "Produs cu denumire 1",
   "quantity": 1,
   "price": 10,
   "department": 1,
   "vat": "1",
   "unit": "buc",
   "discount": {
    "discountType": "PercentDiscount",
    "amount": 10
   },
   "isSubtotalDiscount": false
  },
  {
   "name": "Produs cu denumire 2",
   "quantity": 2,
   "price": 5,
   "department": 1,
   "vat": "1",
   "unit": "buc",
   "discount": {
    "discountType": "PercentDiscount",
    "amount": 5
   },
   "isSubtotalDiscount": false
  }
 ],
 "payments": [
  {
   "paymentType": "Cash",
   "amount": 0
  }
 ]
}

                                                    

Bon cu discount la un singur produs si incasare cu multiple tipuri de plata:

Acest bon contine 3 produse din care doar unul are un discount de 10% procentual, iar incasarea se face prin CARD suma de 50 de lei iar numerar restul ramas de plata.


S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;1;0;0;buc;
P,1,______,_,__;Bon cu discount doar la un produs si incasare multipla;;;;
S,1,______,_,__;produs cu denumire 2;5.00;20.000;1;1;1;0;0;buc;
C,1,______,_,__;1;10.00;;;;
S,1,______,_,__;Produs cu denumire 3;10.00;2.000;1;1;1;0;0;buc;
T,1,______,_,__;1;5.00;;;;
T,1,______,_,__;0;;;;;

                                                        
 {
  "isNonFiscalReceipt": false,
  "products": [
   {
    "name": "Produs cu denumire 1",
    "quantity": 1,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "comments": [
     {
      "message": "Bon cu discount doar la un produs si incasare multipla"
     }
    ],
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 2",
    "quantity": 2,
    "price": 5,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "discount": {
     "discountType": "PercentDiscount",
     "amount": 10
    },
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 3",
    "quantity": 2,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "isSubtotalDiscount": false
   }
  ],
  "payments": [
   {
    "paymentType": "Card",
    "amount": 5
   },
   {
    "paymentType": "Cash",
    "amount": 0
   }
  ]
}

                                                    

Bon cu discount valoric la un singur produs:

Acest bon contine 3 produse din care doar unul are un discount valoric de 5 lei. Se incaseaza toata suma prin numerar.


S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;1;0;0;BUC;
S,1,______,_,__;Produs cu denumire 1;10.00;3.453;1;1;1;0;0;KG;
S,1,______,_,__;produs cu denumire 2;10.00;2.000;1;1;1;0;0;buc;
C,1,______,_,__;3;5.00;;;;
T,1,______,_,__;0;;;;;

                                                        
 {
  "isNonFiscalReceipt": false,
  "products": [
   {
    "name": "Produs cu denumire 1",
    "quantity": 1,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "BUC",
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 2",
    "quantity": 3.453,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "KG",
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 3",
    "quantity": 2,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "BUC",
    "discount": {
     "discountType": "ValueDiscount",
     "amount": 5
    },
    "isSubtotalDiscount": false
   }
  ],
  "payments": [
   {
    "paymentType": "Cash",
    "amount": 0
   }
  ]
}

                                                    

Bon cu mai multe produse si tipuri de plata:

Acest bon contine 5 produse si care se incaseaza dupa cum urmeaza: CARD - 0.50 lei, TICHETE MASA - 0.50 lei iar restul prin NUMERAR. Suplimentar contine si codul fiscal dar si un comentariu cu numele operatorului.


K,1,______,_,__;RO123456789;
S,1,______,_,__;Articol 1;1.00;1.000;1;1;1;0;0;buc;
S,1,______,_,__;Articol 2;1.00;1.000;1;1;1;0;0;
S,1,______,_,__;Articol 3;1.00;1.000;1;1;19%;0;0;
S,1,______,_,__;Articol 4;1.00;1.000;1;1;9%;0;0;
S,1,______,_,__;Articol 5;1.00;1.000;1;1;1;0;0;
P,1,______,_,__;Operator: Ion Popescu;;;;
T,1,______,_,__;1;0.50;;;;
T,1,______,_,__;2;0.50;;;;
T,1,______,_,__;0;


S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;19%;0;0;buc;
S,1,______,_,__;produs cu denumire 2;5.00;2.000;1;1;19%;0;0;buc;
P,1,______,_,__;Bon cu multiple tipuri de plata;;;;
T,1,______,_,__;1;5.65;;;;
T,1,______,_,__;3;5.35;;;;
T,1,______,_,__;0;;;;;

                                                        
 {
     "fiscalCode": "RO123456789",
     "isNonFiscalReceipt": false,
     "products": [
      {
       "name": "Articol 1",
       "quantity": 1,
       "price": 1,
       "department": 1,
       "vat": "1",
       "unit": "buc",
       "isSubtotalDiscount": false
      },
      {
       "name": "Articol 2",
       "quantity": 1,
       "price": 1,
       "department": 1,
       "vat": "1",
       "isSubtotalDiscount": false
      },
      {
       "name": "Articol 3",
       "quantity": 1,
       "price": 1,
       "department": 1,
       "vat": "19%",
       "isSubtotalDiscount": false
      },
      {
       "name": "Articol 4",
       "quantity": 1,
       "price": 1,
       "department": 1,
       "vat": "9%",
       "isSubtotalDiscount": false
      },
      {
       "name": "Articol 5",
       "quantity": 1,
       "price": 1,
       "department": 1,
       "vat": "1",
       "isSubtotalDiscount": false
      }
     ],
     "payments": [
      {
       "paymentType": "Card",
       "amount": 0.5
      },
      {
       "paymentType": "Credit",
       "amount": 0.5
      },
      {
       "paymentType": "Cash",
       "amount": 0
      }
     ],
     "footerComments": [
      {
       "message": "Operator: Ion Popescu"
      }
     ]
 }

                                                    
                                                        
 {
  "isNonFiscalReceipt": false,
  "products": [
   {
    "name": "Produs cu denumire 1",
    "quantity": 1,
    "price": 10,
    "department": 1,
    "vat": "19%",
    "unit": "buc",
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 2",
    "quantity": 2,
    "price": 5,
    "department": 1,
    "vat": "19%",
    "isSubtotalDiscount": false
   }
  ],
  "payments": [
   {
    "paymentType": "Card",
    "amount": 5.65
   },
   {
    "paymentType": "MealTicket",
    "amount": 5.35
   },
   {
    "paymentType": "Cash",
    "amount": 0
   }
  ],
  "footerComments": [
   {
    "message": "Bon cu multiple tipuri de plata"
   }
  ]
}

                                                    

Bon cu un produs redus complet:

Acest bon contine 3 produse din care doar unul are un discount procentual de 100%. Se incaseaza toata suma prin numerar.


S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;1;0;0;BUC;
S,1,______,_,__;Produs cu denumire 1;10.00;3.453;1;1;1;0;0;KG;
S,1,______,_,__;produs cu denumire 2;10.00;2.000;1;1;1;0;0;buc;
C,1,______,_,__;1;100.00;;;;
T,1,______,_,__;0;;;;;

                                                        
 {
  "isNonFiscalReceipt": false,
  "products": [
   {
    "name": "Produs cu denumire 1",
    "quantity": 1,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "BUC",
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 2",
    "quantity": 3.453,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "KG",
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 3",
    "quantity": 2,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "discount": {
     "discountType": "PercentDiscount",
     "amount": 100
    },
    "isSubtotalDiscount": false
   }
  ],
  "payments": [
   {
    "paymentType": "Cash",
    "amount": 0
   }
  ]
}

                                                    

Bon cu text publicitar:

Acest bon contine 2 produse si 2 comentarii la inceput si sfarsit de bon. Se incaseaza toata suma prin numerar.


P,1,______,_,__;Inceput bon test;;;;
S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;1;0;0;buc;
S,1,______,_,__;produs cu denumire 2;0.99;2.000;1;1;1;0;0;buc;
P,1,______,_,__;Sfarsit de bon test;;;;
T,1,______,_,__;0;;;;;

                                                        
{
  "isNonFiscalReceipt": false,
  "headerComments": [
   {
    "message": "Inceput bon test"
   }
  ],
  "products": [
   {
    "name": "Produs cu denumire 1",
    "quantity": 1,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 2",
    "quantity": 2,
    "price": 0.99,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "isSubtotalDiscount": false
   }
  ],
  "payments": [
   {
    "paymentType": "Cash",
    "amount": 0
   }
  ],
  "footerComments": [
   {
    "message": "Sfarsit de bon test"
   }
  ]
}

                                                    


Bon nefiscal:

Acest bon nefiscal contine cateva comentarii si un cod de bare QRCode cu un cod promotional.


P,1,______,_,__;Multumim pentru cumparaturi!;;;;
P,1,______,_,__;Intra pe site si ai o surpriza!;;;;
P,1,______,_,__;Codul promotional:;;;;
Q,1,______,_,__;4;Cod122345XYZ;


P,1,______,_,__;Multumim pentru cumparaturi!;;;;
W,1,______,_,__;bc;Profita de reduceri in magazin online:;
Q,1,______,_,__;4;www.dxprint.ro;


Bon cu produse care au cotele tva definite explicit:

Acest bon contine 2 produse care au cotele tva definite ca si valoare procentuala. Se incaseaza toata suma prin numerar.


S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;19%;0;0;buc;
S,1,______,_,__;produs cu denumire 2;5.00;2.000;1;1;5%;0;0;buc;
P,1,______,_,__;Produse cu cote tva diferite;;;;
T,1,______,_,__;0;;;;;

                                                        
  {
     "isNonFiscalReceipt": false,
     "products": [
      {
       "name": "Produs cu denumire 1",
       "quantity": 1,
       "price": 10,
       "department": 1,
       "vat": "19%",
       "unit": "buc",
       "isSubtotalDiscount": false
      },
      {
       "name": "Produs cu denumire 2",
       "quantity": 2,
       "price": 5,
       "department": 1,
       "vat": "5%",
       "unit": "buc",
       "isSubtotalDiscount": false
      }
     ],
     "payments": [
      {
       "paymentType": "Cash",
       "amount": 0
      }
     ],
     "footerComments": [
      {
       "message": "Produse cu cote tva diferite"
      }
     ]
  }

                                                    

Bon cu afisaj client:

Acest bon contine comenzile de tiparire pe cele 2 linii ale afisajului extern.


V,1,______,_,__;0;CLEAR;
V,1,______,_,__;1;Vanzare finalizata;
V,1,______,_,__;2;Va multumim!;


Introducere numerar:

Acest bon contine comanda de introducere numerar in sertar.


I,1,______,_,__;0;12.34;;;;


Retragere numerar:

Acest bon contine comanda de retragere numerar din sertar.


I,1,______,_,__;1;12.34;;;;


Raport X:

Acest bon contine comanda de lansare raport X.


X,1,______,_,__;;;;;;;


Raport Z:

Acest bon contine comanda de lansare raport Z.


Z,1,______,_,__;;;;;;;


Raport zilnic ECR:

Acest bon contine comanda de lansare a raportului zilnic ECR.


R,1,______,_,__;2;0;;;


Raport zilnic pe departamente:

Acest bon contine comanda de lansare a raportului zilnic pe departamente.


R,1,______,_,__;3;0;;;


Raport sumar pe o perioada de timp:

Acest bon contine comanda de lansare a raportului sumar pe intervalul de timp 1 septembrie 2018 - 10 septembrie 2018.


R,1,______,_,__;5;0;01-09-18;10-09-18;


Raport detaliat pe o perioada de timp:

Acest bon contine comanda de lansare a raportului detaliat pe intervalul de timp 1 septembrie 2018 - 10 septembrie 2018.


R,1,______,_,__;6;0;01-09-18;10-09-18;


Raport sumar pe numere Z:

Acest bon contine comanda de lansare a raportului sumar pe numere Z cuprinse intre 1 si 10.


R,1,______,_,__;0;0;1;10;;;


Raport detaliat pe numere Z:

Acest bon contine comanda de lansare a raportului detaliat pe numere Z cuprinse intre 20 si 30.


R,1,______,_,__;1;0;20;30;;;


Bon cu text publicitar cu diferite stiluri:

Acest bon contine 2 produse care au comentarii cu stilurile italic, aliniere centru si aliniere dreapta.


S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;1;0;0;buc;
C,1,______,_,__;1;10.00;;;;
W,1,______,_,__;ir;Reducere client fidelizare: 10%;
S,1,______,_,__;produs cu denumire 2;5.00;2.000;1;1;1;0;0;buc;
W,1,______,_,__;ic;Reducere disp. la mai mult de 5 produse;
W,1,______,_,__;ic;Va multumim!;
T,1,______,_,__;0;;;;;


S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;1;0;0;buc;
C,1,______,_,__;1;10.00;;;;
W,1,______,_,__;bc;Reducere client fidelizare: 10%;
S,1,______,_,__;produs cu denumire 2;5.00;2.000;1;1;1;0;0;buc;
C,1,______,_,__;1;10.00;;;;
W,1,______,_,__;bc;Reducere client fidelizare: 10%;
W,1,______,_,__;bc;Va multumim!;
T,1,______,_,__;0;;;;;


S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;1;0;0;buc;
C,1,______,_,__;1;10.00;;;;
W,1,______,_,__;bdc;Promotie activa: -10%;
S,1,______,_,__;produs cu denumire 2;5.00;2.000;1;1;1;0;0;buc;
C,1,______,_,__;1;20.00;;;;
W,1,______,_,__;bdc;Promotie activa: -20%;
T,1,______,_,__;0;;;;;

                                                        
 {
  "isNonFiscalReceipt": false,
  "products": [
   {
    "name": "Produs cu denumire 1",
    "quantity": 1,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "comments": [
     {
      "message": "Reducere client fidelizare: 10%",
      "bold": false,
      "italic": true,
      "underline": false,
      "doubleSize": false,
      "align": 2
     }
    ],
    "discount": {
     "discountType": "PercentDiscount",
     "amount": 10
    },
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 2",
    "quantity": 2,
    "price": 5,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "comments": [
     {
      "message": "Reducere disp. la mai mult de 5 produse",
      "bold": false,
      "italic": true,
      "underline": false,
      "doubleSize": false,
      "align": 1
     },
     {
      "message": "Va multumim!",
      "bold": false,
      "italic": true,
      "underline": false,
      "doubleSize": false,
      "align": 1
     }
    ],
    "isSubtotalDiscount": false
   }
  ],
  "payments": [
   {
    "paymentType": "Cash",
    "amount": 0
   }
  ]
}

                                                    
                                                        
 {
  "isNonFiscalReceipt": false,
  "products": [
   {
    "name": "Produs cu denumire 1",
    "quantity": 1,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "comments": [
     {
      "message": "Reducere client fidelizare: 10%",
      "bold": true,
      "italic": false,
      "underline": false,
      "doubleSize": false,
      "align": 1
     }
    ],
    "discount": {
     "discountType": "PercentDiscount",
     "amount": 10
    },
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 2",
    "quantity": 2,
    "price": 5,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "comments": [
     {
      "message": "Reducere client fidelizare: 10%",
      "bold": true,
      "italic": false,
      "underline": false,
      "doubleSize": false,
      "align": 1
     },
     {
      "message": "Va multumim!",
      "bold": false,
      "italic": true,
      "underline": false,
      "doubleSize": false,
      "align": 1
     }
    ],
    "discount": {
     "discountType": "PercentDiscount",
     "amount": 10
    },
    "isSubtotalDiscount": false
   }
  ],
  "payments": [
   {
    "paymentType": "Cash",
    "amount": 0
   }
  ]
}

                                                    
                                                        
 {
  "isNonFiscalReceipt": false,
  "products": [
   {
    "name": "Produs cu denumire 1",
    "quantity": 1,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "comments": [
     {
      "message": "Promotie activa: -10%",
      "bold": true,
      "italic": false,
      "underline": false,
      "doubleSize": true,
      "align": 1
     }
    ],
    "discount": {
     "discountType": "PercentDiscount",
     "amount": 10
    },
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 2",
    "quantity": 2,
    "price": 5,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "comments": [
     {
      "message": "Promotie activa: -20%",
      "bold": true,
      "italic": false,
      "underline": false,
      "doubleSize": true,
      "align": 1
     }
    ],
    "discount": {
     "discountType": "PercentDiscount",
     "amount": 20
    },
    "isSubtotalDiscount": false
   }
  ],
  "payments": [
   {
    "paymentType": "Cash",
    "amount": 0
   }
  ]
}

                                                    

Bon cu produse care au cod de bare EAN8:

Bon cu 2 produse care au discount de 10% si care suplimentar dupa fiecare produs au un cod de bare EAN8 tiparit.


S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;1;0;0;buc;
C,1,______,_,__;1;10.00;;;;
Q,1,______,_,__;1;90311017;
W,1,______,_,__;bc;Reducere client fidelizare: 10%;
S,1,______,_,__;produs cu denumire 2;5.00;2.000;1;1;1;0;0;buc;
C,1,______,_,__;1;10.00;;;;
Q,1,______,_,__;1;98746576;
W,1,______,_,__;bc;Reducere client fidelizare: 10%;
T,1,______,_,__;0;;;;;


S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;1;0;0;buc;
Q,1,______,_,__;1;64538624;
S,1,______,_,__;produs cu denumire 2;5.00;2.000;1;1;1;0;0;buc;
Q,1,______,_,__;1;90864827;
T,1,______,_,__;0;;;;;

                                                        
 {
  "isNonFiscalReceipt": false,
  "products": [
   {
    "name": "Produs cu denumire 1",
    "quantity": 1,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "comments": [
     {
      "message": "Reducere client fidelizare: 10%",
      "bold": true,
      "italic": false,
      "underline": false,
      "doubleSize": false,
      "align": 1
     }
    ],
    "barcodes": [
     {
      "barcode": "90311017",
      "barcodeType": "Ean8"
     }
    ],
    "discount": {
     "discountType": "PercentDiscount",
     "amount": 10
    },
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 2",
    "quantity": 2,
    "price": 5,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "comments": [
     {
      "message": "Reducere client fidelizare: 10%",
      "bold": true,
      "italic": false,
      "underline": false,
      "doubleSize": false,
      "align": 1
     }
    ],
    "barcodes": [
     {
      "barcode": "98746576",
      "barcodeType": "Ean8"
     }
    ],
    "discount": {
     "discountType": "PercentDiscount",
     "amount": 10
    },
    "isSubtotalDiscount": false
   }
  ],
  "payments": [
   {
    "paymentType": "Cash",
    "amount": 0
   }
  ]
}

                                                    
                                                        
 {
  "isNonFiscalReceipt": false,
  "products": [
   {
    "name": "Produs cu denumire 1",
    "quantity": 1,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "barcodes": [
     {
      "barcode": "64538624",
      "barcodeType": "Ean8"
     }
    ],
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 2",
    "quantity": 2,
    "price": 5,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "barcodes": [
     {
      "barcode": "90864827",
      "barcodeType": "Ean8"
     }
    ],
    "isSubtotalDiscount": false
   }
  ],
  "payments": [
   {
    "paymentType": "Cash",
    "amount": 0
   }
  ]
}

                                                    

Bon cu produse care au cod de bare EAN13:

Bon cu 2 produse care au discount de 10% si care suplimentar dupa fiecare produs au un cod de bare EAN13 tiparit.


S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;1;0;0;buc;
C,1,______,_,__;1;10.00;;;;
Q,1,______,_,__;2;9780201379624;
W,1,______,_,__;bc;Reducere client fidelizare: 10%;
S,1,______,_,__;produs cu denumire 2;5.00;2.000;1;1;1;0;0;buc;
C,1,______,_,__;1;10.00;;;;
Q,1,______,_,__;2;9874583923428;
W,1,______,_,__;bc;Reducere client fidelizare: 10%;
T,1,______,_,__;0;;;;;


S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;1;0;0;buc;
Q,1,______,_,__;2;3758493457029;
S,1,______,_,__;produs cu denumire 2;5.00;2.000;1;1;1;0;0;buc;
Q,1,______,_,__;2;8645839201727;
T,1,______,_,__;0;;;;;

                                                        
 {
  "isNonFiscalReceipt": false,
  "products": [
   {
    "name": "Produs cu denumire 1",
    "quantity": 1,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "comments": [
     {
      "message": "Reducere client fidelizare: 10%",
      "bold": true,
      "italic": false,
      "underline": false,
      "doubleSize": false,
      "align": 1
     }
    ],
    "barcodes": [
     {
      "barcode": "9780201379624",
      "barcodeType": "Ean13"
     }
    ],
    "discount": {
     "discountType": "PercentDiscount",
     "amount": 10
    },
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 2",
    "quantity": 2,
    "price": 5,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "comments": [
     {
      "message": "Reducere client fidelizare: 10%",
      "bold": true,
      "italic": false,
      "underline": false,
      "doubleSize": false,
      "align": 1
     }
    ],
    "barcodes": [
     {
      "barcode": "9874583923428",
      "barcodeType": "Ean13"
     }
    ],
    "discount": {
     "discountType": "PercentDiscount",
     "amount": 10
    },
    "isSubtotalDiscount": false
   }
  ],
  "payments": [
   {
    "paymentType": "Cash",
    "amount": 0
   }
  ]
}

                                                    
                                                        
 {
  "isNonFiscalReceipt": false,
  "products": [
   {
    "name": "Produs cu denumire 1",
    "quantity": 1,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "barcodes": [
     {
      "barcode": "3758493457029",
      "barcodeType": "Ean13"
     }
    ],
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 2",
    "quantity": 2,
    "price": 5,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "barcodes": [
     {
      "barcode": "8645839201727",
      "barcodeType": "Ean13"
     }
    ],
    "isSubtotalDiscount": false
   }
  ],
  "payments": [
   {
    "paymentType": "Cash",
    "amount": 0
   }
  ]
}

                                                    

Bon cu produse care au cod de bare Code128:

Bon cu 2 produse care au discount de 10% si care suplimentar dupa fiecare produs au un cod de bare Code128.


S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;1;0;0;buc;
C,1,______,_,__;1;10.00;;;;
Q,1,______,_,__;3;codprodus1;
W,1,______,_,__;bc;Reducere client fidelizare: 10%;
S,1,______,_,__;produs cu denumire 2;5.00;2.000;1;1;1;0;0;buc;
C,1,______,_,__;1;10.00;;;;
Q,1,______,_,__;3;9874-tr-sm;
W,1,______,_,__;c;Tranzactie #:;
Q,1,______,_,__;3;250990;
T,1,______,_,__;0;;;;;


S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;1;0;0;buc;
Q,1,______,_,__;3;bl-123;
S,1,______,_,__;produs cu denumire 2;5.00;2.000;1;1;1;0;0;buc;
Q,1,______,_,__;3;cod0989-sm;
W,1,______,_,__;c;Tranzactie #:;
Q,1,______,_,__;3;19997678;
T,1,______,_,__;0;;;;;

                                                        
 {
  "isNonFiscalReceipt": false,
  "products": [
   {
    "name": "Produs cu denumire 1",
    "quantity": 1,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "comments": [
     {
      "message": "Reducere client fidelizare: 10%",
      "bold": true,
      "italic": false,
      "underline": false,
      "doubleSize": false,
      "align": 1
     }
    ],
    "barcodes": [
     {
      "barcode": "codprodus1",
      "barcodeType": "Code128"
     }
    ],
    "discount": {
     "discountType": "PercentDiscount",
     "amount": 10
    },
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 2",
    "quantity": 2,
    "price": 5,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "barcodes": [
     {
      "barcode": "9874-tr-sm",
      "barcodeType": "Code128"
     }
    ],
    "discount": {
     "discountType": "PercentDiscount",
     "amount": 10
    },
    "isSubtotalDiscount": false
   }
  ],
  "payments": [
   {
    "paymentType": "Cash",
    "amount": 0
   }
  ],
  "footerComments": [
   {
    "message": "Tranzactie #:",
    "bold": false,
    "italic": false,
    "underline": false,
    "doubleSize": false,
    "align": 1
   }
  ],
  "barcodes": [
   {
    "barcode": "250990",
    "barcodeType": "Code128"
   }
  ]
}

                                                    
                                                        
 {
  "isNonFiscalReceipt": false,
  "products": [
   {
    "name": "Produs cu denumire 1",
    "quantity": 1,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "barcodes": [
     {
      "barcode": "bl-123",
      "barcodeType": "Code128",
      "barcodeSize": 0
     }
    ],
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 2",
    "quantity": 2,
    "price": 5,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "barcodes": [
     {
      "barcode": "cod0989-sm",
      "barcodeType": "Code128"
     }
    ],
    "isSubtotalDiscount": false
   }
  ],
  "payments": [
   {
    "paymentType": "Cash",
    "amount": 0
   }
  ],
  "footerComments": [
   {
    "message": "Tranzactie #:",
    "bold": false,
    "italic": false,
    "underline": false,
    "doubleSize": false,
    "align": 0
   }
  ],
  "barcodes": [
   {
    "barcode": "19997678",
    "barcodeType": "Code128"
   }
  ]
}

                                                    

Bon cu produse si cod de bare QRCode:

Bon cu 2 produse care au discount si care suplimentar contine la sfarsit o adresa de internet in format de cod de bare QRCode de marime standard.


S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;1;0;0;buc;
C,1,______,_,__;1;10.00;;;;
W,1,______,_,__;bc;Reducere client fidelizare: 10%;
S,1,______,_,__;produs cu denumire 2;5.00;2.000;1;1;1;0;0;buc;
W,1,______,_,__;bc;Profita de reduceri in magazin online:;
Q,1,______,_,__;4;www.dxprint.ro;
T,1,______,_,__;0;;;;;


S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;1;0;0;buc;
S,1,______,_,__;produs cu denumire 2;5.00;2.000;1;1;1;0;0;buc;
W,1,______,_,__;ic;Profita de reduceri in magazin online:;
Q,1,______,_,__;4;www.dxprint.ro;
T,1,______,_,__;0;;;;;


S,1,______,_,__;Produs cu denumire 1;10.00;1.000;1;1;1;0;0;buc;
C,1,______,_,__;1;10.00;;;;
W,1,______,_,__;bc;Reducere client fidelizare: 10%;
S,1,______,_,__;produs cu denumire 2;5.00;2.000;1;1;1;0;0;buc;
W,1,______,_,__;bc;Profita de reduceri in magazin online:;
Q,1,______,_,__;4;www.dxprint.ro;7;
T,1,______,_,__;0;;;;;

                                                        
 {
  "isNonFiscalReceipt": false,
  "products": [
   {
    "name": "Produs cu denumire 1",
    "quantity": 1,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "comments": [
     {
      "message": "Reducere client fidelizare: 10%",
      "bold": true,
      "italic": false,
      "underline": false,
      "doubleSize": false,
      "align": 1
     }
    ],
    "discount": {
     "discountType": "PercentDiscount",
     "amount": 10
    },
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 2",
    "quantity": 2,
    "price": 5,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "discount": {
     "discountType": "PercentDiscount",
     "amount": 10
    },
    "isSubtotalDiscount": false
   }
  ],
  "payments": [
   {
    "paymentType": "Cash",
    "amount": 0
   }
  ],
  "footerComments": [
   {
    "message": "Profita de reduceri in magazin online:",
    "bold": true,
    "italic": false,
    "underline": false,
    "doubleSize": false,
    "align": 1
   }
  ],
  "barcodes": [
   {
    "barcode": "www.dxprint.ro",
    "barcodeType": "QRCode"
   }
  ]
}

                                                    
                                                        
 {
  "isNonFiscalReceipt": false,
  "products": [
   {
    "name": "Produs cu denumire 1",
    "quantity": 1,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 2",
    "quantity": 2,
    "price": 5,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "isSubtotalDiscount": false
   }
  ],
  "payments": [
   {
    "paymentType": "Cash",
    "amount": 0
   }
  ],
  "footerComments": [
   {
    "message": "Profita de reduceri in magazin online:",
    "bold": false,
    "italic": true,
    "underline": false,
    "doubleSize": false,
    "align": 1
   }
  ],
  "barcodes": [
   {
    "barcode": "www.dxprint.ro",
    "barcodeType": "QRCode"
   }
  ]
}

                                                    
                                                        
 {
  "isNonFiscalReceipt": false,
  "products": [
   {
    "name": "Produs cu denumire 1",
    "quantity": 1,
    "price": 10,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "comments": [
     {
      "message": "Reducere client fidelizare: 10%",
      "bold": true,
      "italic": false,
      "underline": false,
      "doubleSize": false,
      "align": 1
     }
    ],
    "discount": {
     "discountType": "PercentDiscount",
     "amount": 10
    },
    "isSubtotalDiscount": false
   },
   {
    "name": "Produs cu denumire 2",
    "quantity": 2,
    "price": 5,
    "department": 1,
    "vat": "1",
    "unit": "buc",
    "isSubtotalDiscount": false
   }
  ],
  "payments": [
   {
    "paymentType": "Cash",
    "amount": 0
   }
  ],
  "footerComments": [
   {
    "message": "Profita de reduceri in magazin online:",
    "bold": true,
    "italic": false,
    "underline": false,
    "doubleSize": false,
    "align": 1
   }
  ],
  "barcodes": [
   {
    "barcode": "www.dxprint.ro",
    "barcodeType": "QRCode",
    "barcodeSize": 7
   }
  ]
}

                                                    

Bon nefiscal:

Acest exemplu este pentru un bon nefiscal trimis catre echipamentul fiscal. Acesta are un singur comentariu cu 2 stiluri active bold si underline.

                                                        
 {
  "fiscalCode":"RO123456789",
  "isNonFiscalReceipt": true,
  "headerComments": [
   {
    "message": "Bon nefiscal nr.: 2045",
    "bold": true,
    "italic": false,
    "underline": true,
    "doubleSize": false,
    "align": 1
   }
  ]
}