Benedetti code

@ruby | $php | javaScript;
 

Personal Physical Therapy application

Caso Studio

 
Personal Physical Therapy è un prototipo Node.js.
Scopo: un'introduzione ad un ipotetico software per misurare il progresso di una terapia fisica personale
 

Introduzione

 
Benvenuti nel mio caso di studio! Ecco una breve introduzione con alcuni dei motivi che mi hanno portata a svilupparlo: durante i miei anni di lavoro presso un'azienda di dispositivi medici, ho preso consapevolezza di aspetti impliciti ed essenziali del settore sanitario, ad esempio una tracciabilità affidabile degli eventi, l'attenzione verso la riservatezza dei dati sensibili, e ancora la ricerca del miglior equilibrio tra opzioni innovative e soluzioni tecnologiche sostenibili ... Ma prima di tutto la cultura dell'assistenza sanitaria del paziente e la comunicazione tra i professionisti del settore medico e i loro pazienti, oggetto di questo caso di studio.

Disclaimer

 
Il codice prototipo di questo caso di studio e tutte le altre informazioni correlate devono essere intesi come un buon punto di partenza, anche se rimangono ipotetici e non esaustivi di un vero sviluppo.

Specifiche dei requisiti software

 
Questa potrebbe essere considerata la parte principale di una più ampia raccolta dei Requisiti funzionali dell'utente:

Descrizione
  • Applicazione per pazienti di fisioterapisti che necessitano di una preparazione sportiva o ginnastica posturale

Il fisioterapista può
  • creare un programma su misura da assegnare al paziente
  • modificare le attività che compongono il programma personalizzato
Il paziente può
  • accedere al programma su misura completo
  • registrare il completamento delle attività
  • esportare i risultati del programma in pdf per condividerlo con altre persone, ad esempio il suo allenatore, il suo medico di famiglia, il fisioterapista stesso e così via
Il sistema deve
  • permettere un accesso all'applicazione basato sul ruolo
  • collezionare e mostrare il programma su misura e il completamento delle attività
  • collezionare il progresso di ciascun programma su misura assieme a notazioni come i potenziali problemi riscontrati ai fini di ottimizzare la terapia

Appunti di Progettazione e Sviluppo

 
È un'applicazione web con accesso ristretto a ruoli utente predefiniti: paziente e fisioterapista.
La gestione degli utenti dipende dall'uso previsto di questo software, alcuni esempi:
  • è destinato ad essere distribuito ad una serie di cliniche? Il personale della clinica può assegnare ruoli agli utenti attraverso un'area amministrativa dedicata
  • è un sistema aperto? Gli utenti possono registrarsi su un sito web/app self-service


Schema del Database

MongoDB database schema

Profilazione

tabella delle operazioni CRUD con autorizzazioni per ruolo


  Physiotherapist Patient
  C R U D C R U D
User   ✔️       ✔️    
Therapy Program ✔️ ✔️ ✔️ ✔️   ✔️    
Task ✔️ ✔️ ✔️ ✔️   ✔️    
Completion         ✔️ ✔️ ✔️ ✔️
  Physiotherapist
  C R U D
User   ✔️    
Therapy Program ✔️ ✔️ ✔️ ✔️
Task ✔️ ✔️ ✔️ ✔️
Completion        


  Patient
  C R U D
User   ✔️    
Therapy Program   ✔️    
Task   ✔️    
Completion ✔️ ✔️ ✔️ ✔️


Routes


// HOME
router.get('/', ensureAuthenticated, (req, res) => { ... })

// LOGIN LOGOUT
router.get('/login', (req, res) => { ... })
router.post('/login', (req, res, next) => { ... })
router.get('/logout', (req, res) => { ... })

// THERAPY PROGRAM
router.post('/therapyprograms/new', ensureAuthenticated, (req, res) => { ... })
router.post('/therapyprograms/:id/update', ensureAuthenticated, (req, res) => { ... })
router.delete('/therapyprograms/:id/delete', ensureAuthenticated, (req, res) => { ... })
router.post('/therapyprograms/:id/export', ensureAuthenticated, (req, res) => { ... })

// TASK
router.post('/tasks/new', ensureAuthenticated, (req, res) => { ... })
router.post('/tasks/:id/update', ensureAuthenticated, (req, res) => { ... })
router.delete('/tasks/:id/delete', ensureAuthenticated, (req, res) => { ... })

// COMPLETION
router.post('/completions/new', ensureAuthenticated, (req, res) => { ... })
router.post('/completions/:id/update', ensureAuthenticated, (req, res) => { ... })
router.delete('/completions/:id/delete', ensureAuthenticated, (req, res) => { ... })
                


Aspetti Applicativi e di Modellazione


Programma terapeutico con molteplici attività: con un campo JSON preliminare sarebbe più che sufficiente.
Ad esempio avrei considerato un plugin come Alpaca forms in jQuery.
Ma in vista di uno sviluppo più ampio, ho optato per un classico dato strutturato relativo alla registrazione del livello di completamento dell'attività come qui sotto ...

Un'attività può essere completata più volte. Un approfondimento sul modello di completamento di un'attività: volevo sfruttare il polimorfismo di MongoDB, quindi invece di un semplice stato booleano come "fatto", ho scelto di usare un discriminator perché dà una struttura estensibile e permette di raccogliere diversi tipi di informazioni in base a un tipo di attività:
  • l'utente che lo ha fatto
  • quando l'utente lo ha fatto
  • eventuali notazioni come problemi riscontati durante l'attività (un campo di note è una richiesta comune!)
  • informazioni sul completamento a seconda del tipo di attività: livello di intensità in caso di un'attività di tipo esercizio
                    
const ExerciseCompletion = Completion.discriminator(constants.COMPLETION_TYPES.exercise, Schema({
        intensity: { type: constants.EXERCISE_INTENSITY_LEVELS, required: false }
    })
)
                    
                

Per esportare i risultati del programma ho creato velocemente un report con una conversione HTML-to-PDF scegliendo il leggero node-html-pdf che usa Phantom. Per bisogni più complessi e multipiattaforma potrei considerare il super potente e versatile jsreport jsreport.

PS: proposte e potenziali estensioni

 
  • modifica di cambi descrittivi attraverso un RichTextEditor come TinyMCE
  • sostituzione dei permessi di accesso basati su ruolo utente con le funzionalità della piattaforma MongoDB Stitch
  • un report automatico con la personalizzazione dei livelli di notifiche, frequenze e lista dei destinatari come definito da preferenze del paziente
  • invio dei risultati della terapia ad un sistema esistente come ad esempio un database di allenamento od un software di dati clinici
  • una app nativa per sfruttare meglio le caratteristiche native del dispositivo, come ad esempio le push notification e l'integrazione con altre app distribuite come Apple Health e Google Fit

Hai altre proposte e vuoi realizzare od estendere questa applicazione?
Se posso aiutarti sarei felice di sentirti.
Inviami pure le tue richieste a valentina@benedetticode.com

Download GRATUITO

 
Registrati alla mia newsletter per scaricare il codice GRATUITO del prototipo. Niente spam ;-)

A proposito dell'autrice

 
Ciao, sono Valentina Benedetti autrice di questo codice sorgente, lavoro come Programmatrice libera professionista: aiuto aziende, altri sviluppatori e web designer a creare applicazioni e siti Internet su misura, specialmente in Ruby on Rails, Laravel, Node.js.