Interfața Fișiere INP

Interfața fișiere INP oferă o metodă de comunicare bazată pe fișiere pentru operațiunile fiscale. Driverul monitorizează un director specificat pentru fiecare dispozitiv fiscal "compatibil INP". Când un fișier comandă este plasat în acest director, driverul îl procesează și generează un fișier rezultat corespunzător.

Configurare și Setări

Pentru a activa procesarea fișierelor INP pentru un dispozitiv fiscal:

  1. În interfața FisCool, selectați configurația dispozitivului fiscal
  2. Activați checkbox-ul "Compatibilitate INP"
  3. Specificați un "Director INP" (ex., C:\FisCool\INP)
  4. Driverul va începe să monitorizeze acest dosar pentru fișiere noi

Structura Fișierelor și Procesarea

Driverul monitorizează directorul INP pentru fișiere cu extensiile .bon, .inp sau .txt.

Format Fișier de Intrare

Fișierele INP sunt fișiere text cu comenzi separate prin virgulă, o comandă per linie. Fiecare comandă urmează formatul:

Comandă,1,______,_,__;parametri

Unde antetul ,1,______,_,__; este standard pentru toate comenzile și parametrii variază în funcție de tipul comenzii.

Exemplu Fișier INP

S,1,______,_,__;Cafea;2.50;1.000;1;1;1;0;0;buc
T,1,______,_,__;0;2.50;;;;

Ciclul de Viață al Procesării Fișierelor

Înțelegerea ciclului complet de procesare a fișierelor ajută la depanare și integrare:

1. Detectarea Fișierelor
  • Driverul monitorizează directorul INP pentru fișiere cu extensiile: .bon, .inp, .txt
  • Fișierele sunt detectate folosind monitorizarea sistemului de fișiere (detectare imediată)
  • Se aplică o întârziere de 100ms pentru a asigura că scrierea fișierului este completă
2. Preluarea Fișierelor
  • Fișierul este redenumit din comandă.inp în comandă.inp.processing
  • Aceasta previne interferențele altor procese cu fișierul
  • Dacă redenumirea eșuează, fișierul este omis (probabil procesat de altă instanță)
3. Analizarea Conținutului
  • Conținutul fișierului este citit și analizat linie cu linie
  • Comenzile sunt validate pentru format și parametri corecți
  • Erorile de analiză generează răspuns BonERR imediat cu detalii eroare anexate
4. Executarea Operațiunii
  • Operațiunea analizată este trimisă la dispozitivul fiscal
  • Comunicarea cu dispozitivul și validarea logicii de afaceri are loc
  • Erorile de execuție generează răspuns BonERR cu detalii eroare de runtime
5. Răspuns Succes
  • Fișierul de procesare este mutat în BonOK/comandă.inp (conținutul original păstrat)
  • Fișierul răspuns este creat ca BonANSWER/comandă.ans cu rezultatele operațiunii
  • Ambele fișiere servesc ca pistă de audit și răspuns de integrare
6. Răspuns Eroare
  • Conținutul original + detalii eroare sunt scrise în BonERR/comandă.inp
  • Fișierul de procesare este curățat/eliminat
  • Nu se creează fișier răspuns pentru operațiunile eșuate

Structura Directorului de Ieșire

După procesare, fișierele sunt mutate în subdirectoare:

  • <Director INP>\BonOK\: Fișiere de intrare procesate cu succes (mutate intact pentru pistă de audit)
  • <Director INP>\BonERR\: Fișiere de intrare care au rezultat în erori (cu detalii eroare anexate)
  • <Director INP>\BonANSWER\: Fișiere răspuns (extensia .ans) conținând rezultatele operațiunilor

Format Fișier Răspuns

Fișierele răspuns sunt create în directorul BonANSWER cu extensia .ans și urmează formatul INI:

