Vai al contenuto

Listini

Endpoint disponibili

Listini di vendita (C + L)

Metodo Path Descrizione
GET /v1/listino Lettura listini di vendita (filtri: gruppo, sottogruppo, codice, paginazione)
GET /v1/listino/up Lettura listini di vendita aggiornati a partire da un sync id
POST /v1/listino Inserimento/aggiornamento/cancellazione batch listini (solo vendita)

Listini fornitore (F) -- sola lettura

Metodo Path Descrizione
GET /v1/listino-fornitore Lettura listini fornitore (filtri: gruppo, sottogruppo, codice, paginazione)
GET /v1/listino-fornitore/up Lettura listini fornitore aggiornati a partire da un sync id

Nota: i listini fornitore sono gestiti in un modulo separato (listiniFornitore.ts). I listini di vendita e fornitore hanno sequenze id_sincro separate, per questo gli endpoint /up sono distinti.


Schema output — GET

ListinoOutput (vendita)

Campo Tipo Campo DB / Join Note
gruppo string rlis_gru Gruppo (codice merce interno)
sottogruppo string rlis_sot Sottogruppo (codice merce interno)
codice integer rlis_cod Codice (codice merce interno)
tipo_listino string rlis_tip_lis Tipo di listino: C = cliente, L = standard
rif_listino integer rlis_rif Riferimento numerico del listino (1-99999)
prezzo number rlis_pre Prezzo di listino
prezzo_campagna number rlis_pre_campagna_cap Prezzo campagna/promozione
sync integer rlis_id_sincro ID di sincronizzazione per aggiornamenti incrementali
cancellato boolean rlis_val = 'C' true se il record e' cancellato logicamente
codice_host_merce string join ARPMERCI (trim(rmer_cma)) Codice della merce nel sistema host esterno

ListinoFornitoreOutput (fornitore)

Campo Tipo Campo DB / Join Note
gruppo string rlis_gru Gruppo (codice merce interno)
sottogruppo string rlis_sot Sottogruppo (codice merce interno)
codice integer rlis_cod Codice (codice merce interno)
tipo_listino string rlis_tip_lis Sempre F = fornitore
rif_listino integer rlis_rif Codice fornitore interno (1-99999)
prezzo number rlis_pre Prezzo di listino
sync integer rlis_id_sincro ID di sincronizzazione per aggiornamenti incrementali
cancellato boolean rlis_val = 'C' true se il record e' cancellato logicamente
codice_host_merce string join ARPMERCI (trim(rmer_cma)) Codice della merce nel sistema host esterno

Query string — GET

GET /v1/listino e GET /v1/listino-fornitore

Parametro Tipo Obbligatorio Note
limit integer NO Max risultati (default/max: 1000)
page integer NO Pagina (paginazione offset-based)
gruppo string NO Filtra per gruppo (match esatto)
sottogruppo string NO Filtra per sottogruppo (match esatto)
codice integer NO Filtra per codice (match esatto)

Questi endpoint escludono le merci cancellate (rmer_stato <> 'C').

GET /v1/listino/up e GET /v1/listino-fornitore/up

Parametro Tipo Obbligatorio Note
sync integer SI ID sincronizzazione di partenza

Questi endpoint non filtrano su rmer_stato, quindi restituiscono anche listini di merci cancellate (per consentire la sincronizzazione delle cancellazioni).


Schema input — POST /v1/listino

Il body e' un array di oggetti ListinoInput.

ListinoInput

Campo Tipo Obbligatorio Note
tipo_listino string SI Tipo di listino: C = cliente, L = standard (valori ammessi: C, L)
rif_listino integer SI Riferimento numerico del listino (0-99999)
prezzo number SI Prezzo di vendita
prezzo_campagna number NO Prezzo campagna/promozione (default: 0)
cancellato boolean NO Cancellazione logica (default: false)
codice_host_merce string SI Codice merce nel sistema host esterno (min 1, max 30 char)
codice_host_cliente string NO Codice cliente nel sistema host esterno (obbligatorio se tipo_listino = 'C')

Query string — POST

Parametro Tipo Obbligatorio Note
ignoraMerceMancante boolean NO Se true, ignora i codici merce non trovati (default: false)

Logica POST — Inserimento/Aggiornamento/Cancellazione

Il POST esegue tutte le operazioni in una singola transazione.

Risoluzione merce

Il codice merce interno viene risolto tramite getRaccordiMerci e getRaccordiPrestazioni a partire dal codice_host_merce. Il primo match valido viene utilizzato.

Se la merce non viene trovata e ignoraMerceMancante = true, il record viene saltato senza errore. Se ignoraMerceMancante = false (default), l'intera transazione fallisce.

Se la merce non esiste e cancellato = true, il record viene silenziosamente ignorato (non e' un errore).

Risoluzione cliente (solo tipo_listino = 'C')

Se codice_host_cliente e' valorizzato, il cliente viene cercato tramite getRaccordiClienti. Il riferimento interno viene usato come rlis_rif.

Classificazione operazioni

Per ogni record:

Condizione Operazione
Listino non presente in DB INSERT su ARPLISTI
Listino presente, prezzo o prezzo_campagna diversi UPDATE con rlis_val = ''
Listino presente, non cancellato, cancellato = true UPDATE con rlis_val = 'C'
Listino gia' cancellato, cancellato = true Ignorato

Controllo duplicati

Prima dell'elaborazione viene eseguita una checkDuplicati sulla chiave composta (gruppo, sottogruppo, codice, tipo_listino, rif_listino) per individuare duplicati nel payload in ingresso.


Tabelle coinvolte

Tabella principale

ARPLISTI — chiave primaria: rlis_azi, rlis_gru, rlis_sot, rlis_cod, rlis_tip_lis, rlis_rif.

Join

Tabella Condizione Tipo Scopo
ARPMERCI rmer_azi = rlis_azi AND rmer_gru = rlis_gru AND rmer_sot = rlis_sot AND rmer_cod = rlis_cod INNER Codice host merce

Risposta

200 OK

GET: array di oggetti ListinoOutput o ListinoFornitoreOutput.

POST:

{
  "message": "OK"
}

400 Bad Request

Errore di validazione del payload (schema o raccordo mancante).

401 Unauthorized

Autenticazione mancante o non valida.


Note implementative

  • Il POST esegue tutte le operazioni in una singola transazione.
  • Il codice merce interno viene risolto tramite getRaccordiMerci e getRaccordiPrestazioni a partire dal codice_host_merce. Il primo match valido viene utilizzato.
  • I duplicati nel payload vengono rilevati tramite checkDuplicati sulla chiave composta (gruppo, sottogruppo, codice, tipo_listino, rif_listino).
  • Se tipo_listino = 'C' e codice_host_cliente e' valorizzato, viene verificata l'esistenza del cliente tramite getRaccordiClienti.
  • Se la merce non esiste e cancellato = true, il record viene silenziosamente ignorato (non e' un errore).
  • Se il listino e' gia' cancellato e si richiede nuovamente la cancellazione, l'operazione viene ignorata.
  • Ogni operazione di scrittura incrementa rlis_id_sincro per tracciare gli aggiornamenti incrementali.
  • I listini fornitore (tipo_listino = 'F') sono esposti in sola lettura: non esiste un endpoint POST per i listini fornitore.
  • I GET standard escludono le merci cancellate (rmer_stato <> 'C'); i GET /up non applicano questo filtro per garantire la sincronizzazione completa delle cancellazioni.
  • Limite massimo per risposta GET: 1000 record.