
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:
- Scaricare un file Excel mastodontico dalla piattaforma
- Selezionare manualmente i donatori idonei, secondo criteri precisi che però, non sono riportati o facilmente filtrabili nei fogli
- Contattare via Whatsapp ogni singolo donatore, per verificare la disponibilità
- Per ogni donatore disponibile, accedere al sito web e completare la prenotazione in diversi minuti
- 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