Node AI
Specifica Tecnica · DDT → IBM i (AS/400) · Integrazione

Integrazione AS/400.

Documento tecnico di riferimento per l'integrazione tra la piattaforma Node AI DDT (cloud) e il sistema IBM i (AS/400). Sulla base del confronto tecnico del 15 aprile, il documento si concentra sull'approccio concordato: ODBC su tabella di staging + procedura RPG. Descrive architettura, tracciato record, requisiti tecnici e checklist di verifica.

Versione
2.0
Destinatari
Team IT / Tecnico
Ambito
Trasporto dati DDT validati verso IBM i
Contatto
hello@nodeagency.ai
Indice
  1. Contesto e Ambito dell'Integrazione
  2. Modello Dati e Tracciato Record di Riferimento
  3. ODBC su Tabella di Staging + Procedura RPG
  4. Informazioni Richieste al Team Tecnico
  5. Requisiti Trasversali

Contesto e Ambito dell'Integrazione

Il sistema Node AI acquisisce DDT cartacei, estrae i dati strutturati tramite AI Vision e li presenta all'operatore per validazione umana. Solo i DDT in stato APPROVED sono eligible per essere inviati al gestionale IBM i. Questo documento copre esclusivamente il canale di trasporto tra i due sistemi.

Flusso Funzionale

[Scansione DDT]Node AI / AI Vision → estrazione campi strutturati
     → Validazione umana (UI operatore, 2º livello controllo)
     → DDT in stato APPROVEDInvio a IBM i  ←←  oggetto del presente documento
     → Acknowledge / risposta / eventuale stato errore

Requisiti Funzionali del Canale

Fuori Ambito

Modello Dati e Tracciato Record di Riferimento

Di seguito il modello dati di riferimento che Node AI inserirà nelle tabelle di staging. Nomenclatura e tipologie sono adattabili alle convenzioni del cliente. La struttura sotto è indicativa — lo schema definitivo delle tabelle Db2 va concordato con il team IBM i.

// Tracciato record di riferimento (struttura dati per staging table)
{
  "external_id": "ddt_2026_04_16_a7f3b2",          // UUID, chiave idempotency
  "source_document_id": "doc_92f1...",             // riferimento audit Node AI
  "approved_at": "2026-04-16T10:23:11Z",
  "approved_by": "operator@cliente.it",
  "header": {
    "numero_ddt": "4521/2026",
    "data_ddt": "2026-04-12",
    "fornitore_codice": "FORN00128",
    "fornitore_ragione_sociale": "Edilizia Rossi S.r.l.",
    "fornitore_piva": "01234567890",
    "causale": "C01",
    "note": ""
  },
  "righe": [
    {
      "numero_riga": 1,
      "articolo_codice": "ART00451",
      "descrizione": "Cemento Portland 325",
      "quantita": 50,
      "unita_misura": "QL",
      "numero_ordine_acquisto": "OA-2026-0892", // per riga, per chiusura OdA lato IBM i
      "prezzo_unitario": null,
      "confidence": 0.98
    }
  ],
  "attachments": [
    { "type": "source_pdf", "url": "https://...", "sha256": "..." }
  ]
}
Note sul modello

Tutti i campi testuali sono UTF-8. Le date in ISO 8601. I codici fornitore/articolo sono placeholder: la strategia di mapping (lookup da anagrafica IBM i, import CSV periodico, o invio di codice grezzo con risoluzione lato IBM i) va definita in fase di dettaglio.

Il campo numero_ordine_acquisto è per riga, non per testata: ogni riga DDT può riferirsi a un ordine diverso. Questo consente la chiusura automatica degli OdA lato IBM i. Il campo è opzionale: non tutti i DDT cartacei riportano il numero d'ordine.

ODBC su Tabella di Staging + Procedura RPG

Node AI scrive i DDT validati su una o più tabelle di staging dedicate in Db2 for i via connessione ODBC. Una procedura RPG/CL runtime lato IBM i monitora la staging table in loop, consuma i record, valida, e li inserisce nelle tabelle definitive del gestionale con la propria logica di business. Pattern sicuro e comune negli ambienti IBM i.

Nota

Questo pattern è diverso dalla scrittura diretta nelle tabelle del gestionale (che non è raccomandata perché bypassa trigger, validazioni e logica RPG). Qui Node AI scrive solo sulla staging table; la procedura RPG del team IBM i fa il resto con pieno controllo.

