Mirobody
The canonical registry of human health — roughly two thousand standardized indicators, clinical and lifestyle, resolved into one language.
Quanta gente c'è oggi nei pronto soccorso di Palermo? Dati pubblici degli ospedali, in un'unica pagina.
Translation pending
HealthJavaScript · TypeScriptGitHub @PalermoHubOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Pazienti in attesa, sovraffollamento e codici colore dei pronto soccorso di Palermo, dai dati pubblici degli ospedali
Translation pending
Loading the full README.
Read the full README ↗Tempi di attesa dei Pronto Soccorso di Palermo città, letti ogni 5 minuti dalle fonti pubbliche degli ospedali, con mappa, schede per presidio, storico e analisi.
Stato: in produzione (Worker palermo-ps su Cloudflare, sito + API + storico + archivio CSV).
Un Cloudflare Worker con cron ogni 5 minuti interroga 5 fonti, normalizza in Lettura (src/types.ts) e salva lo snapshot in D1 (tabella stato). Lo stesso Worker serve l'API e il sito statico in web/.
/api/refresh tramite un binding a sé stesso (SELF): lo scraping parte da una richiesta, così rispetta il placement aws:eu-south-1 (Milano). Riuniti e ARNAS Civico non rispondono a IP di datacenter esteri.acquisitaAlle e ultimoErrore: un dato vecchio non passa mai per fresco (src/freschezza.ts). Fonti congelate e incoerenze sono segnalate (src/coerenza.ts, src/salute.ts)./api/* pubblici sono pensati per il sito: rispondono solo a richieste della stessa origine o di palermohub.opendatasicilia.it e siciliahub.github.io (con CORS), con un limite di 30 richieste al minuto per IP (src/origine.ts, binding LIMITE in wrangler.toml). Export CSV e archivio grezzo richiedono EXPORT_TOKEN.src/grezzo.ts), così i parser si possono rieseguire sul passato. Le catture ok più vecchie di 7 giorni sono potate (resta la prima per fonte/chiave/giorno), gli errori restano 90 giorni.| Fonte | Formato | PS | File |
|---|---|---|---|
| Ospedali Riuniti | HTML (classi CSS) | Villa Sofia, Cervello adulti, Cervello pediatrico | src/sources/riuniti.ts |
| ARNAS Civico | HTML + testo | Civico, Di Cristina | src/sources/civico.ts |
| Policlinico | JSON (2 endpoint) | Policlinico | src/sources/policlinico.ts |
| ASP Palermo | HTML | Ingrassia | src/sources/asp.ts |
| Fatebenefratelli | JSON (POST) | Buccheri La Ferla | src/sources/buccheri.ts |
Regola dei dati: se la fonte non pubblica un valore è null, mai 0 inventato né totali calcolati da noi
(eccezione dichiarata: pazientiTotali Buccheri/Policlinico e sovraffollamentoPct Policlinico).
web/)index.html: mappa Leaflet, schede per presidio, filtro adulti/pediatrico, riepilogo, pulsante 112 e disclaimer «non sostituisce il 118».grafici.html: analisi (presenti nelle ultime ore, fasce con meno gente, chi aspetta di più, permanenza, sovraffollamento, affidabilità dei dati), esportazione dei grafici in PNG e sezione Scarica i dati (CSV di giorni, settimane e mesi).privacy.html: informativa (cosa resta nel browser, posizione, servizi di terzi). I font (Archivo, Figtree) sono in web/fonts/, senza richieste a Google Fonts. Anche le librerie (Leaflet, MapLibre, html2canvas) sono locali, in web/vendor/ (licenze in web/vendor/LICENZE.md). Restano esterni solo le mappe (OpenFreeMap/OSM) e i CSV su GitHub: se ne cambi uno, aggiorna l'informativa.docs/embed.md.palermo-ps-storico (migrazioni in migrations/)..github/workflows/backup-storico.yml gira ogni notte (02:30 UTC): scarica il CSV di ieri in dati/storico/AAAA/, ricalcola heatmap.json, crea con scripts/aggrega.mjs i CSV di settimane e mesi chiusi e riscrive indice.json, poi fa commit e push. Il sito legge questi file da raw.githubusercontent.com, senza nuovo deploy (cache ~5 min). Le colonne sono descritte in dati/storico/descrizione-colonne.csv.scripts/backup-d1.sh (vedi docs/backup-grezzo.md)..github/workflows/controllo-fonti.yml (ogni 30 minuti) legge /api/stato (serve EXPORT_TOKEN) e apre una issue con label allarme-dati se una fonte è irraggiungibile da almeno 30 minuti, ferma («congelata») o vecchia, se il Worker non aggiorna da oltre 20 minuti o se il sito non risponde. L'issue si chiude da sola quando il problema rientra. Anche il backup notturno apre e chiude la sua issue. Le regole sono in src/allarmi.ts. Per ricevere l'email, metti il repo in «Watch» su GitHub.
npm test · npm run typecheck · npm run dev (anteprima locale su http://localhost:8787) · npm run deploy
.github/workflows/deploy.yml: a ogni push su main esegue typecheck e test, poi wrangler deploy.
Secret nel repo: CLOUDFLARE_API_TOKEN (template "Edit Cloudflare Workers"), CLOUDFLARE_ACCOUNT_ID, EXPORT_TOKEN (stesso del Worker, per il backup notturno).
Se l'Action non parte, il deploy si fa a mano con npm run deploy.
Copyright © 2026 OpenDataSicilia.