Vai al contenuto
Dove andremo a finire? Cerca Comune

Come facciamo la stima

Metodo e fonti: documento tecnico

In breve. Per ogni Comune calcoliamo il ritmo medio annuo di variazione della popolazione negli ultimi 10 anni (dal 2015 al 2025) e lo prolunghiamo nel tempo. L'anno mostrato è quello in cui, a questo ritmo, il Comune avrebbe la metà degli abitanti del 2025. L'intervallo viene dagli stessi calcoli sui periodi di 5 e 20 anni. Oltre il 2100 non mostriamo un anno. È una stima “a questo ritmo”, non una previsione: non tiene conto di età, nascite e migrazioni future. Per i Comuni sopra i 5.000 abitanti mostriamo accanto la previsione ufficiale ISTAT, dove esiste.

Parametri usati in questa versione dei dati

ParametroValoreStato
finestra_anni10deciso
finestre_intervallo[5,20]deciso
base_metaanno_basedeciso
anno_tetto2100deciso
soglia_piccolo_comune1000deciso
livello_avviso_piccolo_comunealtodeciso
riquadro_istattruedeciso
anno_base2025deciso
gestione_scorporiterritorio_combinatodeciso
arrotondamento_annovicinodeciso
soglia_stabile_pct0.1deciso
nomi_esiti{"calo":"calo","calo_lento":"calo_lento","stabile":"stabile","crescita":"crescita","gia_dimezzato":"gia_dimezzato","dati_insufficienti":"dati_insufficienti"}deciso
dati_2019nessuna_correzionedeciso
regole_intervallov1deciso
livelli_avviso{"salto_anomalo_serie":"medio","finestre_discordi":"medio","nato_da_scissione":"medio","finestra_modificata":"medio","variazione_territoriale_parziale":"info","territorio_ceduto_a_nuovo_comune":"info","serie_ricostruita_da_fusione":"info","salti_nella_finestra":"medio","salto_spiegato_serie":"info","salti_spiegati_nella_finestra":"info","dato_incerto_fonti":"medio"}deciso
min_anni_serie5provvisorio
anno_fisso_base_meta2002provvisorio

Dati generati il 24 ottobre 2026 (schema 0.7).

Fonti: file scaricati (ISTAT e Dipartimento per le politiche di coesione)

Mappa Aree Interne 2020: fonte

Classificazione dei Comuni e tempi in auto dal Polo più vicino: Mappa Aree Interne 2020, Dipartimento per le politiche di coesione (DPCoe), elaborazione del Nucleo di valutazione e analisi per la programmazione (NUVAP). Pagina originale della Mappa Aree Interne 2020.

Documento tecnico completo della pipeline (METODOLOGIA.md)

Metodologia – Conto alla rovescia dello spopolamento (v0.4; v2 e v3 nelle sezioni 9 e 11)

Aggiornata il 24 ottobre 2026 (ora di Roma). Tutto eseguito in locale, nulla pubblicato. Parametri in pipeline/config.yaml (sezione metodo). Sono tutti decisi da Domenico (riferiti da Comuni CEO il 24/10/2026), tranne due parametri tecnici non coperti dalle decisioni (min_anni_serie, anno_fisso_base_meta). Scelte tecniche DT-1…DT-10: config decisioni_progetto e data/site/meta.json. Tutte decise (DT-6 Astro, DT-8 Satori + resvg, DT-9 indice JSON unico con ricerca tollerante, DT-10 Python) tranne DT-7 hosting, rimandato alla pubblicazione. La distinzione è scritta in config (decisi, provvisori) e in ogni scheda.

1. Fonti (pubbliche, senza login, licenza CC BY 4.0 ISTAT)

URL, data/ora di download, byte e SHA-256 di ogni file: data/raw/manifest.json. Download del 24/10/2026, 12:51-12:57.

