API Ordini — Specifica Tecnica
Panoramica
API REST per la sincronizzazione degli ordini cliente (testata + righe) tra Areagate e sistemi host esterni. Le righe ordine possono riferirsi indifferentemente a una merce (ARPMERCI) o a una prestazione (ARPMESER).
Endpoint disponibili
| Metodo |
Path |
Descrizione |
| GET |
/v1/ordine |
Lettura lista ordini (filtri: id, cliente, codice_interno, paginazione) |
| GET |
/v1/ordine/up |
Lettura ordini aggiornati a partire da un sync id |
| POST |
/v1/ordine |
Inserimento/aggiornamento batch ordini |
Schema output — GET
OrdineOutput
| Campo |
Tipo |
Campo DB / Join |
Note |
id_pubblico |
integer |
a_ortes_id_pub |
ID pubblico dell'ordine |
codice_host |
string |
a_ortes_codice_host |
Codice ordine nel sistema host esterno |
codice_interno |
string |
a_ortes_tor_chia |
Codice interno dell'ordine su AREA |
codice_host_azienda_gruppo |
string |
join APGRPAZIEN |
Codice host azienda gruppo |
data |
integer |
a_ortes_data |
Data ordine |
codice_cliente |
string |
a_ortes_cliente |
Codice cliente interno |
codice_host_cliente |
string |
join ARPANAGR |
Codice host cliente |
evaso |
boolean |
a_ortes_stato |
true se a_ortes_stato = 'C' |
stato |
string |
a_ortes_stato |
Stato dell'ordine |
magazzino |
string |
a_ortes_magazzino |
Codice magazzino |
magazzino_host |
string |
join APCOGMAGAZ |
Codice host magazzino |
causale_documento |
string |
a_ortes_causale_doc |
Causale documento |
data_consegna |
integer |
a_ortes_data_cons_generica |
Epoch ms (0 se data <= 0001-12-31) |
ordine_cliente |
string |
a_ortes_conferma |
Riferimento ordine cliente |
data_ordine_cliente |
integer |
a_ortes_data_conferma |
Epoch ms (0 se data <= 0001-12-31) |
agente_codice |
integer |
a_ortes_agente_cod |
Codice agente |
note_ordine |
string |
a_ortes_note_ordine |
Note ordine |
listino |
integer |
a_ortes_listino |
Codice listino |
pagamento |
string |
a_ortes_pagamento |
Codice pagamento |
pagamento_tipo |
string |
a_ortes_pag_tip |
Tipo pagamento |
pagamento_codice |
integer |
a_ortes_pag_cod |
Codice pagamento numerico |
brand_codice |
string |
a_ortes_brand_cod |
Codice brand |
vettore_codice |
string |
a_ortes_vet_cod |
Codice vettore |
vettore_descrizione_1 |
string |
a_ortes_vet_des_1 |
Descrizione vettore 1 |
vettore_descrizione_2 |
string |
a_ortes_vet_des_2 |
Descrizione vettore 2 |
vettore_descrizione_3 |
string |
a_ortes_vet_des_3 |
Descrizione vettore 3 |
porto_codice |
string |
a_ortes_porto_cod |
Codice porto |
porto_descrizione |
string |
a_ortes_porto_des |
Descrizione porto |
tipo_trasporto |
string |
a_ortes_tipo_trasporto |
Tipo di trasporto (popolato da tor-acura, sincronizzato da SWN089 -- vedi TASK-5231 / build 2026-06-04) |
sync |
integer |
a_ortes_id_sincro |
ID di sincronizzazione |
righe |
array |
tabella ARPORDET |
Array di RigheOrdineOutput |
RigheOrdineOutput
| Campo |
Tipo |
Campo DB / Join |
Note |
id_pubblico |
integer |
a_ordet_id_pub |
ID pubblico dell'ordine di appartenenza |
riga |
integer |
a_ordet_riga |
Numero riga |
cm |
string |
a_ordet_merce |
Codice interno merce o prestazione (chiave 9-char gru+sot+cod) |
codice_host_merce |
string |
coalesce(rmer_cma, rmers_cma, '') (LEFT JOIN su ARPMERCI o ARPMESER) |
Codice host della merce o della prestazione |
qta |
number |
a_ordet_qta |
Quantita' |
prezzo_lordo |
number |
a_ordet_prezzo_lordo |
Prezzo lordo |
sconto_1 |
number |
a_ordet_sco_1 |
Sconto 1 |
sconto_2 |
number |
a_ordet_sco_2 |
Sconto 2 |
prezzo_netto |
number |
a_ordet_prezzo_netto |
Prezzo netto |
importo |
number |
a_ordet_importo |
Importo |
note |
string |
a_ordet_note |
Note riga |
Query string — GET /
| Parametro |
Tipo |
Obbligatorio |
Note |
limit |
integer |
NO |
Max risultati (default/max: 200) |
page |
integer |
NO |
Pagina (paginazione offset-based) |
id |
integer |
NO |
Filtro per ID pubblico (match esatto) |
cliente |
string |
NO |
Filtro per codice cliente (match esatto su a_ortes_cliente) |
codice_interno |
string |
NO |
Filtro per codice interno (ricerca parziale ILIKE su a_ortes_tor_chia) |
Query string — GET /up
| Parametro |
Tipo |
Obbligatorio |
Note |
sync |
integer |
SI |
ID sincronizzazione di partenza |
Schema input — POST /v1/ordine
| Campo |
Tipo |
Obbligatorio |
Note |
tipo |
string |
SI |
Tipo ordine (max 16 char) |
codice_host |
string |
SI |
Codice ordine host (max 30 char) |
codice_host_azienda_gruppo |
string |
SI |
Codice host azienda gruppo (max 20 char) |
data |
integer |
NO |
Data ordine (default 0) |
codice_host_cliente |
string |
SI |
Codice host cliente (max 16 char) |
righe |
array |
SI |
Array di RigheOrdineInput |
| Campo |
Tipo |
Obbligatorio |
Note |
riga |
integer |
SI |
Numero riga (minimo 1) |
codice_host_merce |
string |
SI |
Codice host merce (min 1, max 30 char) |
qta |
number |
NO |
Quantita' (default 0) |
prezzo_lordo |
number |
NO |
Prezzo lordo (default 0) |
sconto_1 |
number |
NO |
Sconto 1 (default 0) |
sconto_2 |
number |
NO |
Sconto 2 (default 0) |
prezzo_netto |
number |
NO |
Prezzo netto (default 0) |
importo |
number |
NO |
Importo (default 0) |
Tabelle sorgente
ARPORTES — testata ordini (PK: a_ortes_azi, a_ortes_id_pub)
ARPORDET — dettaglio righe (PK: a_ordet_azi, a_ordet_id_pub, a_ordet_riga)
Join (GET)
| Tabella |
Condizione |
Tipo |
Scopo |
ARPANAGR |
a_ortes_azi = rana_azi AND a_ortes_cliente = rana_codana |
INNER |
Codice host cliente |
APGRPAZIEN |
a_ortes_azi = a_ao_azi_azi AND a_ortes_grp_az_cod = a_ao_azi_cod |
LEFT |
Codice host azienda gruppo |
APCOGMAGAZ |
a_ortes_azi = a_magz_azi AND a_ortes_magazzino = a_magz_cod AND a_magz_tipo = 'M' |
LEFT |
Codice host magazzino |
ARPMERCI |
a_ordet_azi = rmer_azi AND a_ordet_merce = rmer_cm |
LEFT |
Codice host merce (righe) |
ARPMESER |
a_ordet_azi = rmers_azi AND a_ordet_merce = rmers_cm |
LEFT |
Codice host prestazione (righe) |
Una riga ordine puo' fare riferimento sia a una merce (ARPMERCI) sia a una prestazione (ARPMESER): entrambe le tabelle sono in LEFT JOIN, e il codice_host_merce esposto in output e' coalesce(rmer_cma, rmers_cma, '') — quale dei due e' valorizzato dipende dal tipo del record che ha quel cm.
Note implementative
- Il GET
/ carica le testate e poi le righe in due query separate, associate tramite id_pubblico
- Il filtro
codice_interno usa ILIKE %...% per ricerca parziale
- Il POST gestisce inserimento e aggiornamento. Gli ordini evasi (
stato = 'C') non possono essere modificati
- In aggiornamento, se le righe cambiano, vengono eliminate e reinserite integralmente
- In POST, la validazione del
codice_host_merce di input cerca prima in getRaccordiMerci e, se non trovato, in getRaccordiPrestazioni: una riga ordine puo' quindi riferirsi indifferentemente a una merce o a una prestazione
- Limite max per risposta: 200 record