Vai al contenuto

Gestionale corsi per un ente di formazione sanitaria

Un gestionale su misura, costruito dentro il sito di un ente di formazione sanitaria, che segue i corsi per medici e infermieri dall'iscrizione all'attestato. È in produzione e viene aggiornato di continuo.

Gestionale corsi per un ente di formazione sanitaria

Cosa fa

Il sistema prende in carico tutto quello che prima passava dalla segreteria a mano.

  • Iscrizioni: il corsista si registra, si iscrive e compila i propri dati, con i campi che cambiano a seconda che sia medico o infermiere.
  • Questionario prima del corso: da 25 a 40 domande secondo il programma, con una finestra di compilazione che si chiude prima dell'inizio. Dal secondo giorno il partecipante rivede le proprie risposte in sola lettura.
  • Questionario di gradimento: da 36 a 41 voci, compilato a corso finito. I docenti ne sono esclusi, anche quando risultano iscritti come partecipanti a un altro corso.
  • Area riservata ai direttori: chi dirige o coordina un corso entra sul sito e vede i propri corsi soltanto — chi ha compilato cosa, i risultati del gradimento, gli elenchi dei partecipanti — e scarica gli stessi dati in foglio di calcolo.
  • Attestati in PDF: generati dal sistema con nome, ruolo, sede, date e firme dei docenti già al loro posto, sui modelli approvati dall'ente. Il partecipante li scarica dalla propria pagina; la segreteria può stampare in anticipo un fac-simile in bianco di qualunque corso.
  • Promemoria e scadenze: due attività programmate girano da sole. La prima sollecita per email chi non ha ancora inviato il questionario iniziale, sette giorni e tre giorni prima del corso. La seconda avvisa chi ha una certificazione in scadenza, a sessanta e a quindici giorni. Nessuna delle due spedisce a chi non ha dato il consenso.

Come è fatto

Il sito dell'ente è in Joomla, con sopra una piattaforma di corsi già acquistata. Il lavoro non l'ha sostituita: le si è affiancato un componente su misura più nove estensioni, così i dati restano dove erano.

La scelta più importante riguarda l'area dei direttori. Le pagine di controllo stavano nel pannello di amministrazione, e per aprirle serve un permesso da amministratore. Darlo a decine di docenti avrebbe aperto a tutti loro l'intera amministrazione di un sito che tratta dati sanitari. È stata quindi costruita una pagina pubblica riservata, che riusa gli stessi calcoli del pannello — così i numeri non possono divergere fra i due lati — con il controllo del ruolo scritto in un punto solo e applicato due volte: sull'elenco dei corsi e sul numero di corso che arriva dall'indirizzo. Provato dal vivo cambiando quel numero a mano: la pagina risponde "accesso negato".

Il questionario di gradimento è anonimo per richiesta dell'ente. L'esportazione non riporta nome, email né data di invio, e le righe escono mescolate. La data è stata tolta apposta: incrociata con le altre pagine, che restano nominative, avrebbe rimesso un nome su ogni riga.

L'anti-spam scritto in casa

I moduli del sito erano esposti alle registrazioni automatiche, ma i due filtri anti-bot disponibili appoggiano il controllo ai server di un fornitore esterno: avrebbero mandato a un terzo i dati di navigazione di professionisti sanitari. Il filtro adatto esiste solo nella versione più recente di Joomla, che questo sito non usa, e così è stato scritto da zero. Non chiede niente a chi si registra: tre barriere invisibili — un piccolo calcolo che il browser deve eseguire, il rifiuto degli invii più rapidi di quattro secondi e un campo esca fuori schermo — con la sfida firmata dal sito stesso, così non serve tenere niente in memoria. La difficoltà è stata tarata misurandola: 23 millisecondi in media, 61 nel caso peggiore. Alzarla di un gradino avrebbe portato il caso peggiore a 1,9 secondi, pagati dai telefoni veri e non dai bot.

L'audit di sicurezza prima della consegna

Prima di considerare chiuso il lavoro è stato fatto un audit con dodici agenti IA, divisi su sei fronti: sicurezza del sito, script di servizio, le estensioni sviluppate, privacy, correttezza dei calcoli, procedura di installazione. Ogni fronte aveva un secondo agente con un compito opposto: demolire i risultati del primo. Dei 55 rilievi grezzi ne sono rimasti in piedi 45 e ne sono caduti 10, comprese due accuse pesanti che si sono rivelate infondate.

Le correzioni sono entrate nelle versioni successive: la protezione degli attestati controllava un solo parametro dell'indirizzo e si scavalcava cambiando una parola; gli export in CSV neutralizzano le formule che un foglio di calcolo eseguirebbe all'apertura; l'elenco anagrafico scaricabile dai direttori è stato ridotto ai soli campi che già vedono a schermo; il questionario iniziale non si può più inviare in bianco. Un episodio è servito da lezione: la raffica di richieste dell'audit ha fatto bloccare dal firewall del sito l'indirizzo dell'ufficio. Da allora un controllo dall'esterno si concorda prima.

Un difetto che sembrava misterioso

I questionari lunghi sparivano all'invio: il corsista compilava quaranta domande dal telefono e riceveva un errore di sessione scaduta. Non erano la cache né le estensioni: la sessione del sito durava quindici minuti, e con quel numero di domande superarli è la norma. È stata portata a sessanta, e nel codice sono entrate due reti di sicurezza perché le risposte non si perdano comunque.

Risultato: la segreteria non compila più attestati e promemoria a mano, i direttori dei corsi vedono i propri dati senza entrare nell'amministrazione del sito, e i dati dei partecipanti non escono verso servizi di terzi.