Estrarre numero, data e importo da una fattura sembra un compito semplice, finché cambia il layout o il documento è una scansione. Il modello può restituire testo plausibile, confondere imponibile e totale o riempire un campo non visibile. Se il risultato alimenta un foglio o un gestionale, un singolo errore può propagarsi senza essere notato.

IN SINTESI

Perché è importante

  • Uno schema limita la forma dell’output, ma non dimostra che il valore estratto sia corretto.
  • Campi opzionali, rifiuti e documenti illeggibili devono avere percorsi espliciti.
  • I controlli su importi, date e corrispondenze devono essere eseguiti dal software e da una persona prima di una decisione.

Il JSON valido può contenere un’informazione sbagliata

Gli output strutturati riducono un problema diverso: possono vincolare la risposta a uno schema definito, per esempio un oggetto JSON con campi e tipi previsti. La documentazione OpenAI distingue questa modalità dal JSON mode: lo schema controlla la struttura, mentre l’accuratezza del contenuto richiede ancora verifica. Non trasforma un modello in un lettore infallibile e non autorizza a scrivere direttamente nei sistemi contabili.

Il flusso va progettato per fermarsi in modo sicuro. Un campo assente deve restare nullo o essere marcato come non trovato, non essere inventato. Un rifiuto, un PDF illeggibile o una risposta che non supera i controlli devono finire in revisione, non diventare una registrazione automatica.

Definisci lo schema prima di scegliere il prompt

Parti dal risultato necessario e limitati ai campi utili: fornitore, data documento, valuta, imponibile, imposta, totale e numero fattura. Per ciascuno specifica tipo e formato. Una data va normalizzata in YYYY-MM-DD; gli importi devono essere numeri decimali con valuta separata; il numero documento resta testo perché può contenere zeri iniziali o lettere.

Decidi quali campi possono essere nulli e quali devono bloccare il processo. Se il PDF non mostra la valuta, l’estrazione non deve dedurla dall’indirizzo o dal simbolo ambiguo. Puoi aggiungere un campo di evidenza come pagina e breve citazione, così chi revisiona trova subito il dato nel documento. Imposta lunghezze massime e valori ammessi, senza creare uno schema più complesso del modulo di destinazione.

Con Structured Outputs nell’API OpenAI, lo schema JSON viene fornito nella richiesta in modalità strict, per i modelli e i tipi supportati. Le API cambiano: controlla documentazione, compatibilità del modello e sintassi corrente prima di implementare. Se usi un altro fornitore, cerca l’equivalente supportato e non presumere che ‘JSON mode’ garantisca il rispetto di ogni schema.

DALLA TEORIA ALLA PRATICA

Cosa puoi farci concretamente

  • Definisci pochi campi con tipo, obbligatorietà e regole di validazione prima di inviare documenti al modello.
  • Richiedi anche pagina e testo di supporto per ogni valore, così la revisione può tornare alla fonte.
  • Fai passare gli output a controlli deterministici e a una coda di revisione prima di registrazioni, pagamenti o comunicazioni.

Aggiungi controlli che non dipendono dal modello

Dopo la risposta, valida il JSON con una libreria e applica regole deterministiche: data plausibile, importo maggiore o uguale a zero, somma di imponibile e imposta coerente con il totale entro una tolleranza, valuta ammessa e numero fattura non vuoto. Se una regola fallisce, conserva il documento e invia il record alla revisione. Non chiedere al modello di certificare da solo la propria correttezza.

Se possibile, registra per ogni valore pagina e porzione di testo da cui è stato estratto. Un revisore può confrontare importo e data con la fonte invece di rileggere l’intero PDF. Una citazione prodotta dall’AI non è prova automatica: può essere inesatta, quindi l’interfaccia deve aprire la pagina originale e rendere facile il confronto.

Prima del rilascio prova documenti reali autorizzati e anonimizzati: scansione ruotata, fattura multi-pagina, IVA assente, valuta diversa, totale con sconto, testo poco leggibile e documento non fiscale. Misura campo corretto, correzioni umane, rifiuti e tempo di gestione. Parti da un campione piccolo e non usare i risultati di un solo fornitore come garanzia universale.

Proteggi i documenti e lascia l’approvazione a una persona

Fatture e ricevute possono contenere nomi, indirizzi, coordinate di pagamento e riferimenti commerciali. Invia soltanto i dati necessari, scegli un trattamento e una conservazione compatibili con il tuo contesto e non caricare documenti di clienti in strumenti non approvati dall’organizzazione. Registra accessi e tempi di cancellazione secondo le regole applicabili.

L’AI può compilare una bozza, ma non dovrebbe approvare un pagamento, modificare coordinate bancarie o inviare un documento senza un passaggio autorizzato. Per queste azioni servono controlli indipendenti, permessi minimi e conferma esplicita. Una corrispondenza sospetta o un IBAN cambiato va verificato tramite un canale già noto, non rispondendo alla stessa email.

Il test di accettazione è concreto: un campo mancante resta segnalato, un totale incoerente viene fermato, ogni dato si riconduce alla pagina e una persona può correggere il record prima che venga salvato. Se questi casi non funzionano, il processo non è pronto per l’automazione, anche se il JSON appare sempre valido.

APPROFONDIMENTI

Fonti

Documenti, comunicati e pubblicazioni consultati per ricostruire dati e contesto.

  1. OpenAI API — Structured model outputsDocumentazione primaria
  2. OpenAI — Introducing Structured Outputs in the APIFonte primaria
  3. NIST — AI Risk Management FrameworkFonte istituzionale