Răspuns Operațiune Bon
[Answer]
SlipNumber=12345
Răspuns Raport Zilnic
[Answer]
nRep=42
TaxA=125.50
TaxB=67.80
TaxC=0.00
TaxD=0.00
TaxE=0.00
Răspuns Operațiune Numerar
[Answer]
TotalCash=1250.75
Răspuns Generic Succes
[Answer]
Status=0

Format Răspuns Eroare

Fișierele eroare sunt create în directorul BonERR cu conținutul original plus informații de eroare anexate:

# Conținut INP original
S;Produs Test;10.50;kg;1.5;2

# Detalii eroare anexate de sistem
#Linia 1 | S;Produs Test;10.50;kg;1.5;2
#ErrorCode (-112207) : Valoare incorectă a parametrului departament.

Referință Comenzi

Următoarele comenzi sunt suportate în fișierele INP. Comenzile sunt sensibile la majuscule și folosesc virgula (,) ca separator de câmp cu un format antet standard.

S Vânzare Articol

Adaugă o linie de produs la bonul fiscal curent.

Sintaxă: S,1,______,_,__;descriere;preț;cantitate;departament;ignorat;cod_tva;ignorat;ignorat;unitate
Parametru Tip Obligatoriu Descriere
descriere String Da Numele produsului sau descrierea (max 72 caractere, punct și virgulă interzis)
preț Număr Da Preț unitar în moneda locală (zecimal cu max 2 zecimale, separator punct)
cantitate Număr Da Cantitate vândută (max 3 zecimale, ex., 1.000)
departament Număr Da Codul departamentului (max 99, 0 pentru fără departament)
ignorat - Nu Parametru ignorat (poate fi gol)
cod_tva Număr/String Da Cod TVA: 1=A, 2=B, 3=C, 4=D, 5=E (scutit) sau procent ca "9%"
ignorat - Nu Parametru ignorat (poate fi gol)
ignorat - Nu Parametru ignorat (poate fi gol)
unitate String Opțional Unitatea de măsură (max 6 caractere, implicit "buc")
Exemple:
S,1,______,_,__;Cafea Espresso;2.50;1.000;1;1;1;0;0;buc
S,1,______,_,__;Pâine 500g;1.20;1.000;1;1;2;0;0;buc
S,1,______,_,__;Combustibil Premium;1.45;25.500;3;1;1;0;0;l

Note:

  • Prețul și cantitatea folosesc punctul (.) ca separator zecimal
  • Caracterul punct și virgulă (;) nu este permis în descrierea produsului
  • Pentru neplătitorii de TVA, driverul trimite automat produsele la grupa TVA E
  • Caracterul procent (%) din descriere este filtrat pentru a preveni resetarea dispozitivului

T Plată

Adaugă o metodă de plată la bonul curent. Dacă tipul de plată este 4, acționează ca comandă subtotal.

Sintaxă: T,1,______,_,__;tip_plată;sumă;;;;
Parametru Tip Obligatoriu Descriere
tip_plată Număr Da Metoda de plată: 0=Numerar, 1=Card, 2=Credit, 3=Tichete masă, 4=Subtotal, 5=Voucher, 6=Plată modernă, 7=Card+Avans numerar, 8=Alte metode, 9=Valută străină
sumă Număr Da Suma plății în moneda locală (dacă gol și nu există comenzi T, se completează automat cu numerar)
Exemple:
T,1,______,_,__;0;20.00;;;;
T,1,______,_,__;1;15.50;;;;
T,1,______,_,__;4;;;;;  

Note Plăți:

  • Dacă nu se trimite comandă T, bonul se închide automat cu suma totală ca numerar
  • Sunt permise multiple comenzi T pentru plăți mixte
  • Dacă total plăți < total bon, restul se completează automat cu numerar
  • Dacă total plăți > total bon, schimbul se tipărește ca rest numerar
  • Metoda 7 (Card + Avans numerar) necesită sumă > total bon

C Reducere/Adaos

Aplică o reducere sau adaos. Trebuie trimisă imediat după o comandă S (articol) sau subtotal.

