Featured image

Introduzione Link to heading

Da qualche settimana sono entrato a far parte del direttivo della mia AVIS comunale. La nostra AVIS deve organizzare circa 30-40 posti per le donazioni di sangue al mese, più donazioni di plasma variabili in base alla disponibilità del polo trasfusionale.

Un programma dovrebbe permetterci di identificare rapidamente le persone idonee alla donazione e, una volta contattate, di inserire velocemente la prenotazione.

Nel sistema attuale, di rapido e semplice, non c’è niente.

La situazione attuale Link to heading

Attualmente ci vengono forniti due software distinti (Emodonor, AvisNet). Uno dovrebbe essere in disuso, ma mantiene ancora funzionalità che mancano completamente sul sistema “nuovo”. Il software più recente è sviluppato in ASP.NET Web Forms con largo uso di jQuery 2 e, ovviamente, non espone alcuna API.

Il processo di prenotazione Link to heading

La procedura per organizzare una giornata di donazione è quasi interamente manuale:

  1. Scaricare un file Excel mastodontico dalla piattaforma
  2. Selezionare manualmente i donatori idonei, secondo criteri precisi che però, non sono riportati o facilmente filtrabili nei fogli
  3. Contattare via Whatsapp ogni singolo donatore, per verificare la disponibilità
  4. Per ogni donatore disponibile, accedere al sito web e completare la prenotazione in diversi minuti
  5. Sperare di non dover sospendere donatori, o fare altre operazioni che necessitano di pingare continuamente e per via telefonica, l’avis provinciale

La user experience è decisamente problematica e rende il processo estremamente lungo e laborioso.

Il mio piano Link to heading

Creare un’applicazione che, prende in input due file Excel (sia al primo avvio, che in aggiornamento con un sistema di merge), popola un database locale e presenta tabelle filtrate, più qualche automatismo utile

Dato che questa necessità coincide con il rilascio di Claude 4 Sonnet, ho scelto di utilizzarlo per sviluppare il progetto e testarne le capacità.

Passiamo all’analisi iniziale

Analisi tecnica PrenotAVIS Link to heading

Obiettivo dell’applicazione (offline, cross-platform, minimale) Link to heading

PrenotAVIS è un’applicazione per la gestione offline delle prenotazioni per le donazioni di sangue e plasma. Tutti i dati restano in locale, senza sincronizzazione esterna.

L’app deve essere cross-platform: funzionare come applicazione web, e poter essere compilata (in un secondo momento) per Android e iOS.

La base utenti è limitata (~250 donatori attivi), quindi le performance non sono un vincolo critico.

Stack tecnologico Link to heading

Frontend Link to heading

Tecnologia Descrizione
Angular Framework web moderno, modulare, lo conosco bene
Angular Material UI minimale, accessibile e responsiva con componenti predefiniti (form, dialog, date picker, ecc.)
Capacitor Permette di compilare l’app per Android/iOS partendo da Angular

Database locale Link to heading

Tecnologia Descrizione
SQLite Database embedded, leggero e affidabile, ideale per dati in locale
@capacitor-community/sqlite Plugin Capacitor che consente l’uso di SQLite su Android, iOS e browser (via IndexedDB)

SQLite sarà il cuore dell’archiviazione dati locale, senza necessità di backend.

Per il momento non mi interessa il multiutente, un domani valuterò opzioni per la condivisione del database senza passare dal cloud e quindi massima garanzia di privacy.

CSV / Backup Link to heading

Per processa excel in input, ho bisogno di (SheetJS)[https://www.npmjs.com/package/xlsx]

Non si usano librerie esterne per i csv. Tutta la gestione viene fatta con JavaScript nativo, ad esempio:

Funzione Tecnica
Lettura file CSV FileReader HTML + parsing manuale (split("\n"), split(","))
Esportazione CSV Generazione stringa via Array.map() + join(), creazione Blob per scaricamento
Backup e ripristino CSV come formato di scambio/importazione tra installazioni

Per le date, evito l’uso di librerie come date-fns o moment, mi bastano gli oggetti Date di JS.

Struttura del database locale (SQLite) Link to heading

Tre tabelle fondamentali: donatori, giornate_donazione, prenotazioni.

Tabella donatori Link to heading

Contiene le informazioni anagrafiche, cliniche e di contatto.

Tabella giornate_donazione Link to heading

Ogni evento in cui si raccolgono donazioni.

Tabella prenotazioni Link to heading

Collega ogni donatore a una o più giornate, con un orario.

Import / Export (backup locale) Link to heading

L’app permette:

  • Importazione iniziale da due file XLSX (storico donatori, e donatori attivi)
  • Esportazione periodica di backup in CSV (in futuro incrementale e automatico)
  • Nessuna connessione esterna, tutto avviene in locale

Estensioni future Link to heading

  • Riempimento automatico delle prenotazioni con i donatori abilitati
  • Visualizzazione di slot disponibili
  • Reportistiche base: donazioni effettuate, donatori sospesi, ecc.
  • Automazioni per velocizzare il contatto del donatore (messaggi preimpostati, al click te li copia nella clipboard)

Conclusione Link to heading

Questa architettura minimalista mi offre:

  • 100% offline, privacy garantita
  • App cross-platform su web, Android e iOS
  • Interfaccia utente elegante e semplice, senza troppi ghirigori (Material)
  • Pochissime dipendenze → massima stabilità e controllo