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:

  1. În interfața FisCool, deschideți configurarea dispozitivului fiscal
  2. Activați opțiunea „Compatibilitate INP"
  3. Setați un „Director INP" (ex: C:\FisCool\INP)
  4. 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, .txt sau .bon sunt 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 BonERR cu 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 .processing este ș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âmpuriForma 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.

Sintaxă: S,1,______,_,__;denumire;pret;cantitate;departament;_;cod_tva;_;_;um
PozițieParametruTipObligatoriuDescriere
1denumireStringDaNumele produsului (punct și virgulă interzis - este separatorul de câmpuri)
2pretNumberDaPreț unitar în lei, cu punct ca separator zecimal, max 2 zecimale (ex: 2.50). Valorile negative sunt acceptate pentru corecții.
3cantitateNumberDaCantitate, max 3 zecimale (ex: 1.000)
4departamentNumberDaCod departament 0–99; 0 = fără departament (driverul alege în funcție de grupa de TVA - recomandat)
5--NuIgnorat (poate fi gol)
6cod_tvaNumber/StringDaGrupa 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--NuIgnorat (poate fi gol)
8--NuIgnorat (poate fi gol)
9umStringNuUnitate de măsură (implicit buc)
Exemple:
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ț 0 sunt 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.

Sintaxă: T,1,______,_,__;tip_plata;suma;;;;
ParametruTipObligatoriuDescriere
tip_plataNumberNu0=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
sumaNumberNuSuma plății în lei. Poate fi goală - vezi regulile de auto-completare de mai jos.
Exemple:
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ă T cu suma 0/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 T pentru 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.

Sintaxă: C,1,______,_,__;tip_discount;valoare;;;;
ParametruTipObligatoriuDescriere
tip_discountNumberDa0=Majorare %, 1=Discount %, 2=Majorare valorică, 3=Discount valoric
valoareNumberDaProcent (0.00–100.00) pentru tipurile 0/1, sumă în lei pentru tipurile 2/3
Exemple:
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ă C care 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.

Sintaxă: P,1,______,_,__;linia1;linia2;linia3;;;
Exemplu:
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ă.

Sintaxă: K,1,______,_,__;cui;
Exemplu:
K,1,______,_,__;RO22352741;

I Introducere/Retragere Numerar

Efectuează o introducere sau o retragere de numerar. Trebuie să fie singura comandă din fișier.

Sintaxă: I,1,______,_,__;tip_operatiune;suma;;;;
ParametruTipObligatoriuDescriere
tip_operatiuneNumberDa0=Introducere, 1=Retragere
sumaNumberDaSuma în lei (trebuie să fie > 0)
Exemple:
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.

Forma Z: Z,1,______,_,__;tip_raport;
Forma A (compatibilitate): A,1,______,_,__;;;tip_raport;;;
ParametruTipObligatoriuDescriere
tip_raportNumber/StringDaForma 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ă.
Exemple:
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ă).

Sintaxă: 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.

Sintaxă: DS;durata_impuls_ms  sau doar  DS;
ParametruTipObligatoriuDescriere
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.
Exemple:
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).

Sintaxă: 54,text^bold^italic^inaltime_dubla^subliniere^aliniere^
ParametruTipObligatoriuDescriere
textStringDaTextul de tipărit. Nu poate conține ^.
boldFlagNu1 = activat; 0 sau gol = dezactivat.
italicFlagNu1 = activat; 0 sau gol = dezactivat.
inaltime_dublaFlagNu1 = activat; 0 sau gol = dezactivat.
subliniereFlagNu1 = activat; 0 sau gol = dezactivat.
aliniereNumberNu0 sau gol = stânga, 1 = centru, 2 = dreapta.
Exemple:
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.

Sintaxă: S^denumire^pret^cantitate^um^grupa_tva^departament
PozițieParametruTipObligatoriuDescriere
1denumireStringDaNumele produsului (^ nu este permis - este separatorul de câmpuri)
2pretNumberDaPrețul unitar în bani: 350 = 3.50 lei. Doar valori pozitive - pentru corecții folosiți VS.
3cantitateNumberDaCantitatea cu 3 zecimale implicite: 1000 = 1.000; 120 = 0.120 (de ex. 120 g la preț per kg)
4umStringNuUnitatea de măsură (implicit buc)
5grupa_tvaNumberDaIndexul 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.
6departamentNumberNuCodul departamentului; 0 sau 1 = fără departament (driverul alege pe baza grupei de TVA - recomandat: 1)
Exemple:
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.

Sintaxă: VS^denumire^pret^cantitate^um^grupa_tva^departament
Exemplu:
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.

Sintaxă: P^tip_plata^suma
ParametruTipObligatoriuDescriere
tip_plataNumberNu1=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
sumaNumberNuSuma în bani: 1950 = 19.50 lei. Poate fi goală - se aplică identic regulile de auto-completare de la comanda legacy T.
Exemple:
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).

Sintaxă: DP^valoare  |  DV^valoare  |  MP^valoare  |  MV^valoare
ComandăSemnificațieValoare
DPDiscount procentualProcent cu 2 zecimale implicite: 500 = 5%, 1250 = 12.5%
DVDiscount valoricSuma în bani: 250 = 2.50 lei
MPAdaos procentualProcent cu 2 zecimale implicite
MVAdaos valoricSuma în bani
Exemplu:
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.

Sintaxă: ST^

TL Text Liber

Tipărește o linie de text liber pe bon. Câte o comandă TL pentru fiecare linie de text.

Sintaxă: TL^text
Exemplu:
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ă.

Sintaxă: CF^cui
Exemplu:
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.

Sintaxă: I^suma  |  O^suma
Exemple:
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.

Sintaxă: 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.

Sintaxă: VB^
Exemplu (bon de test):
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.

Sintaxă: 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âmpDescriere
SlipNumberNumărul bonului fiscal
nZrepNumărul raportului Z de care aparține bonul
nFNumContorul 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

TaxATaxE 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țiuneRăspuns
Raport X / ZBONOK=1
NRBON=RAPORT
Introducere / scoatere numerarBONOK=1
NRBON=CASH
Orice altceva (ex: raport pe departamente, deschidere sertar)BONOK=1
NRBON=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: 500 lipsă hârtie, 1004 dispozitiv 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 și BonERR pentru 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 și BonANSWER se 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 ^).