Sintaxă: C,1,______,_,__;tip_reducere;valoare;;;;
Parametru Tip Obligatoriu Descriere
tip_reducere Număr Da 0=Adaos %, 1=Reducere %, 2=Adaos valoare, 3=Reducere valoare
valoare Număr Da Valoarea reducerii/adaosului (0.00-100.00 pentru procent, sumă pentru valoare)
Exemple:
C,1,______,_,__;1;5.00;;;;  
C,1,______,_,__;3;2.50;;;;  
C,1,______,_,__;0;10.00;;;; 

P Text Liber

Tipărește text non-fiscal pe bon.

Sintaxă: P,1,______,_,__;linia1;linia2;linia3;;;
Parametru Tip Obligatoriu Descriere
linia1 String Opțional Prima linie de text (max 42 caractere)
linia2 String Opțional A doua linie de text (max 42 caractere)
linia3 String Opțional A treia linie de text (max 42 caractere)
Exemple:
P,1,______,_,__;Mulțumesc;pentru vizită;Bine ați revenit;;;

K CUI Client

Deschide un bon fiscal cu numărul TVA al clientului. Trebuie să fie prima comandă din fișier.

Sintaxă: K,1,______,_,__;număr_cui;
Parametru Tip Obligatoriu Descriere
număr_cui String Da ID fiscal client (ex., RO12345678)
Exemple:
K,1,______,_,__;RO22352741;

I Introducere/Scoatere Numerar

Efectuează depozit sau retragere numerar. Trebuie să fie singura comandă din fișier.

Sintaxă: I,1,______,_,__;tip_operațiune;sumă;;;;
Parametru Tip Obligatoriu Descriere
tip_operațiune Număr Da 0=Depozit numerar, 1=Retragere numerar
sumă Număr Da Suma de depozitat sau retras
Exemple:
I,1,______,_,__;0;100.00;;;;  
I,1,______,_,__;1;50.00;;;;   

Z sau A Rapoarte Fiscale

Tipărește rapoarte fiscale (X sau Z). Trebuie să fie singura comandă din fișier.

Versiunea Z: Z,1,______,_,__;tip_raport;
Versiunea A: A,1,______,_,__;;;tip_raport;;;
Parametru Tip Obligatoriu Descriere
tip_raport Număr/String Da Versiunea Z: 0=Raport X, 1=Raport Z, 2=Rezumat X, 3=Departamente X
Versiunea A: 'X'=Raport X, 'Z'=Raport Z
Exemple:
Z,1,______,_,__;0;    
Z,1,______,_,__;1;    
A,1,______,_,__;;;X;;;

L Subtotal

Tipărește subtotal (alternativă la T cu tipul 4).

Sintaxă: L,1,______,_,__;;;;;
Exemplu:
L,1,______,_,__;;;;;

DS Deschide Sertar

Deschide sertarul de numerar conectat la dispozitivul fiscal.

Sintaxă: DS,1,______,_,__;durata_impuls_ms;;;;
ParametruPozițieTipObligatoriuDescriere
durata_impuls_ms 1 număr Nu Durata impulsului de deschidere a sertarului în milisecunde (implicit: 100). Notă: Ignorat de dispozitivele Tremol.
Exemple:
DS,1,______,_,__;;;;; 
DS,1,______,_,__;200;;;; 
DS,1,______,_,__;150;;;; 

Exemple Complete Fișiere INP

Vânzare Simplă 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 Reducere și Plată Card

S,1,______,_,__;Laptop Computer;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;878.74;;;;

Metode de Plată Mixte

S,1,______,_,__;Combustibil Premium;1.45;40.000;3;1;1;0;0;l
T,1,______,_,__;0;50.00;;;;
T,1,______,_,__;1;8.00;;;;

Bon cu CUI Client

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,______,_,__;Mulțumim pentru;cumpărătură;Bine ați revenit;;;
T,1,______,_,__;0;10.00;;;;

