Interfața Fișiere INP
Interfața de fișiere INP oferă o metodă de integrare bazată pe fișiere pentru operațiunile fiscale. Driverul monitorizează un director dedicat pentru fiecare dispozitiv fiscal cu INP activat; când un fișier de comandă este plasat în acel director, driverul îl procesează și generează fișierele de rezultat corespunzătoare.
Instalare și Configurare
Pentru a activa procesarea fișierelor INP pentru un dispozitiv fiscal:
- În interfața FisCool, deschideți configurarea dispozitivului fiscal
- Activați opțiunea „Compatibilitate INP"
- Setați un „Director INP" (ex:
C:\FisCool\INP) - Driverul începe să monitorizeze acel folder pentru fișiere noi
Driverul creează automat subdirectoarele de rezultat BonOK, BonERR și BonANSWER în interiorul directorului INP.
Detectarea și Procesarea Fișierelor
- Fișierele cu extensiile
.inp,.txtsau.bonsunt procesate întotdeauna drept comenzi INP. - Fișierele cu alte extensii sunt procesate doar dacă conținutul lor este recunoscut drept comenzi INP; altfel sunt ignorate.
- Fișierele mai mari de 1 MB sunt ignorate.
- Codificare: se recomandă UTF-8. Fișierele care nu sunt UTF-8 valid sunt decodate ca Windows-1252 (compatibilitate legacy). Spațiile non-breaking sunt normalizate la spații obișnuite.
- Liniile goale și liniile de comentariu care încep cu
#sau//sunt ignorate.
Ciclul de Procesare
1. Detectare
- Directorul este supravegheat la nivel de sistem de fișiere (detectare imediată).
- Se aplică o întârziere de ~100 ms pentru ca aplicația care scrie să poată termina fișierul.
2. Revendicare
- Fișierul este redenumit în
<nume>.processing- previne procesarea dublă. - Dacă redenumirea eșuează, fișierul este sărit (deja revendicat sau blocat).
3. Parsare și Validare
- Conținutul este parsat linie cu linie și validat.
- O eroare de parsare produce imediat un fișier
BonERRcu detaliile erorii atașate.
4. Execuție
- Operațiunea parsată este executată pe dispozitivul fiscal. Dispozitivul trebuie să fie în starea
Connected, altfel se produce o eroare de execuție. - O eroare de execuție (eroare de dispozitiv, eroare de validare) produce de asemenea un fișier
BonERR.
5. Succes
- Fișierul de intrare este mutat intact în
BonOK/<nume>(pistă de audit). - Un fișier de răspuns cu același nume este creat în
BonANSWER/, cu rezultatele operațiunii.
6. Eroare
- Conținutul original plus detaliile erorii sunt scrise în
BonERR/<nume>. - Fișierul
.processingeste șters. Nu se creează fișier de răspuns pentru operațiunile eșuate.
Structura Directoarelor de Rezultat
<Director INP>\BonOK\- fișierele de intrare procesate cu succes (mutate intact)<Director INP>\BonERR\- fișierele de intrare eșuate (cu detaliile erorii atașate)<Director INP>\BonANSWER\- fișierele de răspuns (același nume ca fișierul de intrare) cu rezultatele operațiunii
Formatul Fișierului de Intrare
Fișierele INP sunt fișiere text simplu, cu o comandă pe linie. Sunt suportate două sintaxe de comenzi:
| Sintaxă | Separator de câmpuri | Forma generală | Valori numerice |
|---|---|---|---|
| Legacy / FPrint | ; | Comanda,1,______,_,__;param1;param2;... | Zecimale cu punct: 2.50, 1.000 |
| Simplu / Modern | ^ | COMANDA^param1^param2^... | Întregi cu zecimale implicite: 250 = 2.50, 1000 = 1.000 |
Sintaxa este detectată automat pentru fiecare fișier, pe baza comenzilor pe care le conține - nu amestecați cele două sintaxe în același fișier. Formatul fișierelor de răspuns și de eroare urmează sintaxa fișierului de intrare (vezi Formatul Fișierului de Răspuns mai jos). Comenzile nu țin cont de majuscule/minuscule; se recomandă MAJUSCULE.
Exemplu de Fișier INP - Legacy / FPrint
S,1,______,_,__;Cafea;2.50;1.000;1;1;1;0;0;buc
T,1,______,_,__;0;2.50;;;;
Exemplu de Fișier INP - Simplu / Modern
S^Cafea^250^1000^buc^1^1
P^1^250
Formatul Legacy / FPrint - Referința Comenzilor
Fiecare comandă începe cu litera comenzii urmată de antetul standard ,1,______,_,__; parametrii de după primul ; variază după tipul comenzii.
S Vânzare Produs
Adaugă o linie de produs pe bonul fiscal.
S,1,______,_,__;denumire;pret;cantitate;departament;_;cod_tva;_;_;um
| Poziție | Parametru | Tip | Obligatoriu | Descriere |
|---|---|---|---|---|
| 1 | denumire | String | Da | Numele produsului (punct și virgulă interzis - este separatorul de câmpuri) |
| 2 | pret | Number | Da | Preț unitar în lei, cu punct ca separator zecimal, max 2 zecimale (ex: 2.50). Valorile negative sunt acceptate pentru corecții. |
| 3 | cantitate | Number | Da | Cantitate, max 3 zecimale (ex: 1.000) |
| 4 | departament | Number | Da | Cod departament 0–99; 0 = fără departament (driverul alege în funcție de grupa de TVA - recomandat) |
| 5 | - | - | Nu | Ignorat (poate fi gol) |
| 6 | cod_tva | Number/String | Da | Grupa de TVA: 1=A, 2=B, 3=C, 4=D, 5=E; sau un procent precum 9%/19% (mapat la grupa dispozitivului cu acea cotă); sau cuvintele scutit (0%, preferă grupa E) / neimpozabil (0%, preferă o grupă diferită de E) |
| 7 | - | - | Nu | Ignorat (poate fi gol) |
| 8 | - | - | Nu | Ignorat (poate fi gol) |
| 9 | um | String | Nu | Unitate de măsură (implicit buc) |
S,1,______,_,__;Cafea Espresso;2.50;1.000;1;1;1;0;0;buc
S,1,______,_,__;Paine 500g;1.20;1.000;1;1;2;0;0;buc
S,1,______,_,__;Benzina Premium;1.45;25.500;3;1;1;0;0;l
Note:
- Prețul și cantitatea folosesc punctul (
.) ca separator zecimal. - Produsele cu preț
0sunt tipărite ca note de text liber (casele de marcat resping liniile de vânzare cu valoare zero). - Diacriticele sunt eliminate automat înainte de tipărire.
- Valoarea de TVA (procent/literă) trebuie să corespundă unei grupe de TVA active pe dispozitiv, altfel bonul este respins.
T Plată
Adaugă o plată pe bon. Caz special: tipul 4 cu suma goală acționează ca o comandă de subtotal.
T,1,______,_,__;tip_plata;suma;;;;
| Parametru | Tip | Obligatoriu | Descriere |
|---|---|---|---|
| tip_plata | Number | Nu | 0=Numerar (implicit când e gol), 1=Card, 2=Credit, 3=Tichete de masă, 4=Tichete valorice, 5=Voucher, 6=Plată modernă, 7=Cashback (card + avans în numerar), 8=Alte metode |
| suma | Number | Nu | Suma plății în lei. Poate fi goală - vezi regulile de auto-completare de mai jos. |
T,1,______,_,__;0;20.00;;;; <!-- 20.00 numerar -->
T,1,______,_,__;1;15.50;;;; <!-- 15.50 card -->
T,1,______,_,__;4;;;;; <!-- tipul 4 cu suma GOALĂ = subtotal -->
Reguli de plată (aplicate automat):
- Dacă fișierul nu conține nicio comandă
T, bonul se închide cu întregul total ca numerar. - Dacă există exact o comandă
Tcu suma0/goală, suma ei este setată la totalul bonului. - Dacă plățile acoperă mai puțin decât totalul, diferența este adăugată automat ca numerar.
- Dacă plățile depășesc totalul iar surplusul este acoperit de liniile de numerar, sumele de numerar sunt reduse automat astfel încât plățile să corespundă exact totalului.
- Un surplus care nu poate fi absorbit din numerar este valid doar împreună cu tipul de plată 7 (cashback) - diferența este înmânată clientului ca numerar. Altfel bonul este respins pentru că plățile nu corespund totalului.
- Sunt permise mai multe comenzi
Tpentru plăți mixte.
C Discount/Majorare
Aplică un discount sau o majorare. Plasată după o linie S (produs) sau de subtotal, se aplică acelei linii; plasată după liniile de plată (T), se aplică întregului bon.
C,1,______,_,__;tip_discount;valoare;;;;
| Parametru | Tip | Obligatoriu | Descriere |
|---|---|---|---|
| tip_discount | Number | Da | 0=Majorare %, 1=Discount %, 2=Majorare valorică, 3=Discount valoric |
| valoare | Number | Da | Procent (0.00–100.00) pentru tipurile 0/1, sumă în lei pentru tipurile 2/3 |
C,1,______,_,__;1;5.00;;;; <!-- discount 5% pe linia anterioară -->
C,1,______,_,__;3;2.50;;;; <!-- discount valoric 2.50 -->
C,1,______,_,__;0;10.00;;;; <!-- majorare 10% -->
Note:
- Este permis un singur discount la nivel de bon per bon.
- O comandă
Ccare nu urmează unei linii de produs sau de subtotal (și apare înaintea oricărei plăți) este respinsă.
P Text Liber
Tipărește linii de text liber pe bon. Fiecare valoare separată prin punct și virgulă devine o linie tipărită; valorile goale sunt sărite. Textul mai lung decât lățimea de tipărire a dispozitivului este trunchiat de dispozitiv.
P,1,______,_,__;linia1;linia2;linia3;;;
P,1,______,_,__;Va multumim;pentru vizita;Va mai asteptam;;;
Bonuri nefiscale: un fișier care conține doar comenzi P (fără linii S, fără rapoarte sau operațiuni de numerar; liniile T/L sunt permise dar ignorate) este tipărit ca bon nefiscal. Aceasta este metoda pe bază de fișiere pentru bonuri de comandă sau documente proforma.
K Cod Fiscal Client (CUI)
Deschide bonul fiscal cu codul fiscal al clientului. Trebuie transmisă înainte de prima comandă de vânzare (liniile de text liber pot să o preceadă). Bonul este marcat automat ca bon de tip factură.
K,1,______,_,__;cui;
K,1,______,_,__;RO22352741;
I Introducere/Retragere Numerar
Efectuează o introducere sau o retragere de numerar. Trebuie să fie singura comandă din fișier.
I,1,______,_,__;tip_operatiune;suma;;;;
| Parametru | Tip | Obligatoriu | Descriere |
|---|---|---|---|
| tip_operatiune | Number | Da | 0=Introducere, 1=Retragere |
| suma | Number | Da | Suma în lei (trebuie să fie > 0) |
I,1,______,_,__;0;100.00;;;; <!-- introducere 100.00 -->
I,1,______,_,__;1;50.00;;;; <!-- retragere 50.00 -->
Z / A Rapoarte Fiscale
Tipărește raportul X, raportul Z sau raportul pe departamente. Trebuie să fie singura comandă din fișier.
Z,1,______,_,__;tip_raport;Forma A (compatibilitate):
A,1,______,_,__;;;tip_raport;;;
| Parametru | Tip | Obligatoriu | Descriere |
|---|---|---|---|
| tip_raport | Number/String | Da | Forma Z: 0 sau X = raport X, 1 sau Z = raport Z, 3 sau D = raport pe departamente.Forma A: X = raport X, Z = raport Z, D = raport pe departamente. Nicio altă valoare nu este acceptată. |
Z,1,______,_,__;0; <!-- raport X -->
Z,1,______,_,__;1; <!-- raport Z -->
Z,1,______,_,__;3; <!-- raport pe departamente -->
A,1,______,_,__;;;X;;; <!-- raport X (forma A) -->
Notă: este acceptată și varianta cu tipul raportului în antet (al 2-lea câmp separat prin virgulă, payload gol): Z,0,...; = raport X, Z,1,...; = raport Z, Z,3,...; = raport pe departamente.
Notă: raportul pe departamente (tipul 3) tipărește vânzările zilnice grupate pe departamente, fără a închide ziua fiscală. Dispozitivele al căror protocol nu are un astfel de raport eșuează fișierul cu un BonERR (eroarea 1015, operațiune nesuportată).
L Subtotal
Inserează o linie de subtotal (echivalent cu T de tip 4 cu suma goală).
L,1,______,_,__;;;;;
DS Deschidere Sertar
Deschide sertarul de bani. Trebuie să fie singura comandă din fișier. Notă: spre deosebire de celelalte comenzi, DS folosește forma simplă, fără antetul standard.
DS;durata_impuls_ms sau doar DS;
| Parametru | Tip | Obligatoriu | Descriere |
|---|---|---|---|
| durata_impuls_ms | Number | Nu | Durata impulsului în milisecunde. Când lipsește, se aplică valoarea implicită a driverului (Datecs: 200 ms; Daisy: ultima valoare configurată pe dispozitiv). Ignorată de dispozitivele Tremol. |
DS; <!-- deschide cu impulsul implicit al driverului/dispozitivului -->
DS;200 <!-- deschide cu impuls de 200 ms -->
54 Text Formatat
Tipărește o linie de text cu opțiuni de formatare. Notă: spre deosebire de celelalte comenzi, 54 folosește virgulă după codul comenzii și ^ ca separator de câmpuri, fără antetul standard. Este acceptată cu exact această formă în ambele sintaxe (fișiere legacy/FPrint și simplu/modern).
54,text^bold^italic^inaltime_dubla^subliniere^aliniere^
| Parametru | Tip | Obligatoriu | Descriere |
|---|---|---|---|
| text | String | Da | Textul de tipărit. Nu poate conține ^. |
| bold | Flag | Nu | 1 = activat; 0 sau gol = dezactivat. |
| italic | Flag | Nu | 1 = activat; 0 sau gol = dezactivat. |
| inaltime_dubla | Flag | Nu | 1 = activat; 0 sau gol = dezactivat. |
| subliniere | Flag | Nu | 1 = activat; 0 sau gol = dezactivat. |
| aliniere | Number | Nu | 0 sau gol = stânga, 1 = centru, 2 = dreapta. |
54,Text simplu^^^^^^
54,Text bold^1^^^^^
54,Bold, inaltime dubla, centrat^1^^1^^1^
În interiorul unui bon fiscal (fișier cu comenzi S/T), textul se tipărește ca linie de text liber simplă - flag-urile de formatare sunt acceptate, dar nu se aplică.
Într-un fișier doar cu text (doar linii 54 și/sau P), se tipărește un bon nefiscal, iar formatarea se aplică pe dispozitivele care o suportă (de ex. Datecs); celelalte dispozitive tipăresc text simplu.
Comenzi acceptate-dar-ignorate: liniile care încep cu 8 (comenzi de coduri de bare/QR din alte dialecte de driver) sunt acceptate în fișierele de bon, dar ignorate.
Formatul Simplu / Modern - Referința Comenzilor
Sintaxa simplu/modern folosește ^ ca separator de câmpuri, fără antetul FPrint. Toate valorile monetare se transmit în bani (întreg, 2 zecimale implicite: 250 = 2.50 lei), cantitățile cu 3 zecimale implicite (1000 = 1.000), iar procentele cu 2 zecimale implicite (500 = 5%). Caracterul ^ nu poate apărea în interiorul valorilor.
S Vânzare Produs
Adaugă o linie de produs pe bonul fiscal.
S^denumire^pret^cantitate^um^grupa_tva^departament
| Poziție | Parametru | Tip | Obligatoriu | Descriere |
|---|---|---|---|---|
| 1 | denumire | String | Da | Numele produsului (^ nu este permis - este separatorul de câmpuri) |
| 2 | pret | Number | Da | Prețul unitar în bani: 350 = 3.50 lei. Doar valori pozitive - pentru corecții folosiți VS. |
| 3 | cantitate | Number | Da | Cantitatea cu 3 zecimale implicite: 1000 = 1.000; 120 = 0.120 (de ex. 120 g la preț per kg) |
| 4 | um | String | Nu | Unitatea de măsură (implicit buc) |
| 5 | grupa_tva | Number | Da | Indexul grupei de TVA: 1=A, 2=B, 3=C, 4=D, 5=E. Spre deosebire de sintaxa legacy, procentele și cuvintele scutit/neimpozabil nu sunt acceptate aici. |
| 6 | departament | Number | Nu | Codul departamentului; 0 sau 1 = fără departament (driverul alege pe baza grupei de TVA - recomandat: 1) |
S^Cafea Espresso^250^1000^buc^1^1
S^Paine 500g^120^1000^buc^2^1
S^Mere Golden^850^120^kg^1^1 <!-- 0.120 kg la 8.50 lei/kg -->
Note: produsele cu preț 0 se tipăresc ca note de text liber (casele de marcat resping liniile de vânzare cu valoare zero); diacriticele se elimină automat înainte de tipărire.
VS Anulare Produs (corecție)
Adaugă o linie de produs negativă (corecție/storno a unui produs de pe același bon). Aceiași parametri ca S; prețul se aplică cu semn negativ. Suportul depinde de modelul dispozitivului; dispozitivele al căror protocol nu poate reprezenta o linie de corecție resping bonul cu eroarea 1015.
VS^denumire^pret^cantitate^um^grupa_tva^departament
S^Cafea Espresso^250^1000^buc^1^1
VS^Cafea Espresso^250^1000^buc^1^1 <!-- anulează linia de mai sus -->
S^Cappuccino^400^1000^buc^1^1
P^1^400
P Plată
Adaugă o plată pe bon. Atenție: în sintaxa simplu/modern P este comanda de plată (textul liber este TL), iar codurile de plată sunt cu 1 mai mari decât la comanda T din legacy/FPrint.
P^tip_plata^suma
| Parametru | Tip | Obligatoriu | Descriere |
|---|---|---|---|
| tip_plata | Number | Nu | 1=Numerar (implicit când e gol), 2=Card, 3=Credit, 4=Tichete masă, 5=Tichete valorice, 6=Voucher, 7=Plată modernă, 8=Cashback (card + avans numerar), 9=Alte metode |
| suma | Number | Nu | Suma în bani: 1950 = 19.50 lei. Poate fi goală - se aplică identic regulile de auto-completare de la comanda legacy T. |
P^1^2000 <!-- 20.00 numerar -->
P^2^1550 <!-- 15.50 card -->
P^1^1000
P^2^1300 <!-- plată mixtă: 10.00 numerar + 13.00 card -->
DP / DV / MP / MV Discount / Adaos
Aplică un discount (D) sau un adaos (M), procentual (P) sau valoric (V). Plasată după o linie S (produs) sau ST (subtotal), se aplică acelei linii; DP/DV plasată după liniile de plată se aplică întregului bon (max. una per bon).
DP^valoare | DV^valoare | MP^valoare | MV^valoare
| Comandă | Semnificație | Valoare |
|---|---|---|
DP | Discount procentual | Procent cu 2 zecimale implicite: 500 = 5%, 1250 = 12.5% |
DV | Discount valoric | Suma în bani: 250 = 2.50 lei |
MP | Adaos procentual | Procent cu 2 zecimale implicite |
MV | Adaos valoric | Suma în bani |
S^Cafea^1000^1000^buc^1^1
DP^1000 <!-- discount 10% la cafea -->
P^1^900
ST Subtotal
Inserează o linie de subtotal (echivalent cu T legacy de tip 4 cu suma goală, sau L). O comandă de discount/adaos plasată imediat după ea se aplică subtotalului.
ST^
TL Text Liber
Tipărește o linie de text liber pe bon. Câte o comandă TL pentru fiecare linie de text.
TL^text
TL^Va multumim
TL^pentru vizita
Bonuri nefiscale: un fișier care conține doar linii TL (și/sau 54) se tipărește ca bon nefiscal, exact ca un fișier doar cu P în sintaxa legacy.
CF Cod Fiscal Client (CUI)
Deschide bonul fiscal cu codul fiscal al clientului. Trebuie transmisă înainte de prima comandă de vânzare (liniile de text liber pot să o preceadă). Bonul este marcat automat ca bon de tip factură.
CF^cui
CF^RO22352741
S^Cafea^250^1000^buc^1^1
P^1^250
I / O Introducere / Scoatere Numerar
Efectuează o introducere (I) sau o scoatere (O) de numerar. Trebuie să fie singura comandă din fișier.
I^suma | O^suma
I^10000 <!-- introducere 100.00 -->
O^5000 <!-- scoatere 50.00 -->
X / Z / D Rapoarte Fiscale
Tipărește raportul X (X^), raportul Z (Z^) sau raportul pe departamente (D^). Trebuie să fie singura comandă din fișier.
X^ | Z^ | D^
Notă: spre deosebire de comanda legacy Z, Z^ nu poartă un cod de tip - payload-urile în stil legacy precum Z^0/Z^3 sunt respinse. Dispozitivele al căror protocol nu are raport pe departamente eșuează D^ cu un BonERR (eroarea 1015).
VB Anulare Bon
Marchează întregul bon ca anulat: documentul se deschide, se tipărește și apoi se anulează în loc să fie închis fiscal. Poate fi combinată cu linii de vânzare și de text - de exemplu bonurile de test pe care unele aplicații POS le tipăresc la configurare. Pe un bon anulat nu se înregistrează plăți.
VB^
TL^-------------------------
TL^BON DE TEST POS
TL^-------------------------
VB^
Notă: VB nu poate fi combinată cu comenzi de raport sau de numerar.
DS Deschidere Sertar
Deschide sertarul de bani. Trebuie să fie singura comandă din fișier. Același comportament ca la comanda DS din legacy.
DS^durata_impuls_ms sau doar DS^
Comenzi acceptate-dar-ignorate: MD^rand1^rand2 (afișaj client) este acceptată dar ignorată, la fel și liniile de coduri de bare 8x. Comanda de text formatat 54 (documentată în secțiunea legacy) funcționează și în fișierele simplu/modern, cu forma ei cu virgulă neschimbată.
Exemple Complete de Fișiere INP
Vânzare simplă cu numerar
S,1,______,_,__;Cafea;2.50;1.000;1;1;1;0;0;buc
S,1,______,_,__;Croissant;1.80;1.000;1;1;2;0;0;buc
T,1,______,_,__;0;4.30;;;;
Vânzare cu discount și plată cu cardul
S,1,______,_,__;Laptop;899.99;1.000;2;1;1;0;0;buc
S,1,______,_,__;Mouse Wireless;25.50;1.000;2;1;1;0;0;buc
C,1,______,_,__;1;5.00;;;;
T,1,______,_,__;1;924.21;;;;
Discountul de 5% se aplică liniei imediat anterioare (mouse-ul: 25.50 − 1.28 = 24.22), deci totalul bonului este 899.99 + 24.22 = 924.21. Dacă plata ar fi mai mică, diferența s-ar adăuga automat ca numerar.
Plăți mixte
S,1,______,_,__;Benzina Premium;1.45;40.000;3;1;1;0;0;l
T,1,______,_,__;0;50.00;;;;
T,1,______,_,__;1;8.00;;;;
Bon cu codul fiscal al clientului
K,1,______,_,__;RO22352741;
S,1,______,_,__;Servicii Profesionale;150.00;1.000;1;1;1;0;0;buc
T,1,______,_,__;1;150.00;;;;
Bon cu text liber
S,1,______,_,__;Produs A;10.00;1.000;1;1;1;0;0;buc
P,1,______,_,__;Va multumim pentru;cumparaturi;Va mai asteptam;;;
T,1,______,_,__;0;10.00;;;;
Bon nefiscal (doar text)
P,1,______,_,__;--- COMANDA #42 ---;;;
P,1,______,_,__;2x Cafea;1x Croissant;;
P,1,______,_,__;--- SFARSIT ---;;;
Introducere numerar
I,1,______,_,__;0;100.00;;;;
Raport X / Raport Z / Raport pe Departamente
Z,1,______,_,__;0;
Z,1,______,_,__;1;
Z,1,______,_,__;3;
Aceleași operațiuni în sintaxa simplu/modern (o operațiune per fișier):
Vânzare cu numerar (simplu/modern)
S^Cafea^250^1000^buc^1^1
S^Croissant^180^1000^buc^2^1
P^1^430
Vânzare cu CUI, discount, text și plată mixtă (simplu/modern)
CF^RO22352741
S^Caiet A4^380^5000^buc^1^1
DP^500
TL^Eco taxa este inclusa in pret
P^1^1000
P^2^805
Introducere / scoatere numerar (simplu/modern)
I^10000 <!-- introducere 100.00 (fișier separat) -->
O^5000 <!-- scoatere 50.00 (fișier separat) -->
Raport X / Raport Z / Raport pe Departamente (simplu/modern)
X^
Z^
D^
Formatul Fișierului de Răspuns (BonANSWER)
Fișierele de răspuns sunt create în BonANSWER/ cu același nume ca fișierul de intrare. Formatul răspunsului urmează sintaxa fișierului de intrare.
Răspunsuri Legacy / FPrint (format INI)
Răspuns pentru Bon
[Answer]
SlipNumber=123
nZrep=45
nFNum=1050
| Câmp | Descriere |
|---|---|
SlipNumber | Numărul bonului fiscal |
nZrep | Numărul raportului Z de care aparține bonul |
nFNum | Contorul de bonuri fiscale al dispozitivului |
Doar pentru dispozitivele Daisy: pentru compatibilitate cu software-ul de vânzare configurat pentru driverele Daisy legacy, se adaugă următoarele câmpuri suplimentare:
CommandName=close_fiscal_receipt
Allreceipt=000123 ; toate bonurile (fiscale + nefiscale) de la ultimul Z, completat cu zerouri la 6 cifre
FiscReceipt=000098 ; bonurile fiscale de la ultimul Z, completat cu zerouri la 6 cifre
DeviceSerial=8000596182
Răspuns pentru Raport (X/Z)
[Answer]
nRep=42
TaxA=125.50
TaxB=67.80
TaxC=0.00
TaxD=0.00
TaxE=0.00
TaxA–TaxE sunt totalurile zilnice de vânzare per grupă de TVA, în lei cu 2 zecimale.
Raportul pe departamente (tipul 3) se tipărește doar pe hârtie și nu returnează totaluri - fișierul lui de răspuns folosește forma generică Status=0 de mai jos.
Răspuns pentru Operațiune de Numerar
[Answer]
TotalCash=1250.75
TotalCash este totalul din sertar după operațiune, în lei.
Alte Operațiuni (ex: deschidere sertar)
[Answer]
Status=0
Răspunsuri Simplu / Modern
Fișierele scrise în sintaxa simplu/modern primesc în schimb un răspuns compact cheie=valoare:
Răspuns pentru Bon
BONOK=1
NRBON=123
NRBON este numărul bonului fiscal.
Alte Operațiuni
| Operațiune | Răspuns |
|---|---|
| Raport X / Z | BONOK=1NRBON=RAPORT |
| Introducere / scoatere numerar | BONOK=1NRBON=CASH |
| Orice altceva (ex: raport pe departamente, deschidere sertar) | BONOK=1NRBON=OK |
Formatul Fișierului de Eroare (BonERR)
Și formatul erorii urmează sintaxa fișierului de intrare.
Erori Legacy / FPrint
Fișierele de eroare conțin conținutul INP original urmat de detaliile erorii, ca linii de comentariu:
S,1,______,_,__;Produs Test;10.50;1.500;120;1;1;0;0;kg
#Linia 1 | S,1,______,_,__;Produs Test;10.50;1.500;120;1;1;0;0;kg
#ErrorCode (-112207) : Valoare incorecta a parametrului departament.
- Erorile de parsare folosesc coduri negative în intervalul
-112200…-112231și indică linia problematică. - Erorile de execuție (erori de dispozitiv/comunicare de după o parsare reușită) folosesc
Linia 0 | Execution Errorși poartă codurile de eroare standard ale driverului (vezi Coduri Eroare - ex:500lipsă hârtie,1004dispozitiv neconectat):
S,1,______,_,__;Produs Test;10.50;1.500;1;1;1;0;0;buc
#Linia 0 | Execution Error
#ErrorCode (1004) : Problemă la conexiune: Dispozitivul refuză conexiunea
Erori Simplu / Modern
Pentru fișierele în sintaxa simplu/modern, fișierul BonERR conține în schimb o eroare compactă cheie=valoare:
BONOK=0
ERRCODE=-112203
ERRINFO=Preț invalid.
ERRCODE folosește aceleași coduri ca formatul legacy: coduri negative pentru erorile de parsare, codurile standard pozitive ale driverului pentru erorile de execuție.
Bune Practici
- Denumirea fișierelor: folosiți nume unice, secvențiale, pentru a evita conflictele.
- Monitorizarea rezultatelor: urmăriți
BonANSWERșiBonERRpentru rezultatul fiecărui fișier; fișierul de rezultat are întotdeauna același nume cu fișierul de intrare. - Codificare: preferați UTF-8; Windows-1252 este acceptat pentru compatibilitate legacy.
- Separator: nu folosiți niciodată separatorul de câmpuri în interiorul valorilor -
;în fișierele legacy/FPrint,^în fișierele simplu/modern. - Un singur scriitor per fișier: scrieți fișierul complet (sau scrieți într-un nume temporar și redenumiți) înainte ca driverul să îl preia.
- Un singur monitor per folder: doar FisCool trebuie să proceseze directorul INP, pentru a preveni condițiile de cursă.
- Spațiu pe disc:
BonOKșiBonANSWERse acumulează în timp - arhivați-le sau curățați-le periodic.
Note de Integrare
Interfața de fișiere INP este ideală pentru:
- Integrarea sistemelor legacy: sisteme care nu pot folosi API-urile HTTP/WebSocket
- Procesare în loturi: tipărirea bonurilor din cozi de tranzacții
- Fiabilitate: operațiunile pe bază de fișiere oferă persistență naturală și o pistă de audit integrată
- Depanare: fișierele de intrare, de răspuns și de eroare documentează complet fiecare tranzacție
Important: doar comenzile documentate mai sus fac parte din interfața INP suportată, în oricare dintre cele două sintaxe documentate - legacy/FPrint (separator punct și virgulă, antetul standard ,1,______,_,__;) sau simplu/modern (separator ^).