MedBook
Cartella clinica elettronica self-hosted FHIR R4 + GDPR, per cliniche e medici di base in EU
- Stato
- WIP
- Licenza
- EUPL-1.2
- Categoria
- Healthcare
- Aggiornato
Stato del progetto
Descrizione
MedBook è un sistema di cartella clinica elettronica (EHR) self-hosted progettato per cliniche piccole-medie, ambulatori specialistici e medici di base in area EU che vogliono possedere i propri dati pazienti senza dipendere da SaaS cloud (USA-based). L'architettura è Clean Architecture 4-layer Spring Boot 3.4 con domain JPA-agnostic, frontend Angular 21 SSR con standalone components e signals, persistenza PostgreSQL 16 con cifratura a riposo (pgcrypto) e audit trail completo via Hibernate Envers. Il modello dati è progettato attorno a FHIR R4 (Patient, Practitioner, Observation, Condition, MedicationStatement, AllergyIntolerance, Procedure, DiagnosticReport) con mapping JPA entity ↔ FHIR Resource via HAPI FHIR library, garantendo interoperabilità con sistemi sanitari nazionali. La sicurezza è first-class: Keycloak SSO con OIDC, RBAC (medico, infermiere, segretaria, admin), audit log immutabile per ogni accesso a dati paziente (chi, cosa, quando, perché), session timeout configurabile, password policy NIST 800-63B compliant. Il consenso GDPR è gestito tramite uno schema dedicato (granular consent per categoria di dati: anamnesi, allergie, esami, terapia farmacologica), con flag di revoca tracciabili e diritto all'oblio implementato come anonimizzazione (non hard delete, per non rompere referential integrity di prescrizioni e ricette). License EUPL-1.2 per allineamento esplicito allo standard EU public sector e compatibilità con FSE 2.0 italiano, AgID e direttive eHealth Network. Deploy via Docker Compose o systemd unit, target medico singolo o cluster di 2-20 utenti concorrenti. La filosofia è 'data sovereignty by design': i dati vivono sulla VPS del cliente, niente analytics esterne, niente telemetry, niente CDN per i bundle medici.
Funzionalità chiave
Modello dati FHIR R4 nativo
JPA entity mappate a FHIR Resource (Patient, Observation, Condition, MedicationStatement) via HAPI FHIR, export bundle JSON/XML standard.
Audit trail completo Hibernate Envers
Ogni accesso a dato paziente tracciato (operatore, timestamp, action, IP, reason), tabelle _aud immutabili, query timeline per audit GDPR.
Keycloak SSO + RBAC granulare
OIDC integration, 4 ruoli predefiniti (medico/infermiere/segretaria/admin), permission matrix configurabile, session timeout per ruolo.
GDPR consent management
Consenso granulare per categoria dati, revoca tracciabile, diritto all'oblio come anonimizzazione, export DSAR (Data Subject Access Request) automatico.
Frontend Angular 21 SSR
Standalone components, signals reattivi, OnPush change detection, prerender per pagine pubbliche (about, login), bundle ottimizzato per LTE.
Cifratura a riposo pgcrypto
Colonne sensibili (codice fiscale, anamnesi, allergie) cifrate con pgcrypto PGP_SYM_ENCRYPT, chiave master in KMS o env var hardened.
Backup automatici cifrati
pg_dump notturno cifrato GPG, retention configurabile, opzione Hetzner Storage Box, test restore guidato in documentazione.
Deploy systemd hardened
Unit systemd con NoNewPrivileges, ProtectSystem=strict, PrivateTmp, no Docker required, alternative Docker Compose se preferito.
Tech stack
- Spring Boot 3.4
- Java 21
- Angular 21
- PostgreSQL 16
- HAPI FHIR R4
- Keycloak
- Hibernate Envers
- pgcrypto
- Docker Compose
Casi d'uso
- Ambulatorio medico di base che vuole digitalizzare cartelle pazienti senza affidarsi a SaaS US-based
- Clinica specialistica piccola (2-20 utenti) con esigenza di FHIR R4 export per laboratori e specialisti esterni
- Studio dentistico o fisioterapista che gestisce anamnesi e piani terapeutici con vincoli GDPR stringenti
- Ricercatori medici che hanno bisogno di un EHR open-source per studi clinici locali piccoli
Roadmap
- v0.1.0 Pianificata
Core EHR: Patient + Practitioner + Audit
- Modello FHIR Patient + Practitioner mappato JPA
- CRUD endpoint con Keycloak SSO + RBAC base
- Hibernate Envers audit trail attivo su entity sensibili
- Frontend Angular login + dashboard paziente
- v0.5.0 Pianificata
Observation + Condition + Medication
- FHIR Observation + Condition + MedicationStatement
- Export FHIR bundle JSON/XML via endpoint /fhir/Patient/{id}/$everything
- Cifratura pgcrypto su colonne anamnesi/allergie
- GDPR consent UI + revoca + DSAR export
- v1.0.0 Pianificata
FSE 2.0 IT integration + Production deploy
- Connettore FSE 2.0 IT (gateway nazionale)
- Backup automatici cifrati + test restore
- Documentazione MkDocs completa + deploy guide VPS
- Audit di sicurezza pre-release + penetration test (deferito post-MVP)
A chi è rivolto
Quick Start
Avvia il progetto localmente in pochi comandi.
# Quick start (work-in-progress, repo non ancora pubblicato)
# git clone https://github.com/<tba>/medbook.git
# cd medbook
# cp .env.example .env # configura DB, Keycloak, KMS
# docker compose up -d # postgres + keycloak + medbook-backend + medbook-frontendContribuisci al progetto
MedBook è open source. Apri una issue, proponi una pull request o lascia una stella su GitHub: ogni contributo, anche piccolo, è benvenuto.
- ⭐ Lascia una stella se ti è utile
- 🐛 Segnala bug o proponi feature via issue
- 🔧 Invia pull request con fix o miglioramenti
- 📣 Condividi il progetto se lo trovi interessante