Chiave Contenuto URL Formato / copertura Ultima modifica sul server (ora di Roma)
situas_elenco Elenco Comuni vigenti alla data di esecuzione (SITUAS report 61) https://situas-servizi.istat.it/publish/reportspooljson?pfun=61&pdata=GG/MM/AAAA JSON, 7.894 Comuni al 24/10/2026 servizio dinamico
situas_variazioni Variazioni amministrative e territoriali dal 1991 (SITUAS report 129) https://situas-servizi.istat.it/publish/reportspooljson?pfun=129&pdata=01/01/1991 JSON, 2.356 eventi 1991-2026 (ultimo: 14/05/2026) servizio dinamico
elenco_xlsx Elenco Comuni ISTAT (controllo incrociato) https://www.istat.it/storage/codici-unita-amministrative/Elenco-comuni-italiani.xlsx XLSX, foglio "CODICI al 21_02_2026", 7.894 Comuni 26/02/2026 17:17
rcs Ricostruzione popolazione al 1° gennaio 2002-2025 https://demo.istat.it/data/rcs/Dati_RCS.zip ZIP 96 MB, 48 CSV 18/12/2025 10:28
posas_2026 Popolazione al 1/1/2026 – stima: il titolo del file dice "stima" https://demo.istat.it/data/posas/POSAS_2026_it_Comuni.zip CSV 30/03/2026 23:50
rbd Ricostruzione del bilancio demografico 2001-2018 (dataset completo; pagina https://demo.istat.it/app/?i=RBD) https://demo.istat.it/data/ricostruzione/RBD-Dataset.csv.zip ZIP 21 MB → CSV 136 MB, ;; colonne: Anno, Sesso, Popolazione inizio/fine periodo, Nati, Morti, Iscritti/Cancellati interno ed estero, Acquisizioni di cittadinanza, Cittadinanza, Codice comune (classificazione 2019, 7.914 Comuni). Disponibili anche i file per anno RBD-Dataset-<2001…2018>.csv.zip 27/01/2023 14:42
p2_2019 … p2_2025 Bilanci demografici annuali (P2): controlli e cause dei salti https://demo.istat.it/data/p2/P2_<anno>_it_Comuni.zip CSV, 7 file 2019-2025 (2025 provvisorio). Colonne diverse tra anni: 2019 ha "Aggiustamento statistico", 2025 "Iscritti/Cancellati per altri motivi" 2025: 06/03/2026 13:52
ppc_* (20 file) Previsioni comunali 2025-2050, scenario mediano https://demo.istat.it/data/previsionicomunali/Previsioni_comunali_popolazione_per_eta-Comuni_<Regione>.csv.zip CSV per regione, classi di 5 anni 31/08/2026 08:52

Note sulle fonti:

  • Bilanci prima del 2019: i file P2 annuali esistono solo dal 2019 (P2_2018_it_Comuni.zip e precedenti: HTTP 404; le vecchie pagine demo.istat.it/bil<anno>/ reindirizzano alla pagina P2 attuale, che offre solo 2019-2025). Per il 2002-2018 l'ISTAT pubblica il bilancio ricostruito (RBD), coerente con la RCS: inizio periodo = RCS per tutti i Comuni e tutti gli anni (verificato). Differenze solo dove cambiano i confini (RBD usa i confini 2019: Bollate/Baranzate 2003, Mappano 2016) e a fine 2018 per i 4 Comuni con RCS 1/1/2019 incoerente. Il bilancio originale anagrafico 2002-2018 (con iscrizioni/cancellazioni "per altri motivi") non risulta più scaricabile da demo.istat.it.
  • Attenzione su RBD: per costruzione (Nota metodologica, https://demo.istat.it/data/ricostruzione/Nota_metodologica_Ricostruzione2002_2018.pdf) la differenza tra anagrafe e censimenti è ridistribuita come iscrizioni/cancellazioni migratorie "statistiche" aggiuntive. Quindi RBD non ha componente residua (fine − inizio − naturale − migratorio = 0 sempre) e un salto attribuito a migrazioni nel bilancio ricostruito può essere un trasferimento reale o una rettifica statistica.
  • Il CSV Elenco-comuni-italiani.csv usato nella v0.1 è fermo al 26/01/2024 (header Last-Modified). Non contiene le variazioni 2025-2026. Nella v0.2 non è più usato: il riferimento è SITUAS, e l'XLSX serve come controllo incrociato. Il file Variazioni-amministrative-e-territoriali-dal-1991.zip (fermo all'8/1/2025) è stato sostituito dal report SITUAS 129.
  • Per gli endpoint SITUAS publish va inviato l'header Referer: https://situas.istat.it/web/: senza, la risposta è vuota. È il servizio pubblico del portale ISTAT ("Dettaglio API"), senza login. Il catalogo SITUAS dichiara una validità dei report fino al 31/05/2026, ma la chiamata alla data del 24/10/2026 risponde ed è coerente con l'XLSX: c'è una sola differenza, Vallecrosia → "Vallecrosia al mare" (14/05/2026), assente dall'XLSX del 21/02/2026.
  • Previsioni ISTAT: i nomi esatti dei 20 file sono stati ricavati dai link della pagina https://demo.istat.it/app/?i=PPC (es. Valle d'Aosta = ..._Comuni_Valle_dAosta-Vallee_dAoste.csv.zip; il nome "ovvio" ..._Valle_d_Aosta... dà 404). Tutti i 20 file sono disponibili. Coprono 2.374 Comuni, cioè capoluoghi e Comuni sopra 5.000 abitanti al 1/1/2025. Per gli altri ~5.500 Comuni l'ISTAT non pubblica previsioni (le fornisce solo su richiesta, aggregate: escluso, perché vietato spendere e contattare enti).

2. Comuni vigenti e crosswalk dei codici (02_codici_comuni.py)

  • Comuni vigenti = SITUAS report 61 alla data data_riferimento_elenco (default "oggi"): 7.894.
  • Variazioni 2025-2026 rilevanti, da SITUAS:
    • Lirio incorporato in Montalto Pavese (31/01/2026);
    • fusione Castegnero + Nanto = Castegnero Nanto, 024129 (21/02/2026);
    • riordino delle province sarde dal 1/1/2026: 377 Comuni hanno cambiato codice (es. Sassari 090064 → 112050, Nuoro 091051 → 114027);
    • cessione Cividale del Friuli → Prepotto (23/04/2026), Bressanone → Varna (12/07/2025);
    • cambi di nome: Murisengo Monferrato, Tripi - Abakainon, Vallecrosia al mare.
  • Archi "codice → codice" del Comune intero: ES (estinzione per fusione/incorporazione), AP (cambio provincia), RN (rinumerazione). Non si usano CS/AQES: duplicano ES e, per gli scorpori, CS elenca anche i Comuni d'origine che continuano a esistere (verificato: i 15 CS senza ES corrispondente sono tutti scorpori, es. Mappano, Misiliscemi, Baranzate).
  • Risoluzione a una data: un codice osservato alla data D viene seguito solo lungo gli eventi con data ≥ D, fino a un codice vigente. Serve perché alcuni codici sardi sono cambiati più volte (2005, 2016, 2026).
  • Eventi parziali (AQ/CE cessioni di territorio, CECS scorpori): non spostano popolazione, generano avvisi.

3. Serie storica (03_serie_popolazione.py)

  • 1° gennaio 2002-2025: somma di Totale su tutte le cittadinanze (RCS). Il 1/1/2026 viene da POSAS (riga età 999): è marcato stima solo se il titolo del file lo dice; se un giorno RCS copre lo stesso anno, POSAS viene ignorato.
  • Ogni codice dell'anno A è risolto al Comune vigente con gli eventi dal 1/1/A. Risultato: 0 codici non risolti; totali nazionali identici prima e dopo la riconduzione, per ogni anno.
  • Le fonti 2025/2026 usano i 7.896 codici al 1/1/2025 (codici sardi vecchi): sono ricondotti ai 7.894 vigenti.
  • Serie incomplete (solo scorpori): Mappano dal 2017, Baranzate dal 2004, Misiliscemi dal 2022.

4. Calcolo (metodo.py, 04_dimezzamento.py)

4.1 Parametri

Parametro CLI Valore Stato
finestra_anni (W) --finestra 10 deciso
finestre_intervallo --finestre-intervallo 5,20 [5, 20] deciso
base_meta --base-meta anno_base deciso (alternative: massimo_storico, anno_fisso)
anno_tetto --anno-tetto 2100 deciso
soglia_piccolo_comune / livello avviso --soglia-piccolo-comune 1000 / "alto" deciso
riquadro_istat (config) true deciso
anno_base (B) --anno-base 2025, con switch automatico al 2026 (4.5) deciso (6)
gestione_scorpori --gestione-scorpori territorio_combinato deciso (7/a)
arrotondamento_anno --arrotondamento vicino deciso (8/b)
soglia_stabile_pct + nomi_esiti --soglia-stabile-pct 0,1 + esiti calo / calo_lento / stabile / crescita deciso (c)
dati_2019 (config) nessuna_correzione deciso (d): i 4 valori RCS 1/1/2019 incoerenti sono solo segnalati
regole_intervallo (config, etichetta) "v1" = regole in 4.3 deciso
livelli_avviso (config) medio: salto_anomalo_serie, finestre_discordi, nato_da_scissione, finestra_modificata; info: variazione_territoriale_parziale, territorio_ceduto_a_nuovo_comune, serie_ricostruita_da_fusione deciso
min_anni_serie --min-anni-serie 5 provvisorio (tecnico): sotto i 5 anni di serie propria si usa il territorio combinato. Oggi non scatta mai, perché con territorio_combinato si usa già il territorio unito
anno_fisso_base_meta --anno-fisso-base-meta 2002 provvisorio (tecnico): usato solo con base_meta = anno_fisso, quindi inattivo con le scelte decise

Le varianti lanciate da CLI sono registrate in parametri_usati.json e nelle schede (sovrascritti_da_cli; anno_base_origine = config / switch_automatico / cli).

4.2 Formule ed esiti

  • r = (P(B) / P(B−W))^(1/W) − 1
  • obiettivo = P(B)/2 (default deciso). Con le alternative: max P(t)/2 sulla parte valida della serie, oppure P(anno_fisso)/2.
  • anno decimale = B + ln(obiettivo / P(B)) / ln(1 + r), arrotondato all'anno più vicino (vicino; l'alternativa difetto resta disponibile).
  • Esiti (decisione (c)), con soglia s = soglia_stabile_pct = 0,1% l'anno:
    • stabile: |r| ≤ s. Un calo più lento dello 0,1% l'anno conta quindi come stabile;
    • crescita: r > +s;
    • con r < −s: calo se l'anno arrotondato è ≤ tetto (il tetto si confronta con l'anno arrotondato, cioè quello mostrato), altrimenti calo_lento (in calo, ma il dimezzamento cade oltre il 2100);
    • solo calo ha un anno; calo_lento, stabile e crescita non ne hanno;
    • gia_dimezzato (solo con le basi alternative) e dati_insufficienti.
  • tendenza ∈ {calo, stabile, crescita} con la stessa soglia: coincide con l'esito tranne che calo_lento e calo hanno entrambi tendenza "calo".
  • I codici esportati si possono rinominare in config.yaml → nomi_esiti (oggi identità).
  • Scissioni / scorpori (decisione 7): territorio_combinato. Se lo scorporo cade nella finestra (anno scorporo ≥ B − W), il tasso è quello del territorio unito (Comuni d'origine + nuovo Comune), calcolato su B − W … B e applicato alla popolazione propria di ciascun Comune. Tutti i Comuni del gruppo hanno quindi lo stesso tasso in quella finestra. Se lo scorporo è prima dell'inizio della finestra, la serie è già omogenea e si usa il tasso proprio. Oggi riguarda 7 Comuni nella finestra di 10 anni: Mappano 2017 con Borgaro, Caselle, Leini, Settimo; Misiliscemi 2021 con Trapani. L'alternativa dopo_scorporo resta disponibile da CLI.

4.3 Intervallo (deciso: finestre 5 e 20, min-max, regole "v1" approvate il 24/10/2026)

Si calcola solo se l'esito principale (10 anni) è calo, altrimenti tipo = non_applicabile. Per ogni finestra dell'intervallo (5 e 20):

  • esito calo → il suo anno entra nel min-max;
  • esito calo_lento, stabile o crescita → estremo superiore aperto (aperto_sopra = true, anno_max = null, limite_aperto = 2100). Testo suggerito: "intorno al 2091, tra il 2085 e oltre il 2100";
  • esito dati_insufficienti → finestra esclusa (finestre_escluse).

L'anno principale è sempre dentro l'intervallo: se cade fuori dal min-max delle finestre 5/20, l'intervallo viene esteso fino a includerlo (esteso_per_principale = true, oggi in 841 Comuni). L'estremo inferiore non è mai aperto. tipo ∈ {chiuso, aperto_sopra, puntuale (min = max), non_applicabile}.

Esempi reali (ISTAT RCS, B = 2025, arrotondamento all'anno più vicino):

  • Roccaforte del Greco: 2039, tra il 2037 e il 2041;
  • Pietrapertosa: 2059 (2058-2062);
  • Civita: 2077 (2065-2077);
  • Enna: 2091, tra il 2091 e oltre il 2100;
  • Nuoro: 2098, tra il 2086 e oltre il 2100;
  • Morterone: 2065, oltre il 2100 come estremo superiore, perché su 5 anni cresce.

Parametri usati registrati in parametri_usati.json.

4.4 Piccoli Comuni, riquadro ISTAT, dati per il grafico (decisi)

  • Sotto i 1.000 abitanti nell'anno base: avviso piccolo_comune con livello: "alto". La scheda ha livello_attenzione = il livello più alto tra i suoi avvisi. Anno e intervallo sono esposti come per gli altri Comuni.
  • Riquadro ISTAT: riquadro_istat.mostra = true per i 2.374 Comuni con previsione pubblica, che sono tutti sopra i 5.000 abitanti nel 2025. Contiene fonte, licenza, link alla pagina ISTAT, scenario, anni e popolazioni iniziale e finale, variazione %, serie annuale 2025-2050 e la nostra estrapolazione allo stesso anno, per il confronto. Se manca: mostra = false con il motivo. Caso particolare: Castegnero Nanto (5.842 abitanti) è nato nel 2026 da due Comuni sotto i 5.000, quindi non ha previsione.
  • Dati per il grafico: ogni scheda ha proiezione (anno base, popolazione base, tasso ed esito per finestra 5/10/20, obiettivo, tetto) e salti_anomali (lista sempre presente). La curva per la finestra W è pop(anno) = pop_base · (1 + tasso_annuo[W])^(anno − anno_base); la fascia è compresa tra le curve 5 e 20 (vedi SCHEMA_SCHEDA).

4.5 Anno base e passaggio automatico al 2026 (decisione 6)

L'anno base è 2025, l'ultimo dato definitivo (RCS). pipeline/01b_anno_base.py (eseguito dopo il download, con --rete) controlla se l'ISTAT ha reso definitivo il dato al 1/1/2026. Prima, se sul server sono cambiati Last-Modified o dimensione rispetto a manifest.json, riscarica P2 2025, POSAS 2026 e RCS.

Tre segnali verificabili nei file ISTAT (formati osservati sui file definitivi degli anni precedenti):

Segnale Provvisorio (oggi) Definitivo
S1 bilancio P2 2025 colonna Informazioni con flag p su tutte le 7.896 righe; colonna "Popolazione al 31 dicembre" (non "censita") nessun flag p e colonna "Popolazione censita al 31 dicembre" (come P2 2019-2024)
S2 POSAS 2026 titolo "…al 1° gennaio 2026 (stima)" titolo senza "(stima)" (come POSAS 2024 e 2025: "…per età, sesso e stato civile al 1° gennaio 2025")
S3 RCS Dati_RCS.zip arriva al 1/1/2025 contiene Dati_cittadinanza_2026.csv

Verifica fatta sui dati: POSAS 2025 definitivo = RCS 2025 per tutti i 7.896 codici; RCS 2025 è uscita il 15-18/12/2025, POSAS 2025 definitivo il 19/01/2026.

Regola:

  • switch automatico a 2026 se S3 è definitivo, oppure se S1 e S2 sono entrambi definitivi e coerenti (POSAS 2026 = P2 2025 "censita al 31 dicembre" per almeno il 99% dei codici, quota_coerenza_min);
  • solo segnalazione (decisione = da_verificare, nessun cambio) se solo uno tra S1 e S2 è definitivo, o se non sono coerenti;
  • con anno_base_switch.attivo: false si segnala soltanto.

Esito in data/processed/stato_anno_base.json, in meta.json e nelle schede (parametri.anno_base_origine). Oggi (24/10/2026): tutti e tre i segnali dicono "provvisorio" → anno base 2025. Con lo switch, common.completa_metodo usa B = 2026 per tutti i passi. --anno-base da CLI ha sempre la precedenza.

Limite: i segnali si basano sui formati usati finora dall'ISTAT, non su un flag documentato. Se l'ISTAT cambia formato, il controllo non scatta (nessun cambio): il caso è coperto dalla segnalazione e dai test su file finti (tests/test_anno_base.py).

5. Previsioni ISTAT e confronto (05_previsioni_istat.py)

  • Popolazione totale per Comune e anno 2025-2050 (somma delle classi di età, esclusa la riga "Tutte le età"), riportata ai codici vigenti (per la Sardegna i codici 2025 diventano quelli 2026).
  • Se un Comune vigente nasce dalla fusione di Comuni di cui solo alcuni hanno la previsione, la previsione è esclusa per evitare territori parziali. Oggi non succede.
  • Confronto al 2050 sulla finestra principale (tasso a 10 anni) (riepilogo in previsioni_istat_stato.json):
    • 2.374 Comuni, base 2025 identica a RCS per tutti;
    • la nostra variazione 2025-2050 è in media 2,8 punti meno negativa di quella ISTAT (mediana 2,6);
    • il segno (calo o crescita) coincide nell'80% dei casi;
    • in calo secondo l'ISTAT: 1.740 Comuni, secondo noi: 1.498;
    • scarto più alto in Sardegna (+10,6 punti), Basilicata (+7,7) e Trentino-AA (+7,4); negativo in Valle d'Aosta (−5,4), Liguria (−4,4) e Piemonte (−3,0).

6. Controlli (06_controlli.py, test in tests/)

  • SITUAS e XLSX: stessi 7.894 codici.
  • RCS 1/1/2025 = P2 "popolazione al 1° gennaio" per tutti i 7.896 codici sorgente; P2 "31 dicembre 2025" = POSAS 1/1/2026 per tutti.
  • Totali nazionali conservati in ogni anno.

7. Salti anomali nelle serie (07_salti_anomali.py, spec 4.4)

Soglie in config.yaml → salti_anomali. Un salto tra il 1/1 di t−1 e il 1/1 di t è anomalo se |variazione| > 8% E |variazione| > 150 abitanti. Si cerca poi una causa verificabile (mai dedotta), in quest'ordine:

  1. Evento SITUAS sul Comune nell'anno t−1 o t (anni_tolleranza_evento = 1): scorporo, cessione_acquisizione_territorio, fusione_incorporazione (anche se cambia il numero di codici sommati).
  2. Incoerenza tra fonti ISTAT:
    • incoerenza_rcs_p2: valore RCS al 1/1 di t−1 o di t ≠ "popolazione censita al 1° gennaio" del P2 dello stesso anno (sempre controllata);
    • incoerenza_rcs_rbd: per t−1 ≤ 2018, se non c'è un evento SITUAS, inizio/fine del bilancio ricostruito ≠ serie RCS.
  3. Bilancio dell'anno t−1: la prima componente che copre almeno il 50% del salto (quota_spiegazione):
    • 2019-2025, P2: variazione_territoriale_p2, revisione_anagrafica_o_censimento_p2 (componente residua: aggiustamento statistico / altri motivi), saldo_migratorio_p2, saldo_naturale_p2;
    • 2002-2018, bilancio ricostruito RBD: saldo_migratorio_rbd, saldo_naturale_rbd. Il dettaglio riporta interno/estero e l'avvertenza che i flussi ricostruiti includono quote statistiche.
  4. Altrimenti da_verificare.

Colonne di verifica:

  • verificata = una fonte spiega il salto;
  • origine_da_verificare = vero se la spiegazione è solo una componente del bilancio ricostruito (o manca): il salto è confermato dall'ISTAT, ma non sappiamo se sia un trasferimento reale o una rettifica statistica.

Pattern descrittivo (non è una causa): picco_isolato.

Componenti del bilancio bil_* e bil_fonte (p2/rbd). Nelle schede: salti_anomali (lista) e avviso salto_anomalo_serie (livello "medio").

Risultati al 24/10/2026: 118 salti in 91 Comuni. 23 cadono nella finestra principale 2015-2025.

Causa Salti
saldo_migratorio_rbd 95: erano tutti da_verificare. Il bilancio ricostruito conferma il salto; origine reale da verificare. 79 aumenti, quasi tutti nell'hinterland milanese/pavese/lodigiano e romano nel 2003-2009, con iscrizioni dall'interno dominanti; 16 cali (es. Cintano 2004→05 −207, con saldo interno −258; Paludi 2006→07, con saldo estero −663)
saldo_migratorio_p2 9 (saldo dall'estero dominante: Nicotera, Fiumefreddo Bruzio, Longobardi, San Lucido, Ordona, Soriano Calabro)
incoerenza_rcs_p2 (± rbd, ± fusione) 6 (Bonvicino, Casale Cremasco-Vidolasco, Torre de' Picenardi, …: valore RCS 1/1/2019 diverso da P2 2019 e dalla fine 2018 RBD. Decisione (d): solo segnalati)
scorporo 3 + 1 con fusione (Caselle T.se e Borgaro T.se 2017, Mappano; Trapani 2022, Misiliscemi; Bollate 2004, Baranzate)
revisione_anagrafica_o_censimento_p2 3 (Anzio 2020→21 +4.872, Campione d'Italia, Riace)
cessione_acquisizione_territorio 1 (Sant'Egidio del Monte Albino 2024→25, scambio con Pagani)
da_verificare 0

Nella finestra principale ci sono due salti con causa saldo_migratorio_rbd e origine da verificare:

  • Palma Campania 2017→18 (+1.739, saldo estero ricostruito +1.840);
  • Anzano di Puglia 2015→16 (−155, saldo estero −94, interno −44).

Confronto RCS/P2 su tutti i Comuni: coincidono sempre, tranne 4 Comuni nel 2019 (1.164 abitanti di differenza in totale) e 4 nel 2022 (1 abitante ciascuno). RCS/RBD: inizio periodo identico per tutti i Comuni e gli anni 2002-2018.

7b. Salti nelle finestre, incoerenze tra fonti, confronto provinciale (07b_finestre_confronti.py, v0.4)

Il metodo di calcolo non cambia. Si aggiungono tre diagnostiche:

  1. Incoerenze RCS/P2: per ogni anno con bilancio P2 si confronta la popolazione RCS al 1/1 con la "popolazione censita al 1° gennaio" del P2. Differenze: 2019 in 4 Comuni (Bonvicino +195 e Saluzzo −195; Casale Cremasco-Vidolasco +387 e Torre de' Picenardi −387: sembrano abitanti attribuiti al Comune sbagliato nella ricostruzione 2019), 2022 in 4 Comuni (±1). I valori non sono corretti; per il 2019 la scheda ha l'avviso dato_incerto_fonti.
  2. Salti nelle finestre: per ogni finestra (5/10/20) si elencano i salti anomali (sezione 7) con entrambi gli anni dentro la finestra e si ripete il calcolo su una serie con i salti neutralizzati, solo come prova di sensibilità (influenza: nessuna / anno_diverso / esito_diverso / non_valutabile). Poiché il tasso usa solo il primo e l'ultimo anno della finestra, un picco isolato in mezzo non cambia il risultato, mentre un gradino (revisione anagrafica, flusso migratorio eccezionale, scambio di territorio) lo cambia. Al 24/10/2026: finestra 5 anni: 10 Comuni (13 salti), esito diverso senza salti per 5; finestra 10 anni (principale): 17 Comuni (23 salti), esito diverso per 6 (Campione d'Italia, Palma Campania, Sant'Egidio del Monte Albino, Fiumefreddo Bruzio, Riace, Nicotera), anno diverso per 1 (Anzano di Puglia: 2048 → 2068), non valutabili 3 (Borgaro T.se, Caselle T.se, Trapani: territorio unito); finestra 20 anni: 78 Comuni (97 salti), esito diverso per 10, anno diverso per 7.
  3. Confronto provinciale: posizione del Comune nella provincia per tasso annuo della finestra principale (1 = calo più rapido) e, tra i Comuni con un anno, per anno di dimezzamento; mediane provinciali; conteggio degli esiti; i due Comuni prima e dopo in classifica. Nessun giudizio: è un ordinamento dei numeri.

7c. Avviso o nota: criterio di "causa verificata" (v0.5, decisione Comuni CEO 2026-10-24)

Ogni salto anomalo ha il campo causa_verificata (nelle schede). Regola esatta (07_salti_anomali.py::causa_verificata, elenco in config.yaml → salti_anomali.cause_verificate):

causa_verificata = True se e solo se

  1. almeno una causa è tra: saldo_migratorio_p2 (migrazione documentata dal bilancio P2, 2019+), cessione_acquisizione_territorio (scambio/cessione di territorio, evento SITUAS AQ/CE), variazione_territoriale_p2 (unità per variazioni territoriali nel bilancio P2), scorporo (scorporo / nascita di un nuovo Comune registrato in SITUAS, CECS), revisione_anagrafica_o_censimento_p2 (componente residua del bilancio P2: revisione anagrafica documentata);
  2. e nessuna causa è da_verificare né un'incoerenza tra fonti (incoerenza_rcs_p2, incoerenza_rcs_rbd);
  3. e nessuna causa viene dal bilancio ricostruito (*_rbd), cioè origine_da_verificare è falso.

Effetto nelle schede (solo presentazione, nessun dato corretto, metodo invariato):

  • causa NON verificata → avvisi salto_anomalo_serie / salti_nella_finestra (livello medio), come prima;
  • causa verificata → note salto_spiegato_serie / salti_spiegati_nella_finestra (livello info) che riportano la causa. La prova di sensibilità della finestra principale va con l'avviso se la finestra contiene almeno un salto non verificato, altrimenti con la nota. fusione_incorporazione da sola non è nell'elenco (non compare mai da sola: è sempre con scorporo o con un'incoerenza tra fonti). Gli avvisi sono ordinati: dato_incerto_fonti in cima, poi alto > medio > info.

Conteggi (dati del 2026-10-24): 118 salti in 91 Comuni; causa verificata 17 salti in 14 Comuni (saldo migratorio P2 9, scorporo 4, revisione anagrafica P2 3, scambio di territorio 1); non verificata 101 salti in 77 Comuni (saldo migratorio RBD 95, incoerenze tra fonti 6). Nessun Comune ha entrambi i tipi.

Risultato "senza il salto" (v0.5)

Per i Comuni in cui la prova di sensibilità sulla finestra principale cambia esito o anno (Campione d'Italia, Palma Campania, Sant'Egidio del Monte Albino, Fiumefreddo Bruzio, Riace, Nicotera, Anzano di Puglia) la scheda mostra accanto al risultato calcolato anche quello «senza il salto (anni del salto)» (risultato_senza_salti). È solo un confronto: il risultato principale, l'anno nel titolo, l'immagine social e l'indice restano quelli calcolati sui dati ISTAT così come sono.

Licenza delle elaborazioni

Le nostre elaborazioni (schede e immagini) sono rilasciate con licenza CC BY 4.0 (decisione di Domenico, 2026-10-24), come i dati ISTAT di base. Citazione: «Elaborazione «[nome del sito]» su dati ISTAT (licenza CC BY 4.0)», con il nome preso da site.config.mjs.

8. Limiti

  1. È un'estrapolazione "a questo ritmo", non una previsione. Rispetto all'ISTAT la nostra estrapolazione dà cali più lenti per i Comuni medio-grandi del Sud e delle Isole (non coglie l'invecchiamento).
  2. Sensibilità alla finestra: 2.973 Comuni hanno una tendenza diversa (calo / stabile / crescita) tra le finestre 5/10/20 (avviso finestre_discordi).
  3. Cessioni parziali di territorio (230 Comuni coinvolti dal 1991) non sono corrette, solo segnalate. Non esistono dati pubblici sulla popolazione trasferita.
  4. Il dato 2026 è una stima ISTAT (usato solo nella serie, non nel calcolo, finché lo switch non scatta). RCS e RBD 2002-2018 sono ricostruzioni: possono differire dai dati anagrafici pubblicati all'epoca.
  5. SITUAS è un servizio dinamico: la stessa chiamata in date diverse può dare risultati diversi. Per questo il file scaricato è conservato con SHA-256.
  6. Le previsioni ISTAT esistono solo per 2.374 Comuni e si fermano al 2050.
  7. Salti anomali: nessuno resta senza spiegazione, ma per 95 la spiegazione è solo la componente migratoria del bilancio ricostruito: l'origine reale resta da verificare (origine_da_verificare). Le serie non vengono corrette: si segnala soltanto.
  8. Con il tetto al 2100 e la finestra di 10 anni, 3.363 Comuni sono calo_lento (in calo, senza anno).

9. v2 – Nascite, bambini ed età (10_download_v2.py, 11_nascite_eta.py, 13_indicatori_v2.py)

Decisioni D2-1…D2-15 di docs/DECISIONI_V2.md, approvate da Domenico (via Comuni CEO, 24/10/2026) con una sola modifica: le soglie di D2-5 e D2-7 scendono da 20 a 5. Parametri in config.yaml → v2.metodo (decisioni_progetto DT-11…DT-15).

Fonti. ISTAT, bilancio demografico P2 2019-2025 (nati, morti, popolazione a inizio/fine anno; il 2025 è provvisorio, colonna «Informazioni» = p); ISTAT, popolazione residente per età e sesso POSAS 1° gennaio 2019-2026 (il 2026 è una stima; età 0-100, dove 100 = «100 e più»). File scaricati con data e SHA-256 (data/raw/manifest.json). Codici ricondotti ai Comuni vigenti con lo stesso risolutore della v1 (fusioni sommate). Per le scissioni si usa il territorio unito (Trapani + Misiliscemi, separati il 20/02/2021): avviso territorio_unito_nascite.

Indicatori per Comune (blocco nascite della scheda, schema 0.6):

  • Nati: serie 2019-2025; numero principale = nati dell'ultimo anno disponibile (2025, provvisorio). Sotto i 1.000 abitanti (al 1° gennaio 2025) il numero principale è la media 2023-2025, scritta anche come somma («0,3 l'anno, 1 in tutto»). Se la media 2023-2025 è sotto 5 nati l'anno: avviso piccoli_numeri_nascite (info), nessuna percentuale sui nati.
  • Nati ogni 1.000 abitanti: nati / popolazione media dell'anno ((inizio+fine)/2) × 1.000. Sotto 1.000 abitanti su 3 anni (somma nati / somma popolazioni medie). Provincia e Italia: aggregati (somma dei nati / somma delle popolazioni) sullo stesso periodo del Comune. Italia: 6,0 (2025) e 6,2 (2023-2025).
  • Bambini 0-5 e 0-14: 1° gennaio 2019 e 1° gennaio 2026 (stima). Variazione percentuale solo se nel 2019 erano almeno 5; sotto 5 solo numeri assoluti; con base tra 5 e 19 la nota «numeri piccoli: la percentuale può cambiare molto da un anno all'altro».
  • Età media: media delle età con la classe aperta 100+ contata 100,5; età x contata x + 0,5.
  • Indice di vecchiaia: persone 65+ ogni 100 tra 0 e 14 anni, solo con almeno 5 under 15 (nota tra 5 e 19); altrimenti i due conteggi.
  • Morti per nato: anno singolo sopra 1.000 abitanti, somme 2023-2025 sotto; con 0 nati si scrive «N morti, nessun nato».
  • Previsione 0-14 al 2050: solo per i Comuni con previsione ISTAT (scenario mediano), arrotondata (a 10 sotto 1.000, a 100 sopra), etichettata come previsione ISTAT.
  • Fasce del grafico: 0-5, 6-14, 15-64, 65-79, 80+; 2019 e 2026 (stima).

Arrotondamenti: all'unità o al decimale più vicino, con 0,5 verso l'alto (aritmetica esatta).

Effetto della soglia 5 (invece di 20) (data/processed/v2_soglie.json): la percentuale 0-5 compare per 7.691 Comuni invece di 6.861 (+830); la percentuale 0-14 per 7.861 invece di 7.600 (+261); l'indice di vecchiaia per 7.840 invece di 7.506 (+334), su 7.894.

Dati sospetti (D2-15), segnalati e mai corretti. Criterio oggettivo: 0 nati nell'anno provvisorio (2025) con una media di almeno 5 nati nei 3 anni precedenti (2022-2024). Avviso di livello medio zero_nati_provvisorio_da_verificare. Casi: Palazzo Canavese (TO, media 6,0), Dolcedo (IM, 5,3), Giba (SU, 8,7). Restano anche le 4 incoerenze RCS/POSAS del 2019 (avviso dato_2019_incerto_nascite): il confronto v2 usa POSAS.

Frase-gancio (D2-13). zero_nati (403 Comuni) se l'ultimo anno ha 0 nati; altrimenti nati_indice (7.487) con l'indice di vecchiaia o nati_conteggi (4) con i conteggi se l'indice non è calcolabile. Ogni frase porta anno e «provvisorio»/«stima».

Classifiche (D2-10). «0 nati nel 2024» (ultimo anno definitivo, almeno 100 abitanti al 1° gennaio 2024): 332 Comuni; «0 nati in ciascuno degli anni 2023-2025» (almeno 100 abitanti al 1° gennaio 2025): 68. Un Comune fuso conta zero solo se tutti i Comuni d'origine avevano zero nati. Elenchi di fatti, senza giudizi.

Prodotti. Schede (nascite), data/site/senza_nascite.json, immagine social v2 (/og/<versione>/v2/<codice>.png, lotti da 250; versione in site.config.mjs).

Limiti v2. Il 2025 è provvisorio e la popolazione per età 2026 è una stima: entrambi cambieranno. Con pochi nati le variazioni sono in gran parte casuali. POSAS e RCS possono differire per il 2019 (4 Comuni). Le età singole oltre 100 non sono distinte.

10. Mappa (14_mappa.py, site/public/mappa.js)

Decisioni M-1…M-6 approvate. Confini ISTAT al 1° gennaio 2026, versione generalizzata (CC BY 4.0), 7.896 poligoni: 3 codici non più vigenti (018082 → 018094, 024027 e 024071 → 024129) sono uniti al Comune attuale → 7.894 poligoni, uno per Comune vigente (la pipeline si ferma se non coincidono). Semplificazione mapshaper -simplify 3% weighted keep-shapes, quantizzazione 1e4 (TopoJSON 1,42 MB, compresso in rete ~0,5 MB) e confini regionali (17 kB). Disegno con d3-geo su canvas (proiezione conica conforme), nessun servizio esterno, nessuna libreria di tile. Colori: anno di dimezzamento (≤2050, 2051-2075, 2076-2100, calo lento, stabile con trama, crescita) e due scale sequenziali (indice di vecchiaia, nati ogni 1.000 abitanti) verificate con la simulazione di protanopia, deuteranopia e tritanopia (Machado 2009) e distanza CIEDE2000 ≥ 10 tra le classi (tests/test_daltonismo.py). Interazione: tocco → dati e link alla scheda; ricerca; zoom con due dita, rotella o pulsanti; link condivisibile (#c=<codice>&v=<indicatore>&z=…).

11. v3 – Quanto è lontano (15_download_v3.py, 16_aree_interne.py, 17_esplora_v3.py, 18_indicatori_v3.py)

Decisioni D3-1…D3-7 di docs/DECISIONI_V3.md, approvate da Domenico (via Comuni CEO, 24/10/2026), tutte come raccomandate. Parametri in config.yaml → v3.metodo (decisioni_progetto DT-16…DT-22). Fonte (D3-0, DT-23, chiuso il 28/10/2026). Domenico ha approvato l'uso della Mappa così com'è: il sito cita la fonte originale (DPCoe, elaborazione NUVAP) con il link alla pagina della Mappa, senza indicare una licenza che la fonte non dichiara per i dati. Copia delle note legali del sito DPCoe e SHA-256 in manifest.json (ai2020_note_legali). Pagina tecnica: #fonte-mappa-aree-interne.

Fonte. Dipartimento per le politiche di coesione (NUVAP), Mappa Aree Interne 2020: elenco dei Comuni con classe (A Polo, B Polo intercomunale, C Cintura, D Intermedio, E Periferico, F Ultraperiferico), minuti medi in auto verso il Polo più vicino (rete stradale di ottobre 2019, partenza 7:30-9:30) e Comune di destinazione; confini al 30/9/2020, 7.903 righe. Un Polo ha insieme ospedale con DEA di I livello, stazione almeno Silver e offerta completa di scuole superiori: non è il tempo per il pronto soccorso più vicino (limite scritto in ogni scheda). Soglie delle classi: 27,7, 40,9 e 66,9 minuti (v3.metodo.soglie_classi, controllate contro il file in 16_aree_interne.py).

Comuni attuali (D3-2). Codici 2020 → vigenti con lo stesso risolutore della v1. 9 Comuni nati da fusioni dopo il 2020: minuti = media delle parti pesata per abitanti del censimento 2020, classe ricalcolata con le soglie, etichetta «media pesata per abitanti delle parti, nostro calcolo» ed elenco delle parti con i valori ufficiali (la pipeline si ferma se una fusione contiene un Polo). Misiliscemi (081025, nato nel 2021 da Trapani): nessun dato, con nota. Risultato: 7.893 Comuni con dato, 1 senza.

Poli e Cintura (D3-3). Per i Poli (A) e i Poli intercomunali (B) niente minuti, ma «è un Polo» (B: insieme ai Comuni con la stessa destinazione; se il file non li indica, frase generica senza nomi). Per la Cintura i minuti si mostrano con la classe. Classi dei Comuni attuali: Polo 241, Cintura 3.820, Intermedio 1.926, Periferico 1.524, Ultraperiferico 382.

Confronti e classifica (D3-4). Provincia e Italia: media dei minuti pesata per abitanti (censimento 2020; Poli = 0) e quota di abitanti in Comuni oltre 40,9 minuti. Italia: 16,9 minuti per abitante, 9,1% oltre la soglia. Classifica «dal più lontano» solo tra i Comuni non Polo con almeno 1.000 abitanti nel 2025 (5.630 Comuni), con pari merito espliciti; in provincia solo se ci sono almeno 10 Comuni in classifica.

Mappa (D3-5). Indicatore «Minuti dal Polo più vicino (2019)»: 5 classi ufficiali + «nessun dato». Colori provvisori (la scala sequenziale già verificata in tests/test_daltonismo.py), in attesa del rifacimento grafico. Al tocco: classe, minuti e Polo.

Frase-gancio e condivisione (D3-6). «Da X servono in media N minuti di auto per arrivare a Y, il Comune più vicino che ha insieme un ospedale con DEA, una stazione e tutte le scuole superiori» (varianti per fusi, Poli, Poli intercomunali, nessun dato). Nessuna nuova immagine social: l'immagine condivisa resta quella della v1.

Anomalie: segnalate, mai corrette. Comuni su un'isola (31; rilevati dai confini ISTAT: tutti i pezzi di territorio non collegati alle tre parti di terraferma più grandi, esclusa l'exclave di Campione d'Italia); valore più alto d'Italia (Lampedusa e Linosa, 317,6 minuti: il dato include la traversata ed è lasciato com'è); capoluoghi che non sono Poli nel 2020 (Matera, Enna, Isernia, Nuoro); province senza Polo (EN, IS, MT, NU, OG, compresa l'Ogliastra); Comuni fusi dopo il 2020; Misiliscemi.

Incrocio con la v1 (D3-7). Solo descrittivo, mai causa: nel sito due numeri affiancati, senza rapporto «X volte», sempre con «È un confronto, non una causa: i Comuni lontani sono anche più piccoli e più anziani». Variazione della popolazione 2015 → 2025 (ISTAT, 1° gennaio; 7.893 Comuni con dato, fusi con la media pesata): oltre 40,9 minuti −6,4% (1.906 Comuni), fino a 40,9 minuti −1,5% (5.987 Comuni). Per classe:

Classe Comuni Variazione aggregata 2015-2025 Tasso annuo mediano Metà entro il 2100 (v1)
Polo 241 −1,5% −0,19% 1,7%
Cintura 3.820 −0,8% −0,29% 16,2%
Intermedio 1.926 −3,7% −0,67% 37,3%
Periferico 1.524 −6,2% −0,95% 52,4%
Ultraperiferico 382 −7,6% −1,06% 56,8%

Output. data/processed/v3_indicatori.json, v3_riepilogo.json; schede schema 0.7 (blocco distanza, solo aggiunte); valori.json della mappa (classe_ai, minuti_ai, polo_ai, …). Test: tests/test_v3_dati.py, tests/test_v3_indicatori.py (minuti, classi, fusi, media italiana e anomalie confrontati con il file grezzo).