Operațiuni Dispozitive

Această secțiune prezintă operațiunile dispozitivelor suportate care pot fi executate prin API HTTP, API WebSocket sau fișiere INP. Toate operațiunile sunt puternic tipizate și urmează o structură unificată.

Important: Toate operațiunile dispozitivelor necesită un device_id valid (UUID) care corespunde unui dispozitiv fiscal sau terminal POS configurat în sistem.

Operațiuni Dispozitive Fiscale

Următoarele operațiuni sunt disponibile pentru dispozitivele de tipărire fiscală. Toate sumele sunt specificate în bani (cea mai mică unitate monetară).

Descriere: Tipărește un bon fiscal cu articole, plăți și informații opționale ale cumpărătorului. Aceasta este operațiunea cea mai complexă și importantă din sistem.

Parametri:

ParametruTipObligatoriuDescriere
linesArray<ReceiptLine>DaArray de linii bon (articole, text și subtotal)
paymentsArray<PaymentLine>Da*Metode și sume de plată (*auto-calculat dacă omis)
buyerBuyerInfoNuInformații cumpărător pentru facturi
receipt_discountDiscountNuReducere sau adaos la nivel de bon
flagsReceiptFlagsNuFlag-uri comportament bon (implicit: bon fiscal)
close_actionCloseActionNu"close" sau "void" (implicit: "close")
Obiect ReceiptLine

Liniile bonului pot fi articole, text liber sau operațiuni de subtotal:

// Linie articol
{
  "type": "item",
  "description": "Nume Produs",
  "quantity_thousandths": 1000,    // 1000 = 1.000 bucăți
  "unit_price_cents": 1500,        // 1500 = 15.00 unități monetare
  "vat": "19%",                    // Poate fi procent (ex., "19%") sau literă ("A", "B", etc.)
  "discount": {                    // Reducere opțională la nivel de articol
    "kind": "percent",
    "basis_points": 1000,          // 1000 = 10.00%
    "is_surcharge": false
  },
  "um": "buc"                      // Unitatea de măsură (opțional)
}

// Linie text
{
  "type": "text",
  "text": "Text personalizat de tipărit"
}

// Linie subtotal
{
  "type": "subtotal",
  "discount": {                    // Reducere opțională la nivel de subtotal
    "kind": "percent",
    "basis_points": 1000,          // 1000 = 10.00%
    "is_surcharge": false
  }
}

Note:

  • Este permis un singur subtotal cu reducere pe bon.
  • Nu puteți utiliza o reducere la subtotal dacă există și o reducere globală (receipt_discount).
Obiect PaymentLine
{
  "method": "cash",                // "cash", "card", "credit", "tichete_masa", etc.
  "amount_cents": 1500             // Suma plății în bani
}
Obiect BuyerInfo
{
  "vat_number": "RO12345678"       // Număr TVA (CUI/CIF)
}
Obiect Discount
// Reducere procentuală
{
  "kind": "percent",
  "basis_points": 1000,            // 1000 = 10.00%
  "is_surcharge": false            // false = reducere, true = adaos
}

// Reducere sumă absolută
{
  "kind": "absolute", 
  "amount_cents": 500,             // 500 = 5.00 unități monetare
  "is_surcharge": false
}

Răspuns:

{
  "status": 0,
  "msg": "Bon tipărit",
  "slip_number": 123               // Numărul bonului fiscal
}

Auto Card-către-POS: Dacă este activat în configurația dispozitivului, plățile cu cardul din bon vor declanșa automat o tranzacție de vânzare POS înainte de tipărirea bonului fiscal.

Descriere: Tipărește un bon non-fiscal (text liber) pe dispozitivul fiscal. Util pentru note de plată, bonuri de comandă sau alte informații care nu necesită fiscalizare.

Parametri:

ParametruTipObligatoriuDescriere
linesArray<NonFiscalLine>DaArray de linii de text pentru bonul non-fiscal
Obiect NonFiscalLine
// Linie text simplă
{
  "type": "text",
  "text": "Text de tipărit"
}

// Linie text cu formatare (Doar DATECS - ignorat pe alte dispozitive)
{
  "type": "text",
  "text": "Text formatat",
  "formatting": {
    "bold": true,
    "italic": false,
    "double_height": true,
    "underline": false,
    "alignment": "center", // "left", "center", "right"
    "condensed": false
  }
}

Răspuns:

{
  "status": 0,
  "msg": "Bon tipărit"
}

Descriere: Tipărește un raport X (rezumat zilnic non-fiscal).

Parametri: Niciun parametru

Răspuns:

{
  "status": 0,
  "msg": "Raport tipărit",
  "report_number": 45
}

Descriere: Tipărește un raport Z (închidere fiscală zilnică).

Parametri: Niciun parametru

Răspuns:

{
  "status": 0,
  "msg": "Raport tipărit", 
  "report_number": 46
}

deposit_cash

Descriere: Înregistrează un depozit de numerar în dispozitivul fiscal.

Parametri:

ParametruTipObligatoriuDescriere
amountintegerDaSuma depozitului în bani (trebuie să fie > 0)

Răspuns:

{
  "status": 0,
  "msg": "Operațiune numerar reușită",
  "total_cash_drawer": 15000       // Total numerar în sertar după operațiune (bani)
}

withdraw_cash

Descriere: Înregistrează o retragere de numerar din dispozitivul fiscal.

Parametri:

