← Tutti i progetti Mirko Olindo
Progetto perGruppo Dimensione Ambiente
Document intelligence · 2026

Dimensione Patrimonio

Il mio ruoloDiscovery, design e build
Team di designNessuno, ho lavorato da solo
Confine di autonomiaSotto soglia decide la persona
StatoIn produzione sul loro ambiente

Estrazione strutturata su rendiconti bancari eterogenei. pdf.js estrae il testo lato client, Claude struttura le posizioni e dichiara un confidence score campo per campo. Tutto ciò che non supera soglia finisce in una coda di revisione umana invece che nel totale.

CommittenteGruppo Dimensione Ambiente

Rifiuti, bonifiche ed economia circolare. Nove siti operativi, settore industriale regolato.

PerimetroDiscovery, design e build

Requisiti raccolti direttamente da chi ha il problema. Poi IA, interfaccia, front-end e funzioni serverless.

Stackpdf.js · Anthropic API · Netlify Functions

Local-first su localStorage, cambi BCE, XLSX per l'import. In produzione sul loro ambiente.

Il contesto

Dieci controparti, dieci tassonomie.

Banche private, fondi di private equity, immobili, liquidità. Ognuna ha il proprio schema, la propria nomenclatura e il proprio calendario. Quello che una chiama valore residuo, un'altra lo chiama controvalore. Riconciliazione a mano, e un dato che invecchia nel tempo che serve a produrlo.

Banca private

PDF, schema proprietario

Private equity

Commitment, DPI, TVPI

Multivaluta

USD da convertire

dieci in tutto

La decisione di architettura

Parser deterministico, o estrazione probabilistica?

Opzione scartataUn parser per controparte

Deterministico e verificabile, ma accoppiato al template. Al primo restyling del rendiconto fallisce in silenzio: continua a restituire numeri, solo dalle celle sbagliate.

Opzione sceltaEstrazione via LLM

Regge schemi mai visti e non richiede manutenzione a ogni cambio di formato. In cambio introduce varianza, ed è lì che nasce il lavoro di design.

Il trade-off, ed è il cuore del progetto

Un modello che legge un rendiconto sbaglia, e sbaglia con la stessa confidenza lessicale di quando ha ragione.

La varianza non si elimina con un prompt migliore. Si rende visibile. Da qui in poi non è più un problema di modello, è interaction design: dove passa il confine di autonomia, cosa il sistema può scrivere da solo, e cosa deve dichiarare.

La pipeline

Dal PDF al consolidato, quattro stadi.

01 · ingestionUpload del rendiconto

Come arriva dall'istituto. Nessun template da configurare.

02 · estrazionepdf.js, lato client

Il documento non transita su nessun server per essere letto. Vincolo di riservatezza, non ottimizzazione.

03 · strutturazioneClaude, con confidence

Le posizioni in schema, e per ogni campo quanto è sicuro invece di una risposta piatta.

04 · outputConsolidato e review queue

Sopra soglia entra nel totale. Sotto soglia va in coda, e aspetta una persona.

Il modello di confidenza

Tre stati, e solo uno è silenzioso.

● alta confidenzaEntra nel consolidato

Con la percentuale e il riferimento alla pagina di origine. All'utente non compare nulla: il silenzio è l'interfaccia corretta per un dato affidabile.

● sotto sogliaEntra, ma flaggato

Il valore c'è, e accanto c'è ciò che il modello non ha saputo risolvere. Va in review queue, e il totale non è mai silenziosamente sbagliato.

● estrazione fallitaEscluso e dichiarato

Nessuna imputazione del dato mancante. L'omissione è esplicita, così nessuno assume che il consolidato sia completo.

Il prodotto

Dieci controparti, una vista.

Portfolio Hub · panoramica patrimonio
La panoramica del patrimonio consolidato
Dati dimostrativi. Le posizioni reali non lasciano la macchina del cliente.
Il pattern di revisione, ed è il cuore

L'incertezza ha un indirizzo, non un badge.

Il pattern diffuso è il badge sulla riga, che scarica sull'utente il costo di cercare. Qui l'incertezza ha una vista sua e un contatore in navigazione: quando il contatore è a zero, la riconciliazione è chiusa.

Da verificare · 8 segnalazioni aperte
La coda di revisione con le segnalazioni aperte
Il modello mentale in tre passi sta scritto nel prodotto, non in un manuale
UX writing degli stati di errore

L'errore nomina il campo nella lingua del cliente.

Posizioni · confidenza e provenienza
Le posizioni con la confidenza dichiarata
Il messaggio, in produzione«Senza quantità non posso calcolare il prezzo unitario di 185.000 €»

E sotto: scrivi quante unità possiedi, la trovi sul documento come «Quantità» o «Nominale». Non «parsing error»: dichiara il calcolo bloccato, il dato che manca e l'etichetta esatta da cercare sul documento.

Tre azioni, e la terza contaSistema ora · Modifica tutto · Va bene così

L'utente deve poter dichiarare un falso positivo, e quella decisione deve restare.

Explainability

Tre livelli di verificabilità.

La fiducia in un consolidato non nasce dalla sua correttezza. Nasce dalla possibilità di auditarlo. Ogni cifra dice come è stata ottenuta, ogni formula si apre sui valori reali, ogni valore risale al documento da cui viene.

Andamento · formule e derivazione
Le metriche con la formula popolata e la derivazione
Derivazione sul «?» di ogni KPI · formula con sostituzione numerica · audit trail con fonte, momento e documento
Il livello serverless

Netlify Functions: chiavi fuori dal client, e degradazione dichiarata.

fx.jsCambi ufficiali BCE

Chiamata dal server perché la BCE non espone CORS, con fallback sull'XML ufficiale e risposta in cache: una richiesta al giorno invece di una per visitatore.

prezzi.jsPredisposto, non attivo, e lo dichiara

Le fonti gratuite si sono chiuse. La chiave sta in una variabile d'ambiente, mai nella pagina, e gli ISIN del cliente non passano da proxy di terzi. Senza chiave l'endpoint dichiara il proprio stato invece di fallire in silenzio.

Dove finisce il mio lavoro

Cosa ho deciso io, e cosa no.

Deciso e costruito da me
  • I requisiti, raccolti direttamente da chi ha il problema, senza intermediari
  • La scelta di scartare il parser per controparte a favore dell'estrazione probabilistica
  • Il modello di confidenza a tre stati, e dove passa la soglia
  • La review queue come vista dedicata invece del badge inline
  • Il testo degli stati di errore, nella tassonomia del cliente
  • I tre livelli di verificabilità: derivazione, formula popolata, audit trail
  • Interfaccia, front-end e le due funzioni serverless
Non è mio
  • Il modello. Uso l'API di Anthropic, non ho addestrato nulla
  • L'estrazione del testo dal PDF, che è pdf.js
  • I tassi di cambio, che vengono dalla BCE
  • Il dominio. La tassonomia delle dieci controparti l'ho ricostruita con loro nelle sessioni di discovery, non l'ho inventata a tavolino

Il confine che conta è il terzo. Il modello legge e propone, la soglia decide cosa entra da solo nel consolidato, e la persona che firma il totale resta il cliente. Nessun valore incerto è mai entrato in un totale senza dirlo.

La tesi

Il sistema non decide da solo quando ha un dubbio: lo passa a te.

È scritto nel prodotto. Ed è la stessa domanda che mi sono posto sull'assistente conversazionale in produzione e sull'agente di retrieval: dove si colloca il confine di autonomia, e come si progetta il fallback verso la persona. Tre prodotti, un principio.

scorri, oppure frecce · F a schermo intero