Caso di studio · Progetto
Costruire un database di ricerca con Claude
Decine di file di coorti, esportazioni e registri, diverse migliaia di pazienti: come si è costruito un database unico, versionato e pseudonimizzato con un orchestratore e delle sotto-competenze, e che cosa ha insegnato ogni incidente.
Idea
Quale problema, in una frase?
Formulare il problema in una frase
«Quanti pazienti abbiamo con questo fenotipo e questo dato?» richiede una settimana: decine di file, ciascuno con il proprio modo di identificare un paziente, le proprie unità e i propri vuoti. Il bisogno non è un foglio di calcolo in più, ma un database unico che risponda in pochi minuti, solo con conteggi.
DifficoltàOgni progetto aveva ricreato la propria estrazione, con conteggi che non coincidevano mai.
SoluzioneUn solo database, mai un database parallelo; ogni nuovo bisogno diventa un'interrogazione su quel database.
Concetto
Che cosa sarà lo strumento, e che cosa farà?
Scrivere il quadro prima della prima riga di codice
Base giuridica, parere favorevole del responsabile della protezione dei dati e dell'ufficio per la ricerca clinica, luogo in cui il trattamento con l'IA è autorizzato, chi decide i congelamenti. Poi la regola di lavoro: l'IA lavora solo sul database pseudonimizzato; la cassaforte (chiave di corrispondenza e originali) si apre solo su richiesta esplicita, sulla postazione.
!Nessun dato identificativo nella conversazione: si mostrano nomi di colonne, strutture e conteggi.
Suddividere in moduli invece di un unico skill gigante
Un orchestratore «database» che porta le regole comuni (pipeline, indice, congelamento, pubblicazione) e smista; sotto-competenze separate per patologia; un solo modulo di interrogazione; un modulo per registro. L'orchestratore non entra mai nel dettaglio.
Da dire a Claude«Ecco lo skill del mio database di ricerca. Individua ciò che riguarda le regole comuni e ciò che riguarda una patologia o un registro, e proponi una suddivisione in orchestratore e sotto-competenze, indicando per ciascuna che cosa copre e che cosa esclude.»
DifficoltàL'orchestratore era cresciuto fino a occuparsi del dettaglio di ogni patologia: era diventato illeggibile e si contraddiceva.
SoluzioneSuddiviso in sotto-competenze; l'orchestratore conserva solo le regole comuni e lo smistamento.
Realizzazione
Che cosa chiedere a Claude, e in quale ordine?
Un rituale di inizio sessione
A ogni sessione Claude legge il piano e il registro delle attività, poi riassume lo stato in tre righe: a che punto siamo, che cosa blocca, il prossimo passo. Quando nasce una regola, skill, piano e registro vengono aggiornati nello stesso turno, non «più tardi».
DifficoltàUna regola decisa in una sessione, dimenticata in quella successiva.
SoluzioneNessuna regola esiste finché non è scritta, nello stesso turno, nello skill, nel piano e nel registro.
Integrare le fonti una alla volta
Ogni nuova fonte passa una checklist: come identifica un paziente, quali fogli sono dizionari o tabelle trasposte, poi un'architettura a due livelli (l'inclusione, poi l'arricchimento, che non aggiunge mai pazienti). Si riparte dallo script della coorte più simile; ogni valore resta tracciato fino alla sua cella.
DifficoltàAlcune decine di falsi pazienti sono nati da un foglio trasposto: le intestazioni di colonna erano state lette come identità.
SoluzioneIndividuazione dei fogli trasposti e dei dizionari prima di ogni importazione, e controllo «l'arricchimento non aggiunge pazienti» a ogni passaggio.
Abbinare i pazienti con un punteggio
Identità tollerante agli errori, data di nascita con una tolleranza, un insieme di indizi; tre soglie (certo, probabile, dubbio); il dubbio resta nel database con il suo motivo. Un test placebo misura la quota di collegamenti dovuti al caso.
DifficoltàDue persone diverse fuse perché condividevano la stessa data di nascita e un nome simile.
SoluzioneRegola «data di nascita unica» contata su tutto il perimetro, tetto di collegamenti per scheda e verifica umana mensile di un campione di collegamenti certi.
!Mai una fusione su un solo parametro.
Prova
Come dimostrare che funziona?
Controllare la qualità senza soffocare il segnale
Rapporto di qualità in cinque famiglie, decisione sulle discrepanze in blocco, poi congelamento numerato e datato con copia bloccata. Una variabile senza decisione non viene mantenuta; una correzione sostanziale apre una nuova versione.
DifficoltàDiverse migliaia di allarmi al primo passaggio, quasi tutti falsi: nessuno li leggeva più.
SoluzioneNiente più allarmi sugli identificativi né controlli di intervallo sulle variabili 0/1, unità miste sospettate solo su almeno due file con un raggruppamento netto per un fattore 10, convenzione di segno ricondotta al valore assoluto.
Verificare la copertura anno per anno
Tre livelli di cifre (persone censite, con un file sorgente, con misure nel database) e, per ogni fonte, un audit annuale: un esame è «disponibile» se contiene più misure o un referto; gli esami soltanto datati mostrano i vuoti.
DifficoltàUn anno quasi vuoto è stato letto all'inizio come assenza di esami.
SoluzioneUna riesportazione identica ha dimostrato che la mancanza veniva dalla fonte; ora si distingue un vuoto della fonte da un mancato collegamento, con un riconteggio indipendente.
Messa in servizio
Come consegnarlo, pubblicarlo e farlo durare?
Trattare un giacimento di esami senza dati clinici come oggetto metodologico
Uno stock di diverse migliaia di esami senza dati clinici associati non viene né scartato né mescolato al database: prima si profilano le colonne (tipi, tassi di compilazione, intervalli), poi si separa ciò che è pubblicabile senza esiti (descrizione, fattibilità, riproducibilità) da ciò che richiede un collegamento allo stato in vita, soggetto a un proprio quadro.
!Nessuna domanda clinica su questo stock prima della profilazione.
Rispondere in pochi minuti e sorvegliare ogni settimana
Ogni elenco di pazienti avvia un'interrogazione longitudinale; una richiesta di estrazione produce una cartella di lavoro normalizzata, pseudonimizzata e registrata; i pannelli statistici mostrano i loro limiti e mascherano i piccoli conteggi. Una sentinella settimanale in sola lettura dà un esito OK, allerta o errore, confrontato con il precedente.
DifficoltàUn database aperto su una cartella di rete si è ritrovato in uno stato incoerente dopo un'interruzione della connessione.
SoluzioneDatabase copiato in locale, elaborazioni riprendibili, scritture tutto o niente con riconteggio, pubblicazione tramite copia verificata e poi sostituzione.