FiscalBridge pentru integratori.
Aici găsești tot ce îți trebuie ca programul tău să emită bonuri prin FiscalBridge: formatele de fișiere, API-ul HTTP local, codurile de eroare și kitul pentru tehnicianul care face instalarea.
Documentație actualizată la 25 septembrie 2026 (versiunea 1 a API-ului).
Trei feluri de a trimite bonuri.
- Fișiere într-un folder. Programul tău scrie bonul într-un fișier text, iar FiscalBridge îl emite și scrie răspunsul lângă el.
- API HTTP local. Programul tău trimite bonul ca JSON pe portul 5078, implicit doar de pe calculatorul pe care rulează FiscalBridge.
- Stații în rețea. Celelalte calculatoare din aceeași rețea folosesc aceeași casă de marcat prin portul 5077, care e oprit până pornești casa partajată.
Fișiere.
Formatele de fișier pe care FiscalBridge le primește în folderele configurate (canalul de fișiere) și prin FiscalBridgePrint.exe. Import fișiere în formatul FiscalNet / Fisco; FiscalNet și Fisco sunt mărci ale titularilor lor; POSEO nu este afiliată.
Folderele
Bonuri: folderul de intrare configurat, unde programul tău scrie fișiereleRaspuns: răspunsurile (lângă folderul de intrare; la Fisco: BonOK / BonERR / BonANSWER)Istoric: fișierele procesate, pe zileC:\ProgramData\FiscalBridge\files\cli\in: plicurile FiscalBridgePrint.exe (nu se scrie de mână)
Reguli
- Numele fiecărui fișier e unic: un nume refolosit în fereastra de protecție întoarce răspunsul primului fișier, fără al doilea bon.
- Fișierul se scrie complet și abia apoi se pune în folder (sau se redenumește): FiscalBridge îl preia doar după ce dimensiunea nu se mai schimbă.
- Codificarea: UTF-8 (cu sau fără BOM) sau Windows-1250; diacriticele se păstrează.
- Fișierele peste 256 KB sunt refuzate înainte de casă.
- Unitatea de măsură e obligatorie pe fiecare articol (OUG 69/2024); lipsa ⇒ „buc” și un avertisment.
- Căile de export (RF, JE) sunt acceptate doar sub folderul de exporturi al FiscalBridge; altfel EXPORT_PATH_NOT_ALLOWED.
Linii cu ^ (formatul FiscalNet)
Extensii: .txt · separatorul ^ · sumele în bani (1000 = 10,00 lei); cantități în miimi.
| Comanda | Ce face | Câmpuri | Licența | Exemplu |
|---|---|---|---|---|
S |
Vânzare articol | denumire; preț în bani (1000 = 10,00 lei); cantitate în miimi (1000 = 1); unitate de măsură (obligatorie după OUG 69/2024; lipsă ⇒ „buc” + avertisment); grupa de TVA; departament | bon fiscal nou | S^CAFEA^1000^1000^buc^1^1 |
VS |
Stornare articol (în bonul curent) | denumire; preț în bani; cantitate în miimi; unitate de măsură; grupa de TVA; departament | bon fiscal nou | S^CAFEA^1000^2000^buc^1^1 |
P |
Plată | tipul plății (1..9, după tabelul casei; 1 = numerar); suma în bani | bon fiscal nou | S^CAFEA^1000^1000^buc^1^1 |
TL |
Text liber pe bon | textul | bon fiscal nou | S^CAFEA^1000^1000^buc^1^1 |
ST |
Subtotal | — | bon fiscal nou | S^CAFEA^1000^1000^buc^1^1 |
DP |
Reducere procentuală pe subtotal | procentul ×100 (1000 = 10%) | bon fiscal nou | S^CAFEA^1000^1000^buc^1^1 |
DV |
Reducere valorică pe subtotal | valoarea în bani | bon fiscal nou | S^CAFEA^1000^1000^buc^1^1 |
MP |
Adaos procentual pe subtotal | procentul ×100 | bon fiscal nou | S^CAFEA^1000^1000^buc^1^1 |
MV |
Adaos valoric pe subtotal | valoarea în bani | bon fiscal nou | S^CAFEA^1000^1000^buc^1^1 |
CB |
Cod de bare pe bon | codul; tipul (1..4) | bon fiscal nou | S^CAFEA^1000^1000^buc^1^1 |
CF |
Codul fiscal al cumpărătorului (tipărit pe bon) | CIF-ul | bon fiscal nou | CF^55376780 |
I |
Intrare de numerar în casă | suma în bani | mereu disponibilă | I^10000 |
O |
Extragere de numerar din casă | suma în bani | mereu disponibilă | O^5000 |
X |
Raportul X | — | mereu disponibilă | X^ |
Z |
Raportul Z (închiderea zilei) | — | mereu disponibilă | Z^ |
RF |
Raport periodic pe interval de date (fără cale); cu a treia valoare = exportul ANAF în folderul de exporturi | data de început (zz/ll/aaaa); data de sfârșit; cale de export (opțională; doar sub folderul de exporturi al FiscalBridge) | mereu disponibilă | RF^01/09/2026^20/09/2026^ |
RFP |
Raport periodic pe interval de date | data de început; data de sfârșit; D = detaliat (implicit) / S = sumar | mereu disponibilă | RFP^01/09/2026^20/09/2026^S |
RFZ |
Raport periodic pe interval de numere Z | primul Z; ultimul Z; D / S | mereu disponibilă | RFZ^1^20^D |
JE |
Citirea jurnalului electronic | primul document (opțional); ultimul document (opțional); cale de export (opțională; doar sub folderul de exporturi) | mereu disponibilă | JE^1^10 |
VB |
Anularea bonului rămas deschis | — | mereu disponibilă | VB^ |
DS |
Deschiderea sertarului de bani | — | mereu disponibilă | DS^ |
MD |
Mesaj pe afișajul clientului | rândul 1; rândul 2 (opțional) | bon fiscal nou | MD^Bine ati venit! |
POS |
Plată cu cardul pe terminalul bancar, legată de bon | suma în bani | plată nouă cu cardul + bon fiscal nou | S^CAFEA^1000^1000^buc^1^1 |
COPIEBON |
Duplicatul ultimului bon prin funcția de duplicat a casei (marcat DUPLICAT, nefiscal). FiscalBridge nu produce copii; o casă fără funcție de duplicat ⇒ COPY_NOT_ALLOWED, fără nicio comandă trimisă. | — | mereu disponibilă | COPIEBON^ |
Linii FPrint (CMD,NR,______,_,__;câmp;…)
Extensii: .inp, .bon · separatorul ; · sumele în lei, cu punct zecimal (sau întregi, dacă folderul e configurat așa).
| Comanda | Ce face | Câmpuri | Licența | Exemplu |
|---|---|---|---|---|
S |
Vânzare articol | denumire; preț (lei cu punct); cantitate; departament; grupă; cota/grupa de TVA; tip reducere (0 = fără); valoare reducere; unitate de măsură | bon fiscal nou | S,1,______,_,__;CAFEA;10.00;1.000;1;1;1;0;0;buc; |
T |
Plată (0 = numerar; fără sumă = restul) | tipul plății; suma (opțională) | bon fiscal nou | S,1,______,_,__;CAFEA;10.00;1.000;1;1;1;0;0;buc; |
L |
Subtotal | — | bon fiscal nou | S,1,______,_,__;CAFEA;10.00;1.000;1;1;1;0;0;buc; |
C |
Reducere sau adaos pe subtotal | tipul; valoarea | bon fiscal nou | S,1,______,_,__;CAFEA;10.00;1.000;1;1;1;0;0;buc; |
P |
Text liber pe bon (până la 3 rânduri) | rândul 1; rândul 2; rândul 3 | bon fiscal nou | S,1,______,_,__;CAFEA;10.00;1.000;1;1;1;0;0;buc; |
K |
Codul fiscal al cumpărătorului | CIF-ul | bon fiscal nou | K,1,______,_,__;55376780; |
I |
Intrare/extragere de numerar | tipul (0 = intrare, 1 = extragere); suma | mereu disponibilă | I,1,______,_,__;0;100.00; |
Z |
Raportul Z | opțiuni (opțional) | mereu disponibilă | Z,1,______,_,__; |
A |
Raportul vânzărilor pe articole | —; —; X sau Z | mereu disponibilă | A,1,______,_,__;;;X; |
X |
Raportul X | — | mereu disponibilă | X,1,______,_,__; |
R |
Raport periodic | tipul; detaliat; data de început (zz-ll-aaaa); data de sfârșit | mereu disponibilă | R,1,______,_,__;7;1;01-09-2026;20-09-2026; |
V |
Mesaj pe afișajul clientului | acțiunea (0 = golire, 1 = rândul de sus, 2 = rândul de jos); textul | bon fiscal nou | V,1,______,_,__;1;Bine ati venit; |
D |
Duplicatul ultimului bon prin funcția de duplicat a casei (marcat DUPLICAT, nefiscal; singur în fișier). FiscalBridge nu produce copii; o casă fără funcție de duplicat ⇒ COPY_NOT_ALLOWED, fără nicio comandă trimisă. | — | mereu disponibilă | D,1,______,_,__; |
H |
Blocarea tastaturii casei (acceptată, fără efect: răspuns „Ok”) | — | bon fiscal nou | H,1,______,_,__; |
F |
Deblocarea tastaturii casei (acceptată, fără efect) | — | bon fiscal nou | H,1,______,_,__; |
Q |
Cod de bare pe bon | tipul; codul | bon fiscal nou | S,1,______,_,__;CAFEA;10.00;1.000;1;1;1;0;0;buc; |
W |
Text liber cu stil (stilul se ignoră) | stilul; textul | bon fiscal nou | S,1,______,_,__;CAFEA;10.00;1.000;1;1;1;0;0;buc; |
Răspunsurile
| Profilul | Unde e răspunsul | Exemple |
|---|---|---|
| FiscalNet | Raspuns\<același nume> (folderul „Raspuns” de lângă folderul în care vin bonurile) |
Bon emis
BONOK=1Eroare
BONOK=0Refuz de licență
BONOK=0Duplicat refuzat
BONOK=0 |
| Fisco | la succes: BonOK\<bază>.nrb, BonANSWER\<același nume> ([Answer]) și, ultimul, fișierul mutat în BonOK\<același nume>; la eroare: BonERR\<același nume> = fișierul original + liniile # |
Bon emis
[Answer]Refuz de licență
#FiscalBridge nu este activat pe acest calculator. Deschide ecranul "Licenta" si introdu codul de activare din contul poseo.ro sau porneste perioada de proba de 15 zile. (LICENSE_MISSING) |
| FPrint | Raspuns\<același nume>, câte o linie pe comandă (+ Raspuns\<bază>.nrb la succes); cu FiscalBridgePrint.exe: <bază>.out lângă fișier |
Bon emis
OkRefuz de licență
Er-LICENSE_MISSING |
| Legacy | <bază>.out (+ <bază>.nrb și <bază>.ini) în folderul de răspuns |
Bon emis
BONOK=1Refuz de licență
BONOK=0 |
| CLI | FiscalBridgePrint.exe: codul de ieșire 5, textul pe stderr și fișierul de răspuns; rezultatul complet (JSON cu ok, code, messageRo) în files\cli\out\<id>.result.json |
Refuz de licență
{"ok":false,"code":"LICENSE_MISSING","messageRo":"FiscalBridge nu este activat pe acest calculator. Deschide ecranul „Licență” și introdu codul de activare din contul poseo.ro sau pornește perioada de probă de 15 zile."} |
FiscalNet, Fisco, SmartSell și celelalte denumiri de produse sunt mărci ale titularilor lor. POSEO S.R.L. nu este afiliată cu aceștia; le numim doar ca să arătăm cu ce fișiere lucrează FiscalBridge.
API HTTP local.
Fiecare cerere poartă antetul X-Api-Key. Portul api (5078, doar pe acest calculator, implicit): cheia din agent.settings.json, secțiunea Api:ApiKey (utilizatorii Windows o pot citi). Portul statii (5077, casa partajată, oprit implicit): antetul X-Poseo-Fiscal-Key cu cheia din Broker:ApiKey și antetul X-Poseo-Fiscal-Protocol cu versiunea protocolului (1).
Exemplu: un bon prin POST /receipt
Emite un bon fiscal (câmpurile cererii documentate mai jos). Idempotent după id: aceeași cerere nu tipărește al doilea bon. Un produs gratuit se trimite la prețul lui de listă, cu discountAmount = price × quantity (reducere valorică pe linie); o reducere procentuală cât toată valoarea liniei (discountPercent) e refuzată de unele case (Tremol). Logarea pe casă: operator (cod), operatorPassword, till; cu operator trimis gol se folosește operatorul din configurarea casei, iar textul tipărit vine din operatorText.
Cererea
{
"id": "vanzare-1024",
"operator": "1",
"operatorPassword": "0001",
"till": "1",
"lines": [
{
"name": "CAFEA",
"quantity": 1,
"price": 10.0,
"vatGroup": 1,
"unit": "buc",
"department": 1
}
],
"payments": [
{
"type": 1,
"amount": 10.0
}
]
}Răspunsul
{
"bonOk": 1,
"nrBon": "779",
"fiscalNet": "BONOK=1\r\nNRBON=779\r\nERRINFO=\r\n",
"fisco": "OK;Z=|NR=779|BF=779",
"id": "vanzare-1024",
"code": null,
"outcome": "Issued",
"message": null,
"licenseWarning": null,
"warnings": []
}Fără bon dublu la retrimitere. Câmpul id: o cerere repetată cu același id și același conținut întoarce rezultatul memorat, fără al doilea bon; același id cu alt conținut e refuzat.
Toate rutele
| Ruta | Portul | Cheie | Licența | Ce face |
|---|---|---|---|---|
GET / |
5078 (acest calculator) | nu | fără licență | Sonda de viață: agentul răspunde, starea licenței (licensed, license = cod C3) și starea brokerului. Fără I/O pe casă. |
GET /about |
5078 (acest calculator) | nu | fără licență | Numele, versiunea, mediul (Production/Test), serverul și cheia de licență ale build-ului, timpul de funcționare. |
GET /banks |
5078 (acest calculator) | da | fără licență | Catalogul băncilor și al terminalelor POS cunoscute (static). |
POST /close |
5078 (acest calculator) | da | fără licență | Oprește agentul. Doar de pe acest calculator. |
POST /cloud/flush |
5078 (acest calculator) | da | fără licență | Trimite acum sumarele de bon din coada locală către cloud (dacă abonamentul include cloud). |
GET /cloud/status |
5078 (acest calculator) | da | fără licență | Starea trimiterii sumarelor de bon către cloud (coada locală, ultima trimitere). |
GET /config/device |
5078 (acest calculator) | da | fără licență | Configurația casei de marcat salvată pe acest calculator (secretele mascate). |
PUT /config/device |
5078 (acest calculator) | da | configurare | Salvează configurația casei de marcat (prin coada unică). |
POST /config/device/detect |
5078 (acest calculator) | da | configurare | Caută automat casa de marcat pe porturile calculatorului. |
POST /config/device/test |
5078 (acest calculator) | da | configurare | Testează legătura cu casa de marcat din configurația trimisă, fără s-o salveze. |
GET /config/devices |
5078 (acest calculator) | da | fără licență | Catalogul aparatelor (mărci, modele, profiluri POS) pe care FiscalBridge le poate configura. |
POST /config/devices |
5078 (acest calculator) | da | fără licență | Adaugă un aparat în lista configurată. |
GET /config/devices/configured |
5078 (acest calculator) | da | fără licență | Aparatele configurate pe acest calculator. |
POST /config/devices/licence |
5078 (acest calculator) | da | fără licență | Retrasă: încărcarea licenței din fișier. Răspunde 410 cu indicația „POST /license/activate”. |
DELETE /config/devices/{id} |
5078 (acest calculator) | da | fără licență | Scoate un aparat din lista configurată. |
GET /config/devices/{id} |
5078 (acest calculator) | da | fără licență | Un aparat configurat, după identificator. |
PUT /config/devices/{id} |
5078 (acest calculator) | da | fără licență | Modifică un aparat din lista configurată. |
POST /config/devices/{id}/activate |
5078 (acest calculator) | da | configurare | Face aparatul din listă casa activă (salvare prin coada unică). |
POST /config/reset |
5078 (acest calculator) | da | configurare | Șterge configurarea casei (păstrează jurnalul bonurilor, plățile, licența). Doar de pe acest calculator. |
GET /config/webservice |
5078 (acest calculator) | da | fără licență | Setările serviciului web local (port, TLS); cheia nu se afișează. |
POST /config/webservice |
5078 (acest calculator) | da | fără licență | Salvează setările ne-sensibile ale serviciului web local (efect după repornire). |
GET /events |
5078 (acest calculator) | da | fără licență | Flux de evenimente (Server-Sent Events): starea casei, a terminalului și a lucrărilor. |
GET /files/activity |
5078 (acest calculator) | da | fără licență | Activitatea canalului de fișiere (FiscalNet, Fisco, FPrint), cu CNP-urile mascate. |
GET /files/activity/{jobId:guid} |
5078 (acest calculator) | da | fără licență | Detaliul unui fișier procesat: ce s-a trimis casei și răspunsul scris. |
GET /files/attention |
5078 (acest calculator) | da | fără licență | Fișierele care cer o decizie (în așteptare, puse deoparte). |
GET /files/config |
5078 (acest calculator) | da | fără licență | Folderele de fișiere configurate. |
PUT /files/config |
5078 (acest calculator) | da | fără licență | Salvează folderele de fișiere. |
POST /files/config/validate |
5078 (acest calculator) | da | fără licență | Verifică o configurare de foldere fără s-o salveze. |
POST /files/dry-run |
5078 (acest calculator) | da | fără licență | Arată cum ar fi înțeles un fișier (comenzile, răspunsul), fără casă și fără nicio scriere. |
POST /files/pending/{claimId:guid}/recheck |
5078 (acest calculator) | da | fără licență | Reverifică pe casă un fișier cu rezultat incert. |
POST /files/pending/{claimId:guid}/resolve |
5078 (acest calculator) | da | fără licență | Închide manual un fișier cu rezultat incert (emis / neemis), cu cine a decis. |
POST /files/quarantine/{id}/discard |
5078 (acest calculator) | da | fără licență | Mută în istoric un fișier pus deoparte, fără să-l tipărească. |
POST /files/quarantine/{id}/release |
5078 (acest calculator) | da | fără licență | Eliberează un fișier pus deoparte (se procesează din nou). |
GET /files/status |
5078 (acest calculator) | da | fără licență | Starea fiecărui folder de fișiere. |
POST /kitchen/print |
5078 (acest calculator) | da | fără licență | Tipărește un bon de bucătărie (imprimantă ESC/POS nefiscală), prin coada durabilă a imprimantelor. |
POST /label/print |
5078 (acest calculator) | da | fără licență | Tipărește o etichetă (imprimantă ZPL nefiscală). |
GET /license |
5078 (acest calculator) | da | fără licență | Starea licenței FiscalBridge pe acest calculator (cod C3, termene, drepturi). |
POST /license/activate |
5078 (acest calculator) | da | fără licență | Activează licența cu codul de activare din portalul poseo.ro (cere acceptarea termenilor). |
POST /license/demo |
5078 (acest calculator) | da | fără licență | Pornește perioada de probă (CUI-ul firmei + acceptarea termenilor). |
POST /license/refresh |
5078 (acest calculator) | da | fără licență | Reînnoiește acum licența de pe serverul de licențe. |
GET /logs |
5078 (acest calculator) | da | fără licență | Ultimele 100 de linii din jurnalul agentului (agent-*.log din folderul de jurnale). |
GET /logs/access |
5078 (acest calculator) | da | fără licență | Ultimele 200 de linii din jurnalul de acces HTTP. |
POST /payments |
5078 (acest calculator) | da | bon fiscal nou + plată nouă cu cardul | Plată cu cardul + bon fiscal în aceeași cerere, idempotentă după id (cardul NU se debitează dacă bonul nu poate fi emis). |
GET /payments/{id} |
5078 (acest calculator) | da | fără licență | Rezultatul memorat al unei plăți, după id. Nu atinge casa, nici terminalul. |
GET /pos/cashback/status |
5078 (acest calculator) | da | mereu disponibilă | Starea funcției cashback pe terminal. |
POST /pos/completion |
5078 (acest calculator) | da | mereu disponibilă | Finalizarea unei preautorizări. |
GET /pos/device/info |
5078 (acest calculator) | da | mereu disponibilă | Informațiile terminalului bancar. |
POST /pos/preauthorization |
5078 (acest calculator) | da | plată nouă cu cardul | Preautorizare nouă pe terminalul bancar. |
GET /pos/report/details |
5078 (acest calculator) | da | mereu disponibilă | Raportul detaliat al terminalului bancar. |
GET /pos/report/summary |
5078 (acest calculator) | da | mereu disponibilă | Raportul sumar al terminalului bancar. |
POST /pos/sale |
5078 (acest calculator) | da | plată nouă cu cardul | Plată nouă pe terminalul bancar (fără bon). |
POST /pos/settlement |
5078 (acest calculator) | da | mereu disponibilă | Închiderea de zi a terminalului bancar. |
POST /pos/void |
5078 (acest calculator) | da | mereu disponibilă | Anularea unei tranzacții pe card. |
POST /receipt |
5078 (acest calculator) | da | bon fiscal nou | Emite un bon fiscal (câmpurile cererii documentate mai jos). Idempotent după id: aceeași cerere nu tipărește al doilea bon. Un produs gratuit se trimite la prețul lui de listă, cu discountAmount = price × quantity (reducere valorică pe linie); o reducere procentuală cât toată valoarea liniei (discountPercent) e refuzată de unele case (Tremol). Logarea pe casă: operator (cod), operatorPassword, till; cu operator trimis gol se folosește operatorul din configurarea casei, iar textul tipărit vine din operatorText. |
GET /receipt/{id} |
5078 (acest calculator) | da | fără licență | Rezultatul memorat al unui bon, după id (din jurnalul durabil). Nu atinge casa. |
GET /reports/{type} |
5078 (acest calculator) | da | mereu disponibilă | Rapoartele fiscale: x, z, periodice, jurnal electronic, export ANAF (type = x | z | periodic | journal | anaf …). Mereu disponibile, și fără licență. |
GET /status |
5078 (acest calculator) | da | mereu disponibilă | Starea casei de marcat (citită prin coada unică). |
POST /update/apply-now |
5078 (acest calculator) | da | fără licență | Instalează acum versiunea descărcată: 202 acceptat, 409 casa lucrează, 404 nimic descărcat. |
POST /update/check |
5078 (acest calculator) | da | fără licență | Pornește o verificare de versiune nouă; răspunde imediat 202 cu starea curentă. |
GET /update/status |
5078 (acest calculator) | da | fără licență | Starea actualizărilor automate (versiune, fereastră, mesaj în română). |
POST /cash/in |
5077 (stații) | da | mereu disponibilă | Intrare de numerar. |
POST /cash/out |
5077 (stații) | da | mereu disponibilă | Extragere de numerar. |
GET /device/capabilities |
5077 (stații) | da | fără licență | Ce știe casa de marcat (duplicat nativ, cote programabile), din configurația salvată, fără I/O. |
POST /device/config |
5077 (stații) | da | configurare | Salvează configurația casei (de pe stația de administrare). |
GET /device/descriptor |
5077 (stații) | da | mereu disponibilă | Datele casei (marcă, model, serie). |
GET /device/status |
5077 (stații) | da | mereu disponibilă | Starea casei. |
GET /device/vat |
5077 (stații) | da | mereu disponibilă | Cotele TVA programate în casă. |
POST /device/vat |
5077 (stații) | da | configurare | Programează cotele TVA în casă. |
GET /device/vat/can-program |
5077 (stații) | da | fără licență | Dacă se pot programa cotele TVA acum (fără I/O). |
POST /drawer/open |
5077 (stații) | da | mereu disponibilă | Deschide sertarul de bani. |
GET /health |
5077 (stații) | da | fără licență | Sonda brokerului: versiunea protocolului și numele real al serviciului. |
GET /operations/{key} |
5077 (stații) | da | fără licență | Starea unei operațiuni idempotente (în curs, încheiată, incertă). Nu atinge casa. |
POST /receipt |
5077 (stații) | da | bon fiscal nou | Emite bonul unei stații (protocolul v1), idempotent după id. |
POST /receipt/cancel |
5077 (stații) | da | mereu disponibilă | Anulează bonul rămas deschis. |
GET /receipt/caps |
5077 (stații) | da | fără licență | Ce acceptă constructorul de bon al acestei versiuni (fără I/O). |
GET /receipt/evidence |
5077 (stații) | da | mereu disponibilă | Dovada ultimului bon citită din casă (recuperarea după o întrerupere). |
POST /receipt/unlock |
5077 (stații) | da | mereu disponibilă | Deblochează casa rămasă cu un bon neînchis. |
POST /receipt/validate |
5077 (stații) | da | bon fiscal nou | Validează bonul pe gazdă, fără I/O pe casă, înainte ca stația să debiteze cardul. |
POST /reports/anaf |
5077 (stații) | da | mereu disponibilă | Exportul ANAF pe interval de date. |
POST /reports/anaf-z |
5077 (stații) | da | mereu disponibilă | Exportul ANAF pe interval de numere Z. |
POST /reports/journal |
5077 (stații) | da | mereu disponibilă | Citirea jurnalului electronic. |
POST /reports/periodic-date |
5077 (stații) | da | mereu disponibilă | Raportul periodic pe interval de date. |
POST /reports/periodic-z |
5077 (stații) | da | mereu disponibilă | Raportul periodic pe interval de numere Z. |
POST /reports/receipt-copy |
5077 (stații) | da | mereu disponibilă | Duplicatul bonului prin funcția de duplicat a casei (marcat DUPLICAT, nefiscal). FiscalBridge nu produce copii; o casă fără funcție de duplicat ⇒ 400 COPY_NOT_ALLOWED, fără nicio comandă trimisă. |
POST /reports/x |
5077 (stații) | da | mereu disponibilă | Raportul X. |
POST /reports/z |
5077 (stații) | da | mereu disponibilă | Raportul Z. |
Exemple complete: curl, C#, Python, Node.
Înlocuiește CHEIA-DIN-agent.settings.json cu cheia din agent.settings.json
(secțiunea Api:ApiKey). Manifestul complet al API-ului e public, în format JSON:
/fiscalbridge/api.json.
Un bon fiscal: POST /receipt
bon.json
{
"id": "vanzare-1024",
"operator": "1",
"operatorPassword": "0001",
"till": "1",
"lines": [
{
"name": "CAFEA",
"quantity": 1,
"price": 10.0,
"vatGroup": 1,
"unit": "buc",
"department": 1
}
],
"payments": [
{
"type": 1,
"amount": 10.0
}
]
}curl
curl -X POST http://127.0.0.1:5078/receipt -H "X-Api-Key: CHEIA-DIN-agent.settings.json" -H "Content-Type: application/json" --data @bon.jsonC#
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("X-Api-Key", "CHEIA-DIN-agent.settings.json");
var bon = File.ReadAllText("bon.json");
var raspuns = await http.PostAsync("http://127.0.0.1:5078/receipt", new StringContent(bon, System.Text.Encoding.UTF8, "application/json"));
Console.WriteLine(await raspuns.Content.ReadAsStringAsync());Python
import json, requests
with open("bon.json", encoding="utf-8") as f:
bon = json.load(f)
raspuns = requests.post("http://127.0.0.1:5078/receipt", headers={"X-Api-Key": "CHEIA-DIN-agent.settings.json"}, json=bon)
print(raspuns.json())Node
import { readFile } from "node:fs/promises";
const bon = await readFile("bon.json", "utf8");
const raspuns = await fetch("http://127.0.0.1:5078/receipt", {
method: "POST",
headers: { "X-Api-Key": "CHEIA-DIN-agent.settings.json", "Content-Type": "application/json" },
body: bon,
});
console.log(await raspuns.json());Raportul Z: GET /reports/z
curl
curl http://127.0.0.1:5078/reports/z -H "X-Api-Key: CHEIA-DIN-agent.settings.json"C#
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("X-Api-Key", "CHEIA-DIN-agent.settings.json");
Console.WriteLine(await http.GetStringAsync("http://127.0.0.1:5078/reports/z"));Python
import requests
print(requests.get("http://127.0.0.1:5078/reports/z", headers={"X-Api-Key": "CHEIA-DIN-agent.settings.json"}).text)Node
const raspuns = await fetch("http://127.0.0.1:5078/reports/z", { headers: { "X-Api-Key": "CHEIA-DIN-agent.settings.json" } });
console.log(await raspuns.text());Raportul X: GET /reports/x
curl
curl http://127.0.0.1:5078/reports/x -H "X-Api-Key: CHEIA-DIN-agent.settings.json"C#
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("X-Api-Key", "CHEIA-DIN-agent.settings.json");
Console.WriteLine(await http.GetStringAsync("http://127.0.0.1:5078/reports/x"));Python
import requests
print(requests.get("http://127.0.0.1:5078/reports/x", headers={"X-Api-Key": "CHEIA-DIN-agent.settings.json"}).text)Node
const raspuns = await fetch("http://127.0.0.1:5078/reports/x", { headers: { "X-Api-Key": "CHEIA-DIN-agent.settings.json" } });
console.log(await raspuns.text());Licența și ce e mereu permis.
Coloana „Licența” din tabele spune ce drept cere fiecare operațiune:
- mereu disponibilă: Mereu disponibilă, și cu licența expirată sau lipsă: rapoarte Z/X, anulare bon deschis, numerar, jurnal, export ANAF, stare.
- bon fiscal nou: Bon fiscal nou: cere o licență valabilă care acoperă casa activă.
- plată nouă cu cardul: Plată nouă pe terminalul bancar: cere dreptul de POS bancar.
- configurare: Salvarea configurației și testele de conexiune: mereu disponibile.
Plata cu cardul urmată de bon (POST /payments) cere ambele drepturi: bonul fiscal nou pe casa de
marcat și plata pe terminalul bancar.
Cum arată refuzul de licență.
Când licența nu permite o operațiune, FiscalBridge nu trimite nimic casei de marcat sau terminalului și răspunde în forma canalului pe care a venit cererea.
| Canalul | Forma | Exemplu |
|---|---|---|
| API local (portul 5078) | HTTP 403, application/problem+json, antetul X-FiscalBridge-License și câmpul code = LICENSE_* | {
"type": "https://poseo.ro/fiscalbridge/licenta",
"title": "Licență",
"status": 403,
"detail": "Nu există o licență activă pe acest calculator.",
"code": "LICENSE_MISSING"
} |
| Stații în rețea (portul 5077) | HTTP 400 cu câmpul code = LICENSE_*Stația tratează răspunsul ca NEEMIS: bonul nu s-a tipărit, cardul nu s-a debitat. | {
"code": "LICENSE_MISSING",
"message": "Nu există o licență activă pe acest calculator.",
"kind": "invalid-operation"
} |
| Fișiere, profilul FiscalNet | BONOK=0 / ERRCODE=LICENSE_* / ERRINFO=<mesaj> | — |
| Fișiere, profilul Fisco | BonERR cu ErrorCode=LICENSE_* | — |
| Fișiere, profilul FPrint | forma de eroare a profilului; codul în activitate | — |
| Fișiere, profilul CLI | {"ok":false,"code":"LICENSE_*","messageRo":"…"} și codul de ieșire 5 | — |
Codurile de licență
LICENSE_OKLICENSE_WARNING_OFFLINELICENSE_EXPIREDLICENSE_DEMO_EXPIREDLICENSE_WRONG_ENVIRONMENTLICENSE_MISSINGLICENSE_DEVICE_NOT_COVEREDLICENSE_CLOCK_INVALID
Ce trebuie să trimită programul tău ca bonul să fie corect.
FiscalBridge emite exact ce primește. Programul tău răspunde de conținutul bonului:
- unitatea de măsură pe fiecare articol (de exemplu „buc” sau „kg”);
- codul operatorului care face vânzarea;
- CUI-ul cumpărătorului, când îl cere, prin câmpul dedicat (comanda
CFsau câmpul fiscal din API), nu ca text liber; - tipul de plată corect (numerar, card, tichete și celelalte), după tabelul casei de marcat;
- bacșișul ca articol separat, cu denumirea „bacșiș”;
- garanția SGR pe o linie distinctă a bonului.
Ce nu face FiscalBridge.
- Duplicatul bonului: Tipărește duplicatul bonului prin funcția de duplicat a casei (marcat DUPLICAT, nefiscal); FiscalBridge nu produce copii; o casă fără funcție de duplicat ⇒ COPY_NOT_ALLOWED, fără nicio comandă trimisă.
- FiscalBridge nu corectează un bon după emitere. Un bon rămas deschis se poate anula; un bon emis rămâne în memoria fiscală așa cum a fost tipărit.
- Nu fiscalizează casa de marcat și nu îi schimbă antetul: acestea rămân la unitatea de service acreditată.
Kitul pentru tehnician.
Arhiva conține ghidul de instalare, documentația de pe această pagină, fișiere-exemplu, scriptul de
verificare Test-FiscalBridge.ps1 și procesul-verbal de verificare a integrării. Procesul-verbal
e un document de lucru pentru verificarea integrării; nu înlocuiește declarația de instalare sau formularele
oficiale ale distribuitorului autorizat.
Case de marcat verificate.
Aparatele pe care am emis bonuri reale prin FiscalBridge:
- Datecs FP-700 (rețea)
- Datecs DP-05 (serial, USB)
- Tremol M20 (serial, USB)
Tabelul complet, cu data fiecărei verificări, e pe pagina case de marcat compatibile. Ai alt model? Scrie-ne.
Întrebări frecvente ale integratorilor.
Cum emit un bon fiscal din aplicația mea?
Trimiți bonul ca JSON la POST http://127.0.0.1:5078/receipt, cu cheia în antetul X-Api-Key; FiscalBridge îl emite pe casa de marcat și răspunde cu numărul bonului. Exemplele de pe această pagină arată cererea în curl, C#, Python și Node.
Ce se întâmplă dacă retrimit aceeași cerere?
Câmpul id: o cerere repetată cu același id și același conținut întoarce rezultatul memorat, fără al doilea bon; același id cu alt conținut e refuzat.
Ce merge și fără licență?
Rapoartele fiscale și operațiunile obligatorii nu depind de licență. Mereu disponibilă, și cu licența expirată sau lipsă: rapoarte Z/X, anulare bon deschis, numerar, jurnal, export ANAF, stare.
Ce se întâmplă când calculatorul nu are internet?
Funcționează până la 14 zile fără internet; te anunțăm din ziua 7.
Poate FiscalBridge să tipărească o copie a unui bon?
Tipărește duplicatul bonului prin funcția de duplicat a casei (marcat DUPLICAT, nefiscal); FiscalBridge nu produce copii; o casă fără funcție de duplicat ⇒ COPY_NOT_ALLOWED, fără nicio comandă trimisă.
Unde găsesc descrierea completă a API-ului?
Manifestul API, cu toate rutele, clasele de licență și formele de refuz, e public în format JSON la /fiscalbridge/api.json.