Vai al contenuto

Distinte Base

Endpoint disponibili

Metodo Path Descrizione
GET /v1/distinta-base Lettura distinte base (filtri: gruppo, sottogruppo, codice, paginazione)
GET /v1/distinta-base/up Lettura distinte con almeno un componente aggiornato a partire da un sync id

Solo esportazione. L'inserimento e l'aggiornamento delle distinte avviene sul gestionale e viene propagato su ARPDBASE tramite il processo SWN142.


Schema output

DistintaBaseOutput (testata)

Campo Tipo Campo DB / Join Note
gruppo_distinta string arpmerci.rmer_gru Gruppo codice merce interno della distinta
sottogruppo_distinta string arpmerci.rmer_sot Sottogruppo codice merce interno della distinta
codice_distinta integer arpmerci.rmer_cod Codice merce interno della distinta
codice_host_distinta string arpmerci.rmer_cma Codice della merce distinta nel sistema host esterno
sync integer MAX(arpdbase.a_dba_id_sincro) per la distinta ID di sincronizzazione massimo tra i componenti
cancellato boolean rmer_stato = 'C' true se la merce padre e' cancellata logicamente
componenti array Righe arpdbase con a_dba_merce_db = gru||sot||cod Array di ComponenteDistintaOutput

ComponenteDistintaOutput

Campo Tipo Campo DB / Join Note
prog integer arpdbase.a_dba_prog Progressivo riga componente
gruppo_componente string arpmerci.rmer_gru (INNER JOIN sul componente) Gruppo codice merce interno del componente
sottogruppo_componente string arpmerci.rmer_sot (INNER JOIN sul componente) Sottogruppo codice merce interno del componente
codice_componente integer arpmerci.rmer_cod (INNER JOIN sul componente) Codice merce interno del componente
codice_host_componente string arpmerci.rmer_cma (INNER JOIN sul componente) Codice del componente nel sistema host esterno
qta number arpdbase.a_dba_qta Quantita' componente per una unita' di distinta
cancellato boolean arpdbase.a_dba_fl_canc = 'C' true se il componente e' cancellato logicamente

Query string

GET /v1/distinta-base

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

I filtri agiscono sulla merce padre (la distinta), non sui componenti.

GET /v1/distinta-base/up

Parametro Tipo Obbligatorio Note
sync integer SI ID sincronizzazione di partenza

Restituisce le distinte in cui almeno un componente ha a_dba_id_sincro > sync. L'ordine e' per MAX(a_dba_id_sincro) crescente, per proseguire incrementalmente.


Tabelle sorgente

ARPDBASE -- dettaglio distinta base

PK: a_dba_azi, a_dba_merce_db, a_dba_classe_distinta, a_dba_prog.

Campo Tipo Note
a_dba_azi char(6) Codice azienda
a_dba_merce_db char(9) Codice merce distinta (padre), formato GGSSCCCCC (gru+sot+cod)
a_dba_classe_distinta char(1) Sempre 'A' per le distinte esposte via questo endpoint
a_dba_prog num(5) Progressivo di riga
a_dba_merce_comp char(9) Codice merce componente, stesso formato
a_dba_qta num(7,3) Quantita' componente
a_dba_id_sincro num(15) ID sincronizzazione
a_dba_fl_canc char(1) 'C' se componente cancellato logicamente

ARPMERCI -- anagrafica merce

Usata per ottenere gruppo/sottogruppo/codice e codice_host (rmer_cma) sia della distinta sia di ciascun componente, e per ricavare il flag cancellato dalla colonna rmer_stato. INNER JOIN sia sul padre che sui componenti: eventuali distinte o componenti che riferissero una merce non presente in arpmerci sono considerate dato sporco e non vengono restituite.


Logica di esportazione

GET / (lettura completa)

  1. Query su arpdbase filtrata per a_dba_classe_distinta = 'A', INNER JOIN arpmerci per ottenere gruppo/sottogruppo/codice, codice_host e stato della merce padre.
  2. GROUP BY sul codice distinta (piu' tutte le colonne rmer_* presenti nel SELECT, funzionalmente dipendenti dalla PK di arpmerci), con MAX(a_dba_id_sincro) come sync di testata.
  3. Le distinte la cui merce padre risulta cancellata logicamente (rmer_stato = 'C') sono incluse con cancellato = true.
  4. Ordinamento per rmer_gru, rmer_sot, rmer_cod e paginazione.
  5. Seconda query sui componenti delle distinte trovate, raggruppati e mappati in output.

GET /up (differenziale)

  1. Stessa query della lettura completa ma con HAVING MAX(a_dba_id_sincro) > sync.
  2. Una distinta con N componenti aggiornati nello stesso range viene restituita una sola volta.
  3. Per ogni distinta vengono restituiti tutti i componenti, anche quelli non modificati dal filtro sync.
  4. I componenti cancellati (a_dba_fl_canc = 'C') sono sempre inclusi con cancellato = true.
  5. Le distinte la cui merce padre e' stata cancellata logicamente sono incluse con cancellato = true, cosi' la cancellazione viene propagata al client.
  6. Ordinamento per MAX(a_dba_id_sincro) crescente: il client puo' usare l'ultimo sync restituito come punto di partenza per la chiamata successiva.

Match tra a_dba_merce_db e arpmerci

Il campo a_dba_merce_db e' una stringa di 9 caratteri (2+2+5), con lo stesso formato del campo rmer_cm di arpmerci. Il JOIN sfrutta questa corrispondenza diretta:

JOIN arpmerci ON rmer_azi = a_dba_azi AND rmer_cm = a_dba_merce_db

Lo stesso pattern e' usato per il JOIN sui componenti, con rmer_cm = a_dba_merce_comp.


Risposta

200 OK

Array di oggetti DistintaBaseOutput:

[
  {
    "gruppo_distinta": "AB",
    "sottogruppo_distinta": "CD",
    "codice_distinta": 12345,
    "codice_host_distinta": "DIST-001",
    "sync": 987654321,
    "cancellato": false,
    "componenti": [
      {
        "prog": 1,
        "gruppo_componente": "AB",
        "sottogruppo_componente": "CD",
        "codice_componente": 10001,
        "codice_host_componente": "COMP-A",
        "qta": 2.5,
        "cancellato": false
      },
      {
        "prog": 2,
        "gruppo_componente": "AB",
        "sottogruppo_componente": "CD",
        "codice_componente": 10002,
        "codice_host_componente": "COMP-B",
        "qta": 1.0,
        "cancellato": true
      }
    ]
  }
]

400 Bad Request

Errore di validazione dei parametri.

401 Unauthorized

Autenticazione mancante o non valida.


Limiti

Vincolo Valore
Max distinte per risposta 200
Max componenti per distinta Nessun limite a livello di endpoint (dipende dai dati)

Programmi di alimentazione

La tabella ARPDBASE viene alimentata dal programma SWN142, che esporta le distinte base da COGDBASE + COGMERCI verso ARPDBASE. Supporta esportazione completa e differenziale tramite LOGAGREC.