API Numere de serie

Preluarea și separarea numerelor de serie ale produselor (numere de serie, articole LOT/lot)

URL de bază

https://{tenant}.logzi.com/api/stock_serial/

Fiecare cerere returnează un răspuns JSON. În cazul unui răspuns cu succes result.code == 1 (HTTP 200), în caz de eroare sau când nu se găsește nicio înregistrare result.code == 0 (HTTP 203).

Observație: Numerele de serie sunt generate automat în procesul de recepție/eliberare din depozit. Prin API ele pot fi preluate, iar articolele LOT (lot) pot fi separate; crearea de noi numere de serie și ștergerea lor nu sunt disponibile.

Mod de funcționare

Setarea serialnumber_required a produsului determină modul în care sistemul gestionează numerele de serie:

  • 1 – număr de serie obligatoriu: fiecare bucată este un rând separat de număr de serie, quantity este întotdeauna 1.
  • 2 – număr LOT (lot) obligatoriu: un rând reprezintă mai multe bucăți, quantity este cantitatea din LOT.
  • 3 – număr LOT și termen de valabilitate obligatorii: ca LOT, dar rândul are și date_expire (expirare).

Punctele finale de separare (save_separate, save_separate_all) împart rândurile LOT. La separare, rândurile noi primesc toate datele rândului sursă (produs, depozit, locație, palet, număr de serie/identificator LOT, expirare, data creării) precum și legăturile cu documentele; cantitatea totală din stoc nu se modifică.

Separarea este posibilă doar pentru un rând neutilizat (used = 0) și neșters (remove = 0).

GET /api/stock_serial/get

Preluarea unei singure înregistrări de număr de serie pe baza identificatorului. O înregistrare ștearsă (remove = 1) nu este returnată.

Parametri de interogare

Parametru Tip Obligatoriu Descriere
id int Identificatorul unic al înregistrării numărului de serie (db_stock_serial.id)

Câmpuri de răspuns (obiectul data)

CâmpTipDescriere
idintIdentificatorul înregistrării numărului de serie
product_idintIdentificatorul produsului
store_idintIdentificatorul depozitului (punctului de lucru) în care se află articolul
company_idintIdentificatorul companiei căreia îi aparține articolul
serial_numberstringNumărul de serie sau identificatorul LOT (lot), maximum 30 de caractere
quantityfloatCantitate: 1 pentru produsele cu număr de serie, numărul de bucăți din LOT pentru produsele LOT
usedint0 = disponibil (neutilizat), 1 = utilizat
removeintIndicator de ștergere, interogarea returnează doar înregistrările cu valoarea 0
store_locality_idint | nullIdentificatorul locației din depozit, dacă articolul este atribuit unei locații
pallet_idint | nullIdentificatorul paletului, dacă articolul este atribuit unui palet
date_createdatetimeMomentul creării numărului de serie (AAAA-LL-ZZ HH:MM:SS)
date_expiredatetime | nullData de valabilitate (expirare), completată doar pentru produsele LOT cu termen de valabilitate obligatoriu
chkstringIdentificator intern de control (32 de caractere), nu se utilizează în integrări

Exemplu de cerere

GET /api/stock_serial/get?id=42
X-API-KEY: {cheia_ta_api}

Exemplu de răspuns

{
  "result": { "code": 1, "message": null },
  "data": {
    "id": 42,
    "product_id": 5,
    "store_id": 1,
    "date_create": "2024-03-15 10:22:00",
    "company_id": 1,
    "serial_number": "LOT-2024-00042",
    "remove": 0,
    "used": 0,
    "chk": "5f4dcc3b5aa765d61d8327deb882cf99",
    "store_locality_id": 7,
    "pallet_id": null,
    "quantity": 50,
    "date_expire": "2026-03-15 00:00:00"
  }
}

Înregistrare negăsită

HTTP 203
{
  "result": { "code": 0, "message": "Not found" },
  "data": null
}
GET /api/stock_serial/list

Preluarea listei paginate a numerelor de serie, cu opțiuni de filtrare. Sunt listate doar înregistrările neșterse (remove = 0) ale produselor de stoc, în ordinea descrescătoare a identificatorului.

Parametri de interogare

