Vai al contenuto

API Merci

Endpoint disponibili

Metodo Path Descrizione
GET /v1/merce Lettura lista merci (filtri: gruppo, sottogruppo, codice, descrizione, paginazione)
GET /v1/merce/up Lettura merci aggiornate a partire da un sync id
POST /v1/merce Inserimento/aggiornamento batch merci
POST /v1/merce/raggr_sconti Inserimento gruppi sconti merci

Schema output — GET

MerceOutput

Campo Tipo Campo DB / Join Note
gruppo string rmer_gru Gruppo merce
sottogruppo string rmer_sot Sottogruppo merce
codice integer rmer_cod Codice numerico merce
descrizione string rmer_des Descrizione merce
codice_host_iva string join ARPALIVA Codice host aliquota IVA
unita_misura string rmer_um Unita' di misura
codice_host_servizio string join ARPSERVI Codice host servizio
codice_host_settore string join ARPSETTO Codice host settore (famiglia)
codice_host_sottogruppo string join ARPSOTGR Codice host sottogruppo
codice_host_brand string join APCOGBRAND Codice host brand/marca
tossicita string rmer_tox_new Codice tossicita'
desc_aggiuntive string rmer_desc_aggiuntive Descrizioni aggiuntive (max 2000 char)
sync integer rmer_id_sincro ID di sincronizzazione
cancellato boolean rmer_stato true se rmer_stato = 'C'
codice_host string rmer_cma Codice merce nel sistema host esterno
categoria_sconti_vendita string join ARPMERRAG (classe SV) ID categoria sconti vendita
raggruppamento_1 string rmer_ragr_1 Raggruppamento 1 (2 char)
raggruppamento_2 string rmer_ragr_2 Raggruppamento 2 (2 char)
raggruppamento_3 string rmer_ragr_3 Raggruppamento 3 (2 char)
fl_riordino string rmer_fl_riord Flag riordino (1 char)
prezzo_ua_ufficiale number rmer_pua_ufficiale Prezzo UA ufficiale
locazioni array ARPLOCAZIONI (vedi sotto) Locazioni di magazzino della merce

LocazioneOutput (elemento di locazioni[])

Campo Tipo Campo DB Note
prog integer a_lgm_prog Progressivo locazione
box string a_lgm_box Box (1 char)
corsia string a_lgm_corsia Corsia (2 char)
colonna string a_lgm_colonna Colonna (2 char)
piano string a_lgm_piano Piano (2 char)

Le locazioni sono raccolte con una seconda query su ARPLOCAZIONI filtrata per a_lgm_merce IN (...) con i rmer_cm delle merci ottenute, e raggruppate lato applicazione per associarle alla merce di appartenenza. Ordinamento: a_lgm_merce, a_lgm_prog. Una merce senza locazioni restituisce [].

Query string — GET /

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

Il GET / esclude le merci cancellate (rmer_stato <> 'C').

Query string — GET /up

Parametro Tipo Obbligatorio Note
sync integer SI ID sincronizzazione di partenza

Schema input — POST /v1/merce

MerceInput

Campo Tipo Obbligatorio Note
codice_host string SI Codice merce nel sistema host (max 30 char, min 1)
descrizione string NO Descrizione (max 40 char)
codice_host_iva string NO Codice host aliquota IVA (max 10 char)
unita_misura string NO Unita' di misura (max 2 char)
codice_host_servizio string NO Codice host servizio (max 10 char)
codice_host_settore string NO Codice host settore (max 10 char)
codice_host_sottogruppo string NO Codice host sottogruppo (max 10 char)
codice_host_brand string NO Codice host brand (max 10 char)
tossicita string NO Codice tossicita' (max 3 char)
desc_aggiuntive string NO Descrizioni aggiuntive (max 2000 char)
cancellato boolean NO Cancellazione logica (default false)
categoria_sconti_vendita string NO Categoria sconti vendita (max 30 char)

Logica POST — Inserimento/Aggiornamento

Identificazione merce

La chiave di deduplicazione e' codice_host (rmer_cma).

Flusso

  1. Deduplicazione: checkDuplicati sul payload
  2. Ricerca esistente: query su ARPMERCI per codice_host
  3. Classificazione:
    • Nuovo: merce non esistente → INSERT su ARPMERCI
    • Modificato: confronto dati → UPDATE su ARPMERCI
    • Cancellato: cancellato = true su una merce esistente → UPDATE con rmer_stato = 'C'
  4. Codice interno: il codice merce (rmer_cm) e' composto da gruppo + sottogruppo + codice e viene generato automaticamente con multiCodeGenerator

Tabelle sorgente

  • ARPMERCI — anagrafica merci (PK: rmer_azi, rmer_gru, rmer_sot, rmer_cod). La chiave merce 9-char rmer_cm (concatenazione gru+sot+cod) e' usata per il legame con ARPLOCAZIONI e altre tabelle.
  • ARPLOCAZIONI — locazioni di magazzino (PK: a_lgm_azi, a_lgm_merce, a_lgm_prog). a_lgm_merce corrisponde a rmer_cm. Una merce puo' avere zero o piu' locazioni; il flag a_lgm_agg_app e' interno e non viene esposto.

Join (GET)

Tabella Condizione Tipo Scopo
ARPSERVI rser_azi = rmer_azi AND rser_cod = rmer_serv AND rser_fl_canc <> 'C' LEFT Codice host servizio
ARPSETTO rfam_azi = rmer_azi AND rfam_serv = rmer_serv AND rfam_cod = rmer_famig ... LEFT Codice host settore
ARPSOTGR rsgr_azi = rmer_azi AND rsgr_serv = rmer_serv AND rsgr_fam = rmer_famig AND rsgr_cod = rmer_sgr ... LEFT Codice host sottogruppo
APCOGBRAND a_bra_azi = rmer_azi AND a_bra_cod = rmer_brand AND a_bra_val <> 'C' LEFT Codice host brand
ARPALIVA rali_azi = rmer_azi AND rali_cod = rmer_cod_iva AND rali_fl_canc <> 'C' LEFT Codice host IVA
ARPMERRAG a_mrag_azienda = rmer_azi AND a_mrag_merce = rmer_cm AND a_mrag_classe = 'SV' ... LEFT Categoria sconti vendita

POST /v1/merce/raggr_sconti

L'endpoint gestisce i raggruppamenti sconti su tabella ARPMERRAG separatamente dall'inserimento merci principale.


Risposta

200 OK

{
  "message": "OK"
}

400 Bad Request

Errore di validazione (schema TypeBox).


Note implementative

  • Il codice interno della merce (rmer_cm) e' composto da gruppo + sottogruppo + codice e viene generato automaticamente in inserimento tramite multiCodeGenerator
  • Il POST gestisce inserimento, aggiornamento e cancellazione logica in una singola transazione
  • La deduplicazione avviene tramite codice_host (rmer_cma)
  • L'endpoint /raggr_sconti gestisce i raggruppamenti sconti su tabella ARPMERRAG separatamente
  • Limite max per risposta: 1000 record