ParametruTipObligatoriuDescriere
amountintegerDaSuma retragerii în bani (trebuie să fie > 0)

Răspuns:

{
  "status": 0,
  "msg": "Operațiune numerar reușită",
  "total_cash_drawer": 10000       // Total numerar în sertar după operațiune (bani)
}

chime

Descriere: Declanșează semnalul acustic (bip) pe dispozitivul fiscal.

Parametri: Niciun parametru

Răspuns:

{
  "status": 0,
  "msg": "Operațiune finalizată cu succes"
}

open_drawer

Descriere: Deschide sertarul de numerar conectat la dispozitivul fiscal.

Parametri:

ParametruTipObligatoriuDescriere
pulse_duration_ms număr Nu Durata impulsului de deschidere a sertarului în milisecunde. Implicit: 100. Notă: Ignorat de dispozitivele Tremol.

Răspuns:

{
  "status": 0,
  "msg": "Operațiune finalizată cu succes"
}

anaf_export

Descriere: Exportă datele fiscale pentru raportarea ANAF (autoritatea fiscală română).

Parametri:

ParametruTipObligatoriuDescriere
rangeAnafExportRangeDaInterval de date sau număr Z pentru export
destination_pathstringDaCalea completă unde să salveze fișierul de export
Obiect AnafExportRange
// Interval de date
{
  "start": "2023-12-01",
  "end": "2023-12-31"
}

// Interval număr Z  
{
  "start": 1,
  "end": 10
}

Răspuns:

{
  "status": 0,
  "msg": "Operațiune finalizată cu succes"
}

anaf_status

Descriere: Preia starea sincronizării ANAF din dispozitivul fiscal.

Parametri: Niciun parametru

Răspuns:

{
  "status": 0,
  "msg": "Datele raportului preluate cu succes",
  "data": "{\"Success\":{}}"        // String JSON cu detalii stare ANAF
}

Descriere: Încarcă o imagine logo în dispozitivul fiscal pentru tipărirea pe bonuri.

Parametri:

ParametruTipObligatoriuDescriere
image_datastringDaDate imagine codificate Base64 (PNG, JPG, etc.)

Răspuns:

{
  "status": 0,
  "msg": "Operațiune finalizată cu succes"
}

fiscal_memory_report

Descriere: Generează un raport de memorie fiscală pentru un interval specificat de date sau număr Z.

Parametri:

ParametruTipObligatoriuDescriere
rangeFiscalRangeDaInterval de date sau număr Z
report_typestringDa"short" sau "detailed"
Obiect FiscalRange
// Interval de date
{
  "start": "2023-12-01",
  "end": "2023-12-31" 
}

// Interval număr Z
{
  "start": 1,
  "end": 10
}

Răspuns:

{
  "status": 0,
  "msg": "Operațiune finalizată cu succes"
}

je_report

Descriere: Generează un raport jurnal electronic (JE) cu opțiuni de filtrare.

Parametri:

ParametruTipObligatoriuDescriere
rangeJeReportRangeDaSpecificația intervalului pentru raport
doc_typestringDaFiltru tip document
output_modestringDaDestinația ieșirii
Obiect JeReportRange
// Interval de date
{
  "type": "date",
  "start": "2023-12-01",
  "end": "2023-12-31"
}

// Interval număr Z
{
  "type": "z_number", 
  "start": 1,
  "end": 10
}

// Interval număr document
{
  "type": "doc_number",
  "start": 100,
  "end": 200
}
Tipuri Documente
  • "all" - Toate tipurile de documente
  • "fiscal_receipts" - Doar bonuri fiscale
  • "z_reports" - Doar rapoarte Z
  • "invoices" - Doar facturi
  • "non_fiscal_receipts" - Doar bonuri non-fiscale
  • "numerar" - Doar operațiuni numerar
Moduri Ieșire
  • "print_on_device" - Tipărește raportul pe imprimanta dispozitivului fiscal
  • "read_line_by_line" - Returnează datele raportului pentru afișare/procesare

Răspuns:

{
  "status": 0,
  "msg": "Datele raportului preluate cu succes",
  "data": "Conținut raport..."       // Conține datele raportului dacă output_mode este "read_line_by_line"
}

Operațiuni Terminal POS

Următoarele operațiuni sunt disponibile pentru terminalele de plată POS:

sale

Descriere: Inițiază o tranzacție de plată pe terminalul POS.

Parametri:

ParametruTipObligatoriuDescriere
amountintegerDaSuma tranzacției în bani (trebuie să fie > 0)

Răspuns:

{
  "status": 0,
  "msg": "Vânzare reușită: [detalii_tranzacție]"
}

settlement

Descriere: Efectuează o închidere de zi pe terminalul POS.

Parametri: Niciun parametru

Răspuns:

{
  "status": 0,
  "msg": "Închidere reușită: [detalii_închidere]"
}

Format Răspuns Comun

Toate operațiunile dispozitivelor returnează un format standardizat de răspuns:

{
  "status": 0,                     // 0 = succes, non-zero = eroare
  "msg": "Descriere operațiune",  // Mesaj lizibil pentru om
  // ... câmpuri suplimentare specifice operațiunii
}

Pentru răspunsurile de eroare, formatul este:

{
  "status": [cod_eroare],          // Număr negativ pentru erori
  "error": "Descriere eroare"    // Mesaj detaliat de eroare
}

Exemple de Utilizare

Consultați paginile API HTTP și API WebSocket pentru exemple complete despre cum să invocați aceste operațiuni.