Protocollo
SQL INSERT over DRDA / DDM via ODBC · connessione TCP diretta a Db2 for i
Architettura
Node AI → ODBC → INSERT su tabelle NODEAI_DDT_H (testata) e NODEAI_DDT_R (righe) → colonna STATUS = 'NEW'
Procedura RPG (runtime / loop) → SELECT WHERE STATUS = 'NEW' → valida → scrive nelle tabelle definitive del gestionale → aggiorna STATUS = 'POSTED' o 'ERROR' con messaggio
Lato Client
IBM i Access Client Solutions (ACS) ODBC Driver · JTOpen / JT400 (JDBC, open source) · da Node.js: odbc npm package o bridge Java via JT400
Tabelle staging
Schema dedicato (es. NODEAI) con 2 tabelle:
NODEAI_DDT_H — testata: external_id (PK), p_iva, ragione_sociale, data_ddt, numero_ddt, causale, note, status, error_msg, created_at, posted_at
NODEAI_DDT_R — righe: external_id (FK), numero_riga, articolo_codice, descrizione, quantita, unita_misura, numero_ordine_acquisto, prezzo_unitario
Porte
446 (DRDA) · 8471 (IBM i Access) · variabili a seconda del driver e TLS on/off
Autenticazione
User profile IBM i dedicato con GRANT minimi: INSERT + SELECT + UPDATE solo su schema NODEAI. Nessun accesso alle tabelle del gestionale. Password complessa o Kerberos EIM.
Transazioni
Commitment control (*CHG / *ALL) con COMMIT/ROLLBACK: header + righe inserite come UOW atomica sulla staging table.
Procedura RPG
Procedura RPG/CL in loop (SBMJOB o subsystem dedicato) che: (1) legge record NEW, (2) valida contro anagrafiche, (3) incrocia OdA per chiusura automatica, (4) scrive nel gestionale, (5) aggiorna status. Gestione errori: STATUS = 'ERROR' + campo ERROR_MSG con dettaglio.
Idempotency
external_id come PRIMARY KEY sulla staging table. Un secondo INSERT con lo stesso id fallisce con constraint violation → Node AI tratta come successo già avvenuto.
Feedback
Node AI può fare SELECT status, error_msg FROM NODEAI_DDT_H WHERE external_id = ? per verificare l'esito del processing. Alternativa: callback HTTP dal consumer RPG verso Node AI.
Encoding
Db2 for i usa CCSID (es. 37 / 1144 per EBCDIC italiano). Il driver ODBC converte UTF-8 ↔ CCSID lato client. Verificare mapping per caratteri accentati (à, è, ò).
Rete
Porta Db2 esposta via VPN IPSec / WireGuard (mai su internet pubblica). Alternativa: tunnel SSH.
Journaling
Staging tables devono essere journaled per supportare commitment control, audit e recovery.

Vantaggi

Svantaggi

Da verificare

Nota importante — Scrittura diretta nelle tabelle del gestionale

La variante in cui Node AI scrive direttamente nelle tabelle finali del gestionale (senza staging table e senza consumer RPG) è sconsigliata. Bypassa la logica applicativa (trigger, validazioni, aggiornamento tabelle correlate) e può causare inconsistenza dati. Il pattern staging table + consumer RPG evita completamente questo rischio.

Informazioni Richieste al Team Tecnico

Elenco delle informazioni utili a restringere la scelta e preparare lo spec di integrazione di dettaglio. Idealmente raccolte prima o durante il meeting tecnico.

Ambiente IBM i

Funzionalità esistenti

Rete e sicurezza

Contratto dati

Operatività

Requisiti Trasversali

Requisiti trasversali dell'integrazione. Da concordare nella fase di spec di dettaglio.

Idempotenza

Ogni DDT ha un external_id univoco generato da Node AI (UUID). IBM i deve usarlo come chiave di deduplicazione: un secondo invio con lo stesso id è un no-op (non crea duplicato, risponde con lo stato del precedente).

Retry automatico

Node AI implementa retry con backoff esponenziale su errori transitori (5xx, timeout, errori di rete). Massimo 5 tentativi in 24 ore. Dopo il fallimento definitivo, il DDT torna in stato TRANSFER_ERROR lato Node AI per revisione manuale.

Atomicità transazionale

Testata DDT + righe sono un'unica unità transazionale. Nessun caso di testata salvata con righe mancanti. COMMIT/ROLLBACK sulla staging table garantiscono atomicità.

Tracciabilità

Node AI mantiene log completo di ogni tentativo di invio: payload, timestamp, risposta, esito, operatore che ha approvato. Ritenzione: 12 mesi (configurabile). Esportabile su richiesta cliente.

Monitoraggio

Metriche disponibili lato Node AI: throughput, latenza, tasso errori, conteggio retry, profondità coda. Alert proattivi su anomalie. Dashboard di stato accessibile al cliente.

Sicurezza

Separazione ambienti

Prima del go-live in produzione, tutta l'integrazione deve essere testata end-to-end su ambiente non-prod (LPAR o libreria dedicata lato IBM i, tenant dedicato lato Node AI). In assenza di ambiente non-prod IBM i, concordare finestra di test controllata in produzione con piano di rollback.