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:
- În interfața FisCool, selectați configurația dispozitivului fiscal
- Activați checkbox-ul "Compatibilitate INP"
- Specificați un "Director INP" (ex.,
C:\FisCool\INP) - 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încomandă.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ă.anscu 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.
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") |
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.
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) |
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.
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) |
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.
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) |
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.
K,1,______,_,__;număr_cui;
| Parametru | Tip | Obligatoriu | Descriere |
|---|---|---|---|
| număr_cui | String | Da | ID fiscal client (ex., RO12345678) |
K,1,______,_,__;RO22352741;
I Introducere/Scoatere Numerar
Efectuează depozit sau retragere numerar. Trebuie să fie singura comandă din fișier.
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 |
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.
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 |
Z,1,______,_,__;0;
Z,1,______,_,__;1;
A,1,______,_,__;;;X;;;
L Subtotal
Tipărește subtotal (alternativă la T cu tipul 4).
L,1,______,_,__;;;;;
L,1,______,_,__;;;;;
DS Deschide Sertar
Deschide sertarul de numerar conectat la dispozitivul fiscal.
DS,1,______,_,__;durata_impuls_ms;;;;
| Parametru | Poziție | Tip | Obligatoriu | Descriere |
|---|---|---|---|---|
| durata_impuls_ms | 1 | număr | Nu | Durata impulsului de deschidere a sertarului în milisecunde (implicit: 100). Notă: Ignorat de dispozitivele Tremol. |
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
- Fișierul INP este redenumit în
.processingîn timpul execuției - La eroare de analiză: Conținutul original + detalii eroare sunt scrise în
BonERR/ - La eroare de execuție: Conținutul original + detalii eroare execuție sunt scrise în
BonERR/ - 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.