Gene-WR
Motore di interpretazione e reportistica genetica per una startup di farmacogenomica accreditata dell'Università degli Studi di Bari: elabora i file CSV dei sequenziatori, estrae gli SNP rilevanti per ogni pannello analitico e genera il referto clinico — da una notte di calcolo a meno di un minuto.
Il problema
Il processo partiva da un'applicazione PHP legacy: elaborare una run — un lotto da 12 o 24 campioni, ciascuno con circa 700.000 SNP — richiedeva un'intera notte di calcolo, con il PC lasciato acceso e i risultati disponibili solo il mattino successivo. Se il processo falliva, si ricominciava da capo, manualmente.
Il processo era gestito da un programma PHP legacy che lavorava ibridamente: parte in locale, parte online. L'interfaccia era difficile da interpretare e l'elaborazione si bloccava spesso durante l'esecuzione, costringendo a riavvii manuali e a ricostruire lo stato dei campioni a memoria.
Ogni campione attraversa una filiera fisica — generatore, distributore, laboratorio — e all'interno di ogni fase coinvolge persone diverse. Senza un codice univoco che accompagni il campione dall'inizio alla fine, la tracciabilità era impossibile.
I file CSV prodotti dagli analizzatori non sono sempre conformi: aggiornamenti software delle macchine cambiavano il formato senza preavviso, generando errori silenziosi che potevano compromettere l'intera elaborazione.
Si tratta di dati sanitari sensibili: l'accesso alle informazioni deve essere rigorosamente separato per ruolo e ogni operazione tracciata per conformità normativa.
Come l'ho affrontato
Web app multi-ruolo con tre aree isolate da permessi: dashboard admin per configurazione e anagrafiche, pannello laboratorio per upload e avanzamento lavorazioni, area paziente per download referti. Ogni ruolo vede solo ciò che gli compete — un requisito imprescindibile per dati clinici sensibili.
Tracciabilità end-to-end basata su barcode: ogni campione riceve un codice univoco che lo accompagna dalla generazione alla distribuzione, dall'ingestione CSV alla validazione. Il flusso copre tre macro-fasi — assegnazione distributore e prima spedizione, configurazione anagrafica e pannello, ingestione ed estrazione dati con doppio controllo di validazione.
Il cuore del sistema è il motore di elaborazione in Python con Polars: scelto dopo un confronto diretto con pandas, Polars si è dimostrato nettamente più efficiente nell'analisi di file CSV da circa 700.000 SNP ciascuno. Il motore non legge tutto: filtra e isola esclusivamente gli SNP definiti nel protocollo del biologo per il pannello specifico, poi applica le regole cliniche per calcolare la predisposizione genetica. Un esempio è la valutazione dell'HLA-DQ2/DQ8 per la predisposizione alla celiachia — un pannello analitico tra i tanti, eseguibile solo quando richiesto dal biologo nel protocollo specifico.
I CSV provenienti dagli analizzatori non sempre sono conformi: aggiornamenti software delle macchine ne modificano il formato senza preavviso. Ho implementato una logica dedicata che intercetta i file non conformi, segnala l'anomalia e gestisce il re-upload, eliminando gli errori silenziosi che potevano compromettere l'intera elaborazione.
L'intero flusso — dalla ricezione del campione al referto finale — è modellato come un workflow con stati tracciati e avanzamenti guidati. Ogni operatore sa cosa deve fare e dove si trova ogni test. Le elaborazioni pesanti girano in code asincrone gestite da Horizon, l'infrastruttura è monitorata con Telescope.

Progettazione
Prima di scrivere codice ho progettato i processi chiave su carta — uno standard di lavoro che applico sistematicamente. Gli schemi, realizzati con Figma e Excalidraw, documentano il flusso barcode end-to-end e l'algoritmo di calcolo della predisposizione alla celiachia, servendo sia come blueprint per lo sviluppo sia come documento di confronto con il cliente.


Architettura & Tecnologie
Architettura monolite Laravel con UI interattive in Livewire, MySQL per la persistenza relazionale, Redis per cache e code asincrone gestite da Horizon. Il motore di elaborazione è un modulo Python con Polars — scelto dopo un confronto diretto con pandas per la sua efficienza superiore su dataset genetici di grandi dimensioni — orchestrato dal backend Laravel. Il motore esegue le quattro fasi in sequenza: ingestion CSV, filtraggio SNP per protocollo clinico, calcolo predisposizione e generazione report. Telescope traccia richieste, query e job in esecuzione.
Caratteristiche principali
Elaborazione da una notte a meno di un minuto: il motore Python/Polars processa run da 12-24 campioni e 700K+ SNP in un'unica operazione automatizzata
Tracciabilità barcode end-to-end: ogni campione segue dalla generazione al referto, con visibilità continua su tre macro-fasi operative
Gestione resiliente dei CSV non conformi: intercettazione errori da aggiornamenti software delle macchine, con re-upload guidato e zero errori silenziosi
Workflow multi-ruolo con permessi granulari: admin, laboratorio, distributori e pazienti — ogni ruolo vede solo ciò che gli compete
Filtraggio SNP mirato per protocollo clinico: il motore elabora solo le varianti rilevanti per il pannello analitico specifico
Calcolo predisposizione genetica automatizzato: combinazione varianti (es. HLA-DQ2/DQ8) e generazione indice di rischio, eliminando l'elaborazione manuale
Referti clinici consultabili e scaricabili dall'area paziente, generati automaticamente dal sistema

In pratica


Risultati
Una notte di calcolo diventata meno di un minuto: il motore Polars elabora run da 12-24 campioni — ciascuno con circa 700.000 SNP — filtrando e calcolando le predisposizioni in un'unica operazione automatizzata.
Niente più PC acceso tutta la notte e niente più riesecuzioni manuali: il processo che prima richiedeva sorveglianza umana e ripartenze da capo in caso di fallimento ora gira in modo autonomo e prevedibile.
I CSV non conformi non sono più un problema: ogni file che presenta deviazioni dal formato atteso viene intercettato, segnalato e gestito con re-upload guidato, eliminando gli errori silenziosi che potevano compromettere l'elaborazione.
Tracciabilità completa dalla macchina al referto: ogni campione ha un codice univoco che ne ricostruisce il percorso attraverso la filiera — generatore, distributore, laboratorio — fino al referto finale consultabile dal paziente.
Elaborazione centralizzata con accessi controllati: ogni operatore — admin, laboratorio, distributore, paziente — accede esclusivamente alle funzionalità e ai dati pertinenti al proprio ruolo.
Un problema simile al tuo?
Parliamone: costruiamo qualcosa che regga al primo colpo e per gli anni a venire.
Parliamone