| Misura | Dettaglio |
|---|---|
| Cifratura dei file | Documenti, report e certificati di firma sono cifrati prima di essere scritti (Fernet: AES-128-CBC + HMAC-SHA256). Nomi file casuali, senza dati dell’ospite. Rotazione chiavi: aggiungere la nuova chiave in testa a FASAS_ENCRYPTION_KEYS, le vecchie restano per decifrare. |
| Integrità dei file | Ogni versione ha l’impronta SHA-256 del contenuto, verificata a ogni apertura. |
| Accesso ai file | I file non sono mai serviti direttamente: passano da viste autenticate, con permesso e registrazione nell’audit (consultazione / download). |
| Backup | Archivio cifrato AES-256-GCM a blocchi con chiave separata (FASAS_BACKUP_KEY); il formato rileva blocchi alterati, riordinati o troncati. Manifest con SHA-256 di ogni componente, verifica automatica dopo ogni backup. |
| Database su Supabase | Dopo ogni migrate viene attivata la Row Level Security su tutte le tabelle e revocato ogni privilegio ai ruoli anon e authenticated: le API REST di Supabase non possono leggere i dati. Connessione con TLS (DATABASE_SSL_REQUIRE=1). |
| Trasporto | In produzione: HTTPS obbligatorio, HSTS, cookie Secure/HttpOnly, SameSite=Lax, protezione CSRF, X-Frame-Options: DENY, nosniff. |
| Dispositivi (senza rete) | Pacchetto del turno e registrazioni in attesa cifrati nel browser con AES-256-GCM; la chiave si apre solo con la password dell’utente (PBKDF2) e si chiude all’uscita e per inattività. Il service worker non memorizza pagine né dati sanitari. Dettagli in NOTIFICHE_E_SENZA_RETE.md. |
| Notifiche push ed email | Contenuto push cifrato end-to-end (RFC 8291); per default né push né email contengono nomi o dati sanitari, solo il tipo di avviso. |
FASAS_ALLOWED_NETWORKS limita l’accesso agli indirizzi della comunità (es. rete della struttura o VPN).FASAS_2FA_REQUIRED_ROLES), facoltativa per gli altri; con
FASAS_2FA_TRUSTED_NETWORKS diventa obbligatoria per tutti gli accessi da fuori rete e si attiva solo dalla rete
della struttura. Segreto cifrato, ogni codice vale una volta, 10 codici di recupero (salvati come impronta),
reimpostazione da parte dell’amministratore con audit. I codici sbagliati contano per il blocco; il token API
richiede il codice. L’area tecnica (/gestione-tecnica/) non ha un accesso proprio.FASAS_2FA_TRUSTED_NETWORKS) login, sessione e token API vengono rifiutati; alternativa alla VPN per chi non
usa il FASAS da casa.FASAS_LOGIN_MAX_FAILURES tentativi falliti (default 5) l’utente è bloccato per FASAS_LOGIN_LOCKOUT_MINUTES; anche l’endpoint token dell’API applica il blocco.Ogni ruolo ha il proprio cruscotto e un menu costruito sui suoi permessi: chi non ha un permesso non vede la voce, il pulsante o la scheda corrispondente, e se apre l’indirizzo a mano riceve un accesso negato (403). Anche le notifiche arrivano solo a chi ha il permesso di vedere ciò a cui rimandano.
| Ruolo | Cruscotto | Cosa fa (spec. §2) |
|---|---|---|
| Operatore | Il mio turno | registrazioni giornaliere, farmaci somministrati, eventi, parametri, diario, checklist, chiusura del turno |
| Coordinatore sanitario | Coordinamento | gestisce le cartelle ospiti, modifica i protocolli sanitari, valida le informazioni sanitarie (SOS, PAI), autorizza le modifiche oltre la finestra, magazzino, visite, report |
| Medico | Area medica | consulta la cartella clinica, prescrive e modifica le terapie, valida gli SOS, registra diagnosi e allergie, firma digitalmente i documenti sanitari |
| Amministratore | Pannello di sistema | gestisce utenti e permessi, configura il sistema, i protocolli e le notifiche, controlla audit log e log accessi, gestisce i backup – non consulta le cartelle cliniche |
| Amministrativo | Amministrazione | ruolo aggiuntivo per l’ufficio amministrativo: presenze per la rendicontazione, rette, prospetti e incassi – vede nome, codice fiscale e giorni di presenza/assenza, non la cartella clinica |
| Permesso (esempi) | Operatore | Coordinatore | Medico | Amministratore | Amministrativo |
|---|---|---|---|---|---|
| Consultare le cartelle degli ospiti | ✔ | ✔ | ✔ | ✖ | ✖ |
| Somministrazioni, parametri, diario, registro, checklist, chiusura turno | ✔ | ✔ | ✖ | ✖ | ✖ |
| Lavorare senza rete sul dispositivo | ✔ | ✔ | ✖ | ✖ | ✖ |
| Registrare eventi clinici | ✔ | ✔ | ✔ | ✖ | ✖ |
| Annullare eventi e registrazioni | ✖ | ✔ | ✖ | ✖ | ✖ |
| Prescrivere / modificare terapie | ✖ | ✔ (trascrizione) | ✔ | ✖ | ✖ |
| Validare farmaci SOS | ✖ | ✔ | ✔ | ✖ | ✖ |
| Modificare dati oltre la finestra di 24 h | ✖ | ✔ | ✔ | ✖ | ✖ |
| Firmare digitalmente | ✖ | ✖ | ✔ | ✖ | ✖ |
| Creare e approvare il PAI | ✖ | ✔ | ✖ | ✖ | ✖ |
| Nuovi ospiti, archiviazione, esportazione, importazione dal cartaceo | ✖ | ✔ | ✖ | ✖ | ✖ |
| Magazzino farmaci, report | ✖ | ✔ | ✖ | ✖ | ✖ |
| Presenze del mese (correzione e chiusura) | ✖ | ✔ | ✖ | ✖ | ✔ |
| Rette, prospetti, incassi | ✖ | ✖ | ✖ | ✖ | ✔ |
| Calendario turni: consultare, chiedere ferie e cambi | ✔ | ✔ | ✖ | ✖ | solo consultazione |
| Calendario turni: pianificare, pubblicare, approvare | ✖ | ✔ | ✖ | ✖ | ✖ |
| Protocolli automatici (regole) | ✖ | ✔ | ✖ | ✔ | ✖ |
| Utenti, configurazione, impostazioni notifiche, audit, log accessi, backup | ✖ | ✖ | ✖ | ✔ | ✖ |
L’amministratore può concedere o negare singoli permessi a singoli utenti (pagina Utenti → Permessi), per
esempio dare a un medico l’approvazione del PAI; ogni variazione è nell’audit log. I permessi predefiniti dei ruoli
vengono riallineati a ogni migrate (e da manage.py fasas_setup); le eccezioni per singolo utente restano.
NOME_FILE=/percorso, segreti di Docker) o dalle
credenziali di systemd (LoadCredential=) invece che dal .env; vale anche per DATABASE_URL..env perso), /salute/ risponde 503 e indica l’impronta della chiave giusta, prima che
nascano dati cifrati con la chiave sbagliata. python manage.py fasas_chiavi verifica fa lo stesso controllo.python manage.py fasas_chiavi busta <file> crea un file cifrato con una frase segreta
(scrypt + AES-256-GCM) con tutte le chiavi; stampa un foglio di custodia con le sole impronte. Conservare la busta in
due luoghi (cassaforte, gestore di password della direzione) e la frase separata. fasas_chiavi apri <file>
restituisce le righe del .env.FASAS_ENCRYPTION_KEYS, le vecchie restano in coda per decifrare.audit_auditlog): utente, data e ora, azione, oggetto, ospite, valore precedente e nuovo di ogni campo,
motivazione, IP, origine (web, API, job). Ogni voce contiene l’impronta SHA-256 della precedente.
UPDATE, DELETE e TRUNCATE anche a chi accede direttamente al database.manage.py audit_verify (e il job notturno) ricalcola la catena: un’alterazione viene individuata e notificata.Controllo di salute /salute/, job sorvegliati e registro errori senza dati sanitari: vedi
MONITORAGGIO.md. Dipendenze bloccate con impronte e controllate ogni settimana (Dependabot) e a ogni
modifica (pip-audit, bandit nella CI).
Il sistema produce firme PAdES (PDF firmati), verificabili con qualsiasi software di verifica.
.p12/.pfx)
conservato cifrato, con passphrase da inserire a ogni firma.FASAS_SIGNATURE_LEVEL).FASAS_SIGNATURE_TRUST_ROOTS anche la catena di fiducia. Guida completa in FIRMA_DIGITALE.md.I dati trattati sono dati relativi alla salute (art. 9 GDPR) di persone vulnerabili. Oltre alle misure tecniche:
Bozze di DPIA, registro, informative e nomine in gdpr/.
Non aprire issue pubbliche: contattare direttamente il responsabile del progetto.