API Prestazioni — Specifica Tecnica¶
Panoramica¶
API REST per la sincronizzazione delle prestazioni (servizi non a magazzino) tra Areagate e sistemi host esterni. La tabella sorgente e' ARPMESER, gemella di ARPMERCI ma per le prestazioni. Include anche la gestione delle associazioni a raggruppamenti sconti vendita.
Endpoint disponibili¶
| Metodo | Path | Descrizione |
|---|---|---|
| GET | /v1/prestazione |
Lettura prestazioni (filtri: gruppo, sottogruppo, codice, descrizione, unita_misura, paginazione) |
| GET | /v1/prestazione/up |
Lettura prestazioni aggiornate a partire da un sync id |
| POST | /v1/prestazione |
Inserimento/aggiornamento/cancellazione batch prestazioni |
| POST | /v1/prestazione/raggr_sconti |
Associazione di prestazioni a un raggruppamento sconti |
Schema output — GET¶
PrestazioneOutput¶
| Campo | Tipo | Campo DB | Note |
|---|---|---|---|
gruppo |
string | rmers_gru |
Gruppo codice prestazione |
sottogruppo |
string | rmers_sot |
Sottogruppo codice prestazione |
codice |
integer | rmers_cod |
Codice prestazione |
descrizione |
string | trim(rmers_des) |
Descrizione |
sync |
integer | rmers_id_sincro |
ID di sincronizzazione |
cancellato |
boolean | rmers_stato = 'C' |
true se la prestazione e' cancellata logicamente |
codice_host |
string | trim(rmers_cma) |
Codice prestazione nel sistema host esterno |
unita_misura |
string | trim(rmers_um) |
Unita' di misura (max 2 char, puo' essere vuoto) |
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 su rmers_gru (match esatto) |
sottogruppo |
string | NO | Filtro su rmers_sot (match esatto) |
codice |
integer | NO | Filtro su rmers_cod (match esatto) |
descrizione |
string | NO | Filtro su rmers_des (case-insensitive ILIKE %x%) |
Il GET / esclude le prestazioni cancellate (rmers_stato <> 'C').
Query string — GET /up¶
| Parametro | Tipo | Obbligatorio | Note |
|---|---|---|---|
sync |
integer | SI | ID sincronizzazione di partenza |
Il GET /up ordina per rmers_id_sincro crescente. Esclude anche qui i record cancellati (rmers_stato <> 'C'): non ci sono notifiche di cancellazione differenziale.
Schema input — POST /v1/prestazione¶
Body: array di oggetti PrestazioneInput (max 1000).
PrestazioneInput¶
| Campo | Tipo | Obbligatorio | Note |
|---|---|---|---|
codice_host |
string | SI | Codice prestazione nel sistema host esterno (1-30 char) — chiave |
descrizione |
string | NO | Descrizione (max 40 char, default "") |
cancellato |
boolean | NO | Cancellazione logica (default false) |
Nota:
unita_misuranon e' esposta in input. In inserimento il campormers_umviene valorizzato a stringa vuota; in modifica non viene toccato. Per gestirla via API serve estenderePrestazioneInput.
Logica POST¶
- Deduplicazione payload:
codice_hostnon puo' essere duplicato nello stesso array (checkDuplicati) - Categorie di operazioni:
- Inserimento: record non esistente e payload non flaggato
cancellato=true. Genera nuovormers_cm(chiave merce 9 char) tramitemultiCodeGeneratorpartendo dalastCodMerci. Insert inARPMESERconrmers_um = "",rmers_cod_iva = "",rmers_serv = "",rmers_famig = "",rmers_sgr = 0, ecc. - Cancellazione: record esistente non cancellato + payload
cancellato=true. Updatermers_stato = 'C' - Modifica: record esistente con
descrizionecambiata. Solo il campo descrizione viene aggiornato;rmers_statorimesso a''(riattivazione) - Skip: record esistente cancellato + payload
cancellato=true; record non esistente + payloadcancellato=true
- Inserimento: record non esistente e payload non flaggato
id_sincro: assegnato progressivamente dagetNextIdSincro(sql, id_azi, "ARPMESER", n)
POST /v1/prestazione/raggr_sconti¶
Associa prestazioni a un raggruppamento sconti vendita.
Body¶
Array di oggetti:
| Campo | Tipo | Obbligatorio | Note |
|---|---|---|---|
codice_host |
string | SI | Codice prestazione (host) |
codice_raggr |
string | SI | Codice raggruppamento sconti (puo' essere stringa vuota) |
Logica¶
- Deduplicazione payload via
checkDuplicatisucodice_host - Recupero della classe raggruppamento da
arpconfig(rcfg_pack='C',rcfg_prog='listvend',rcfg_param_key='classe-raggr-sconti') - Risoluzione raccordi:
getRaccordiPrestazioni,getRaccordiRaggruppamento - Per ogni elemento del payload con
codice_raggrnon vuoto:- Validazione che
codice_hostesista nei raccordi prestazioni -> altrimenti400 body/{i}/codice_host (...) mancante - Se
codice_raggrnon esiste inarpanrag, lo accoda inarpanragDaInserire - Costruisce record per
arpmerragcon la chiave merce risolta
- Validazione che
- Insert in
arpanragper i nuovi raggruppamenti (a_arag_des = "Sconto") - Upsert in
arpmerrag(ON CONFLICT (a_mrag_azienda, a_mrag_merce, a_mrag_classe) DO UPDATE SET a_mrag_id, a_mrag_fl_canc='')
Tabelle sorgente¶
ARPMESER — anagrafica prestazioni¶
PK: (rmers_azi, rmers_gru, rmers_sot, rmers_cod). Stessa struttura di ARPMERCI ma per le prestazioni.
| Campo | Tipo | Note |
|---|---|---|
rmers_azi |
char(6) | Codice azienda |
rmers_gru |
char(2) | Gruppo |
rmers_sot |
char(2) | Sottogruppo |
rmers_cod |
num(5) | Codice |
rmers_cm |
char(9) | Chiave merce concatenata gru+sot+cod |
rmers_cma |
char(30) | Codice host esterno |
rmers_des |
char(40) | Descrizione |
rmers_um |
char(2) | Unita' di misura |
rmers_stato |
char(1) | 'C' se cancellato logicamente |
rmers_id_sincro |
num(15) | ID sincronizzazione |
ARPMERRAG / ARPANRAG — raggruppamenti sconti¶
Usate dal POST /raggr_sconti. ARPMERRAG lega merce -> id raggruppamento (a_mrag_id) per una classe (a_mrag_classe); ARPANRAG contiene i raggruppamenti definiti per la classe.
Limiti¶
| Vincolo | Valore |
|---|---|
| Max prestazioni per risposta GET | 1000 |
| Max prestazioni per body POST | 1000 |
Max size codice_host |
30 char |
Max size descrizione |
40 char |
Max size unita_misura |
2 char |
Note implementative¶
- Tutte le operazioni POST sono eseguite in una singola transazione (
db.begin) - L'unita' di misura e' esposta in lettura ma non gestita in scrittura dall'API: l'inserimento di nuove prestazioni la valorizza a
"", e l'update non la tocca. Per gestirla sara' necessario estendere lo schema input e la logica POST - La generazione del codice interno (
rmers_cm) usamultiCodeGeneratorcon segmenti[2, 2, 5]partendo dal max corrente inarpmerci/arpmeservialastCodMerci