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 sequenzeid_sincroseparate, per questo gli endpoint/upsono 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
getRaccordiMerciegetRaccordiPrestazionia partire dalcodice_host_merce. Il primo match valido viene utilizzato. - I duplicati nel payload vengono rilevati tramite
checkDuplicatisulla chiave composta (gruppo, sottogruppo, codice, tipo_listino, rif_listino). - Se
tipo_listino = 'C'ecodice_host_clientee' valorizzato, viene verificata l'esistenza del cliente tramitegetRaccordiClienti. - 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_sincroper 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/upnon applicano questo filtro per garantire la sincronizzazione completa delle cancellazioni. - Limite massimo per risposta GET: 1000 record.