MCU Backoffice

La pagina dei report: una settimana di visite e incassi, il carico per reparto e la coda dei pazienti, su dati inventati

Panoramica

Il backoffice interno in cui lavora lo staff della stessa clinica: cartelle dei pazienti, l'agenda del giorno di ogni medico, visite, bozze di fatturazione e attività condivise, su un Cloudflare Worker con D1, dietro Cloudflare Access. È in uso e continua a crescere.

Stack

TypeScript, React 19, Vite, Tailwind CSS, shadcn/ui su Base UI, Cloudflare Workers, D1 (SQLite), Cloudflare Access, Playwright

Cosa ho realizzato

  • Accesso verificato sul server: il Worker controlla da sé il token di Cloudflare Access (firma RSA con chiavi in cache, audience, issuer, scadenza) e lo associa a un profilo dello staff creato in D1. Se manca un'impostazione risponde 503, mai una porta aperta.
  • Sei ruoli applicati dal Worker a ogni richiesta: l'accettazione vede anagrafiche e agenda ma nessuna nota clinica, un clinico vede solo i pazienti che ha in cura, l'amministrazione vede solo il registro interno.
  • Un'agenda per ogni medico, protetta dalle doppie prenotazioni con trigger SQLite, dato che D1 non ha vincoli di esclusione.
  • Visite avviate da un appuntamento e attribuite al clinico che le svolge. Una visita conclusa non viene mai riscritta: una correzione è un'integrazione datata e attribuita.
  • Concludere una visita con un importo crea una bozza di fatturazione che l'accettazione conferma prima che possa essere segnata come pagata. È un registro interno, non una fattura fiscale.
  • Un registro di audit append-only garantito dal database, e ogni dato tenuto separato per clinica.
  • Header di sicurezza (CSP, HSTS, niente framing), scritture dietro un flag esplicito che resta spento fuori dalla produzione, e una CI con build, smoke test del Worker, test end-to-end con Playwright e npm audit, senza segreti.

Scelte chiave

  • L'interfaccia non conserva dati dei pazienti: tutto arriva dall'API autenticata sulla stessa origine, quindi senza il Worker ogni vista resta vuota.
  • L'autorizzazione vive nel Worker, non nell'interfaccia: nascondere un pulsante non è mai il controllo.
  • Appuntamento, visita e bozza di fatturazione sono record separati, così una prenotazione che non avviene non lascia né note cliniche né addebiti.
  • Il riepilogo del paziente tiene solo ciò che conta tra una visita e l'altra (allergie, patologie, farmaci, altezza e peso, anamnesi) invece di moduli vuoti permanenti per i parametri vitali.
  • Il registro si ferma alle bozze interne: non emette fatture fiscali, non genera PDF e non incassa pagamenti, che restano al processo autorizzato della clinica.
Codice privato

L'immagine mostra pazienti e staff inventati, da un'esecuzione in locale.