Parametru Tip Obligatoriu Descriere
list_offset int Deplasarea paginării, câte înregistrări se omit de la început (implicit: 0). O cerere returnează cel mult 10.000 de înregistrări.
list_condition[product_id] int Filtrare după identificatorul produsului (potrivire exactă)
list_condition[used] int Starea de utilizare: 0 = disponibil, 1 = utilizat
list_condition[serial_number] string Filtrare după numărul de serie / identificatorul LOT (potrivire exactă)
list_condition[partnumber] string Filtrare după codul articolului produsului (potrivire exactă)
list_condition[item_id_used_0] int Numere de serie disponibile pentru un articol de document: rândurile neutilizate (used = 0) și rândurile deja legate de acest articol (item_id)
list_condition[receipt_id] int Numerele de serie legate de documentul dat. Valabil doar împreună cu câmpul receipt_type_id.
list_condition[receipt_type_id] int Identificatorul tipului de document. Valabil doar împreună cu câmpul receipt_id.
list_condition[store_locality_id] int Filtrare după identificatorul locației din depozit
list_condition[product_name_partnumber] string Filtrare după denumirea sau codul articolului produsului (LIKE, caracter generic: %)
list_condition[product_name] string Filtrare după o parte din denumirea produsului
list_condition[product_partnumber_barcode] string Filtrare după o parte din codul articolului sau după codul de bare al produsului
list_condition[date_create_from] date Data creării de la (inclusiv), format: AAAA-LL-ZZ
list_condition[date_create_to] date Data creării până la (inclusiv), format: AAAA-LL-ZZ
list_condition[date_expire_from] date Data de expirare de la (inclusiv), format: AAAA-LL-ZZ
list_condition[date_expire_to] date Data de expirare până la (inclusiv), format: AAAA-LL-ZZ

Câmpuri de răspuns (elementele tabloului data)

Elementele conțin toate câmpurile punctului final get, cu următoarele diferențe și completări:

CâmpTipDescriere
stock_serial_idintIdentificatorul înregistrării numărului de serie (identic cu câmpul id)
date_createstringMomentul creării, format: AAAA.LL.ZZ HH:MM:SS
date_expirestring | nullData de expirare, format: AAAA.LL.ZZ
product_unit_namestringDenumirea produsului
partnumberstringCodul articolului produsului
store_locality_barcodestring | nullCodul de bare al locației din depozit
pallet_barcodestring | nullCodul de bare al paletului
store_namestringDenumirea depozitului (punctului de lucru)

Câmpuri de răspuns (obiectul params)

CâmpTipDescriere
list_countintNumărul maxim de înregistrări returnate într-o cerere (10.000)
list_offsetintDeplasarea indicată în cerere
list_allintNumărul total de înregistrări care corespund filtrului

Exemplu de cerere

GET /api/stock_serial/list?list_offset=0&list_condition[product_id]=5&list_condition[used]=0
X-API-KEY: {cheia_ta_api}

Exemplu de răspuns

{
  "result": { "code": 1, "message": null },
  "data": [
    {
      "id": 42,
      "stock_serial_id": 42,
      "product_id": 5,
      "store_id": 1,
      "company_id": 1,
      "serial_number": "LOT-2024-00042",
      "quantity": 50,
      "used": 0,
      "remove": 0,
      "chk": "5f4dcc3b5aa765d61d8327deb882cf99",
      "store_locality_id": 7,
      "pallet_id": null,
      "date_create": "2024.03.15 10:22:00",
      "date_expire": "2026.03.15",
      "product_unit_name": "Laptop XYZ",
      "partnumber": "LTP-XYZ-001",
      "store_locality_barcode": "A-01-02",
      "pallet_barcode": null,
      "store_name": "Depozit central"
    }
  ],
  "params": {
    "list_count": 10000,
    "list_offset": 0,
    "list_all": 1
  }
}
POST /api/stock_serial/save_separate

Separă într-un rând nou cantitatea indicată dintr-un rând de număr de serie LOT (lot). Cantitatea rândului sursă scade, rândul nou este creat cu aceleași date (produs, depozit, locație, palet, număr de serie/identificator LOT, expirare) și cu cantitatea separată.

Câmpuri POST - obiectul data

CâmpTipObligatoriuDescriere
stock_serial_idintIdentificatorul rândului de număr de serie care trebuie separat. Rândul nu poate fi șters și nu poate fi utilizat (used = 0).
quantityfloatCantitatea de separat. Trebuie să fie mai mare decât zero și mai mică decât cantitatea totală a rândului.

Câmpuri de răspuns (obiectul data)

