Torna ai progetti
Concluso

OdontoCare

Gestionale per uno studio odontoiatrico: pazienti, preventivi, fatture e promemoria in un solo posto, con accesso senza password e documenti generati dai dati.

|
RuoloAnalisi, progettazione, sviluppo e gestione del server
SquadraProgetto individuale
Tecnologie10 tecnologie

Di cosa si tratta

Un'applicazione ASP.NET Core a Razor Pages costruita attorno al lavoro quotidiano di una clinica: la scheda del paziente, il preventivo con il piano rate, la fattura, il promemoria. I moduli che i pazienti compilano online entrano da soli nell'archivio, i documenti escono come PDF veri generati dai dati, e chi lavora allo sportello entra con un codice usa e getta invece che con una password appuntata da qualche parte. Lo stesso codice gira su due database diversi — SQL Server in sviluppo, PostgreSQL in produzione — perché la macchina di produzione ha cambiato casa due volte e il progetto doveva poterla seguire.

Funzionalità principali

Pazienti

  • Anagrafica e scheda del singolo paziente
  • Moduli compilati online che entrano da soli in archivio
  • Listino trattamenti con prezzi per clinica

Documenti

  • Preventivi con piano rate calcolato
  • Fatture con le voci prese dal preventivo
  • PDF generati dai dati, non compilati a mano

Studio

  • Più cliniche sotto lo stesso accesso
  • Collaboratori con ruoli distinti, invitati dal titolare
  • Accesso con codice usa e getta via email

Manutenzione

  • Promemoria automatico quando manca un backup
  • Notifiche push, senza app da installare
  • Registro delle operazioni di salvataggio

Problemi e soluzioni

I moduli online arrivano da un servizio esterno, e la tentazione era leggerne il contenuto dando per buono uno schema inventato a tavolino. Sarebbe funzionato finché il titolare non avesse aggiunto una domanda al modulo: da lì in poi ogni compilazione sarebbe finita nel posto sbagliato, in silenzio.

SoluzioneIl messaggio viene letto per com'è fatto davvero: ogni domanda porta con sé il testo scritto dal titolare, ed è lì che si cerca il nome, il telefono e l'orario di contatto. Una scheda nasce solo se ci sono tutti e tre. Prove del modulo, compilazioni lasciate a metà e richieste senza recapito vengono ignorate — al servizio esterno si risponde comunque che è andato tutto bene, così non riprova all'infinito.

La macchina di produzione girava su architettura ARM, dove SQL Server semplicemente non esiste. In sviluppo però SQL Server è quello che si ha già installato, senza scaricare niente.

SoluzioneIl motore del database si sceglie da configurazione, e ognuno ha il proprio progetto di migrazioni: due storie separate, nessuna delle due che tenta di applicare al vicino istruzioni scritte per sé. In sviluppo si parte premendo F5, in produzione si parte su Postgres, e nel mezzo non c'è nessun file da modificare a mano.

Il fornitore di hosting ha chiuso l'account senza preavviso e senza possibilità di recuperare quello che c'era sopra.

SoluzioneIl progetto è ripartito su un fornitore diverso in una giornata, perché la procedura di installazione era scritta passo per passo invece che ricordata a memoria, e il database di produzione era già quello portabile. La guida vecchia non è stata cancellata: è rimasta lì, con scritto in cima perché non vale più.

Accesso al progetto

Tecnologie

C#
.NET
ASP.NET Core
Razor Pages
Entity Framework Core
PostgreSQL
SQL Server
QuestPDF
Linux
nginx

Indice

  • Di cosa si tratta
  • Funzionalità principali
  • Problemi e soluzioni