Vai al contenuto

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:

  1. Interrogare IPD per ottenere gli articoli e le distinte da propagare.
  2. Invocare i web service di PLM per la pubblicazione di articoli e distinte.
  3. Propagare i prezzi verso SAP.
  4. 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:

  1. Verifica di esistenza sulla tabella articoli/distinte (deve esistere una distinta identica a quella del preventivo).
  2. Se l'articolo non e' presente:
    • Inserimento nella tabella articoli IPD dei codici di livello 0 e livello 1 e delle relative distinte.
  3. 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.

Driver verso PLM

Il driver opera in due fasi.

Fase 1 — Articoli

  1. 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.
  2. 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

  1. Richiesta a IPD delle nuove distinte: IPD le restituisce.
  2. 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).