Depozit Numerar

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

Raport X

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

Raport Z

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

Gestionarea Erorilor

Când procesarea fișierului INP eșuează, fișierul de intrare este mutat în directorul BonERR cu detaliile erorii anexate ca comentarii. Nu se creează fișier separat de eroare în BonANSWER pentru operațiunile eșuate.

Fluxul Procesului Fișier Eroare

  1. Fișierul INP este redenumit în .processing în timpul execuției
  2. La eroare de analiză: Conținutul original + detalii eroare sunt scrise în BonERR/
  3. La eroare de execuție: Conținutul original + detalii eroare execuție sunt scrise în BonERR/
  4. Fișierul de procesare este eliminat/curățat

Format Conținut Fișier Eroare

Fișierele eroare conțin conținutul INP original urmat de detalii eroare ca comentarii:

# Conținut fișier INP original (nemodificat)
S;Produs Test;10.50;kg;1.5;99

# Informații eroare anexate de driver
#Linia 1 | S;Produs Test;10.50;kg;1.5;99
#ErrorCode (-112207) : Valoare incorectă a parametrului departament.

Pentru erorile de execuție (nu erori de analiză):

# Conținut fișier INP original (nemodificat)
S;Produs Test;10.50;kg;1.5;2

# Informații eroare execuție
#Linia 0 | Execution Error
#ErrorCode (-201003) : Dispozitivul fiscal nu este conectat sau nu răspunde

Bune Practici

  • Denumirea Fișierelor: Folosiți nume de fișiere unice, secvențiale pentru a evita conflictele de procesare
  • Monitorizarea Rezultatelor: Verificați regulat directoarele BonOK, BonERR și BonANSWER pentru rezultatele procesării
  • Codificarea: Folosiți codificarea UTF-8 pentru fișierele INP pentru a suporta caracterele internaționale
  • Terminații Linii: Terminațiile de linie Windows (CRLF) sunt recomandate dar nu obligatorii
  • Format Comandă: Folosiți întotdeauna punct și virgulă (;) ca separator și urmați ordinea corectă a parametrilor
  • Restricții Caractere: Evitați punct și virgulă (;) în descrierile produselor deoarece este folosit ca separator de câmp
  • Monitor Unic: Doar o aplicație să monitorizeze fiecare director INP pentru a preveni condițiile de cursă

Considerații Performanță

  • Driverul procesează fișierele secvențial pentru fiecare dispozitiv pentru a menține conformitatea fiscală
  • Fișierele sunt redenumite temporar în .processing în timpul execuției pentru a preveni conflictele
  • Numărul mare de fișiere simultane poate cauza întârzieri din cauza procesării secvențiale
  • Considerați implementarea unui mecanism de coadă pentru scenarii cu volum mare
  • Monitorizați spațiul pe disc în directoarele INP, în special BonOK și BonANSWER care se acumulează în timp
  • Driverul așteaptă 100ms după detectarea fișierului pentru a asigura scrierea completă înainte de procesare
  • Fișierele eșuate sunt mutate în BonERR cu detalii eroare anexate, nu eliminate

Note Integrare

Interfața fișiere INP este ideală pentru:

  • Integrarea Sistemelor Moștenite: Sisteme care nu pot folosi API-urile HTTP/WebSocket
  • Procesarea în Lot: Procesarea mai multor bonuri din tranzacțiile în coadă
  • Fiabilitatea: Operațiunile bazate pe fișiere oferă persistență naturală și recuperare
  • Depanarea: Fișierele INP și răspunsurile oferă piste de audit clare

Important: Doar comenzile documentate mai sus sunt suportate de driverul FisCool. Sintaxa urmează formatul separat prin virgule cu antetul standard ,1,______,_,__;. Comenzile avansate cum ar fi 54 (text formatat) și 84 (coduri de bare) pot fi suportate dar nu sunt garantate pe toate tipurile de dispozitive.