CâmpTipDescriere
stock_serial_idintIdentificatorul rândului sursă
new_stock_serial_idintIdentificatorul rândului nou creat
quantity_separatedfloatCantitatea separată în rândul nou
quantity_leftfloatCantitatea rămasă în rândul sursă

Mesaje de eroare (result.message)

MesajCând
Not foundCâmpul data lipsește sau este gol
ex_stock_serial_separate_itemstock_serial_id lipsește, este invalid, nu există sau este șters
ex_stock_serial_separate_usedRândul este deja utilizat (used = 1)
ex_stock_serial_separate_qtyquantity nu este un număr, nu este mai mare decât zero sau nu este mai mică decât cantitatea totală
ex_unknown_msgEroare necunoscută în timpul salvării. În caz de eroare, întreaga operațiune este anulată.

Exemplu de cerere

POST /api/stock_serial/save_separate
X-API-KEY: {cheia_ta_api}
Content-Type: application/json

{
  "data": {
    "stock_serial_id": 42,
    "quantity": 20
  }
}

Exemplu de răspuns

{
  "result": { "code": 1, "message": "success_msg" },
  "data": {
    "stock_serial_id": 42,
    "new_stock_serial_id": 57,
    "quantity_separated": 20,
    "quantity_left": 30
  }
}
POST /api/stock_serial/save_separate_all

Împarte complet un rând de număr de serie LOT (lot) în bucăți individuale: se creează tot atâtea rânduri de câte 1 bucată câte bucăți avea rândul (de ex. dintr-un rând de 50 de bucăți rezultă 50 de rânduri de câte 1 bucată). Rândul original rămâne, cantitatea lui scade la 1, celelalte (cantitate - 1) rânduri sunt create nou cu aceleași date.

Câmpuri POST - obiectul data

CâmpTipObligatoriuDescriere
stock_serial_idintIdentificatorul rândului de număr de serie care trebuie împărțit. Rândul nu poate fi șters și nu poate fi utilizat (used = 0), cantitatea lui trebuie să fie un număr întreg pozitiv, cel puțin 2 și cel mult 25.000.

Câmpuri de răspuns (obiectul data)

CâmpTipDescriere
stock_serial_idintIdentificatorul rândului original (devine și el rând de 1 bucată)
quantity_beforefloatCantitatea rândului original înainte de împărțire
countintNumărul de rânduri după împărțire (inclusiv rândul original, egal cu quantity_before)
stock_serial_idsint[]Identificatorii tuturor rândurilor: primul este rândul original, apoi rândurile nou create în ordine crescătoare

Mesaje de eroare (result.message)

MesajCând
Not foundCâmpul data lipsește sau este gol
ex_stock_serial_separate_itemstock_serial_id lipsește, este invalid, nu există sau este șters
ex_stock_serial_separate_usedRândul este deja utilizat (used = 1)
ex_stock_serial_separate_qty_integerCantitatea rândului nu este un număr întreg pozitiv
ex_stock_serial_separate_singleCantitatea rândului este 1, nu există nimic de împărțit
ex_stock_serial_separate_max_rowsCantitatea rândului depășește cele 25.000 de bucăți care pot fi împărțite simultan (la sfârșitul mesajului apare maximul permis)
ex_unknown_msgEroare necunoscută în timpul salvării. În caz de eroare, întreaga operațiune este anulată.
Atenție: Operațiunea nu poate fi anulată prin API (nu există un punct final pentru reunirea rândurilor). Împărțirea unei cantități mari poate dura mai mult.

Exemplu de cerere

POST /api/stock_serial/save_separate_all
X-API-KEY: {cheia_ta_api}
Content-Type: application/json

{
  "data": {
    "stock_serial_id": 42
  }
}

Exemplu de răspuns (împărțirea unui rând de 3 bucăți)

{
  "result": { "code": 1, "message": "success_msg" },
  "data": {
    "stock_serial_id": 42,
    "quantity_before": 3,
    "count": 3,
    "stock_serial_ids": [42, 58, 59]
  }
}

Ia legătura cu noi

Ești interesat de software-ul nostru? Scrie-ne cu încredere!

Ai nevoie de ajutor?

Dacă nu găsești răspunsul și ai nevoie de asistență

Creează-ți contul acum,
plătește mai târziu!

Încearcă gratuit timp de 3 zile, fără riscuri și fără obligații!