Irriverso¶
Panoramica¶
Irriverso e' l'applicazione web di Ocmis dedicata alla gestione dei preventivi, della configurazione prodotto e del catalogo ricambi. Si integra con gli altri sistemi aziendali tramite le interfacce:
- IPD — motore preventivi e configuratore
- PLM (Components Engine) — gestione documentale tecnica, pubblicazione cataloghi ricambi
- SAP — anagrafica prezzi, clienti e contatti
L'interfacciamento e' asincrono e guidato da un componente driver che orchestra le chiamate verso PLM e SAP a partire dai dati esposti dalle API REST di IPD.
Modifiche applicative¶
Gestione domini e profili¶
Riferimento ClickUp: TASK-107
E' stata introdotta la gestione centralizzata di profili e domini di Components Engine direttamente da Irriverso, con due pagine dedicate:
- Profili: modifica, aggiunta e cancellazione dei profili Components Engine.
- Durante la modifica la descrizione del profilo non e' modificabile.
- E' impedita la creazione di domini duplicati.
- Domini: modifica, aggiunta e cancellazione dei domini Components Engine, da utilizzare in associazione ai profili.
Gestione domini per agenti e collaboratori¶
Riferimento ClickUp: TASK-108
La pagina dei Dealer e' stata riorganizzata a schede (Tabs) per migliorare la gestione di profili e domini Components Engine in fase di creazione o modifica di un dealer.
All'interno del tab Components Engine l'operatore puo':
- Selezionare uno dei profili predefiniti creati nella sezione Profili: questo abilita automaticamente i domini collegati al profilo.
- Oppure abilitare un profilo personalizzato scegliendo manualmente i singoli domini.
Se l'insieme dei domini selezionati manualmente corrisponde a quello di un profilo esistente, il sistema imposta automaticamente quel profilo.
Interfacce IPD – PLM – SAP¶
Riferimento: documento Documentazione_CustomRestAPI.pdf (API PLM).
Irriverso espone le proprie API REST (/v1/articles, /v1/parts) che vengono consumate dal driver di interfacciamento. Il driver si occupa di:
- Interrogare IPD per ottenere gli articoli e le distinte da propagare.
- Invocare i web service di PLM per la pubblicazione di articoli e distinte.
- Propagare i prezzi verso SAP.
- Richiamare le API di acknowledgement di IPD per aggiornare i timestamp di avvenuta propagazione.
Tabelle necessarie¶
| Tabella | Descrizione |
|---|---|
proj_ipd |
Tabella preventivi. E' stato introdotto uno stato "In attesa di verifica ufficio tecnico" (non una colonna aggiuntiva) per bloccare il passaggio a PLM quando mancano articoli di livello 2. |
| Tabella articoli | Contiene articoli di livello 0 (codice configurato) e di livello 1 (distinta secondaria, di cui non si gestisce il contenuto). Colonne principali descritte sotto. |
| Tabella distinte | Righe distinta base. Chiave codice_padre + prog, contiene codice_figlio e qta. Riferimento ClickUp: TASK-216. |
Tabella attributi (tables) |
Gia' presente, con classe TAG sui prodotti Irriverso. Non richiede modifiche. |
Colonne chiave della tabella articoli¶
| Colonna | Descrizione |
|---|---|
codice |
Chiave logica dell'articolo |
livello |
0 = codice configurato; 1 = distinta secondaria |
artc_ts_ins_articolo_su_plm |
Timestamp di avvenuto inserimento articolo su PLM |
artc_ts_ins_distinta_su_plm |
Timestamp di avvenuto inserimento distinta su PLM |
artc_ts_ins_prezzo_su_sap |
Timestamp di avvenuto inserimento prezzo su SAP |
fl_errore_invio |
Flag di errore di invio |
note_errore_invio |
Descrizione dell'errore di invio |
prezzo |
Prezzo corrente |
fl_prezzo_modificato |
Flag di prezzo modificato (trigger per re-invio a SAP) |
Colonne della tabella distinte¶
| Colonna | Descrizione |
|---|---|
codice_padre |
Chiave — codice articolo padre |
prog |
Chiave — progressivo riga |
codice_figlio |
Codice articolo figlio |
qta |
Quantita' impiegata |
Logiche di interfacciamento¶
Movimentazione articolo — lato IPD¶
Alla formalizzazione del preventivo su IPD, per ciascun articolo del preventivo si esegue:
- Verifica di esistenza sulla tabella articoli/distinte (deve esistere una distinta identica a quella del preventivo).
- Se l'articolo non e' presente:
- Inserimento nella tabella articoli IPD dei codici di livello 0 e livello 1 e delle relative distinte.
- Se l'articolo e' presente:
- Verifica del prezzo:
- prezzo uguale → nessuna azione;
- prezzo differente → aggiornamento del prezzo e azzeramento di
artc_ts_ins_prezzo_su_sap.
- Verifica del prezzo:
Driver verso PLM¶
Il driver opera in due fasi.
Fase 1 — Articoli
- Richiesta a IPD dei nuovi articoli di livello 1 (con timestamp di inserimento
NULL): IPD restituisce gli articoli da inviare e il driver li propaga a PLM. - Richiesta a IPD dei nuovi articoli di livello 0 (con timestamp di inserimento
NULL): IPD restituisce gli articoli da inviare e il driver li propaga a PLM.
Fase 2 — Distinte
- Richiesta a IPD delle nuove distinte: IPD le restituisce.
- Il driver contatta PLM per l'invio delle distinte.
Nota implementativa lato IPD¶
Per restituire la distinta come struttura aggregata al driver si utilizza la funzione Postgres array_agg combinata con row(...) per produrre un JSON con il dettaglio della distinta. Esempio:
select rmer_azi, array_agg (row(rmer_cma, rmer_des))
from arpmerci
where rmer_azi = 'C04610'
group by rmer_azi;
Interfaccia "articles"¶
Endpoint REST esposti da Irriverso per la gestione degli articoli.
| Endpoint | Parametri | Descrizione |
|---|---|---|
GET /v1/articles |
— | Elenco generale articoli paginato |
GET /v1/articles/:codice |
codice |
Recupero di un singolo articolo |
POST /v1/articles |
body | Inserimento/aggiornamento dell'articolo passato nel body. In questa chiamata i tre timestamp (artc_ts_ins_articolo_su_plm, artc_ts_ins_distinta_su_plm, artc_ts_ins_prezzo_su_sap) vengono azzerati |
DELETE /v1/articles/:codice |
codice |
Cancellazione logica dell'articolo |
GET /v1/articles/ready_to_export |
— | Elenco articoli da esportare verso PLM |
GET /v1/articles/price_to_export |
— | Elenco articoli il cui prezzo e' da esportare verso SAP |
PUT /v1/articles/:articolo/ack_article |
articolo + body |
Invocato dal driver dopo il tentativo di salvataggio dell'articolo su PLM. In base all'esito imposta i flag/timestamp: esito positivo → valorizza artc_ts_ins_articolo_su_plm; esito negativo → valorizza fl_errore_invio e note_errore_invio |
PUT /v1/articles/:articolo/ack_price |
articolo + body |
Come sopra, ma aggiorna artc_ts_ins_prezzo_su_sap |
PUT /v1/articles/:articolo/ack_parts |
articolo + body |
Come sopra, ma aggiorna artc_ts_ins_distinta_su_plm |
Tutti gli endpoint risultano implementati e verificati (stato "Ok" nel documento di specifica).
Interfaccia "parts"¶
Endpoint REST esposti da Irriverso per la gestione delle distinte base.
| Endpoint | Parametri | Descrizione |
|---|---|---|
GET /v1/parts |
— | Elenco completo delle distinte trovate |
GET /v1/parts/ready_to_export |
— | Elenco delle distinte da esportare, raggruppate per codice distinta |
POST /v1/parts/riga |
body | Inserisce una singola riga di distinta richiedendo esplicitamente il progressivo di riga; in questa chiamata il codice_figlio e' un attributo modificabile |
Tutti gli endpoint risultano implementati e verificati.
Integration test con Derga¶
Test eseguiti — 14/04/2025¶
Prima tornata di test di integrazione con il partner Derga sull'import dei dati anagrafici da SAP verso Irriverso.
| Oggetto | Tipo test | Esito |
|---|---|---|
| Anagrafica clienti | SAP → Irriverso | Vengono importati solo alcuni clienti: da verificare l'import massivo |
| Anagrafica contatti | SAP → Irriverso | Ok |
| Anagrafica destinazioni | SAP → Irriverso | Ok. Importate 5.109 destinazioni, attese 6.099 — da verificare la differenza |
Rimangono da completare i test sulle restanti aree funzionali (articoli, distinte, prezzi, flussi verso PLM).