# 03 — Report import DVR

**Data import**: 2026-05-07
**Sorgenti**: `-mat/ANAGRAFICA_SEDI ALLEANZA_struttura.xlsx` + cartella `-mat/DVR/` (800 file)

## Risultati finali

| Stato | File | % |
|---|---:|---:|
| ✅ ok | **800** | **100.00%** |

Tutti i file importati. L'ultimo caso difficile (`TORRE ANNUNZ._CENTRO AGENZIALE_Rev01_31122021.docx`) aveva l'immagine interna `word/media/image6.jpeg` con CRC corrotto, danneggiata già nel sorgente e non recuperabile da Word stesso al resave. Risolto sostituendo l'immagine danneggiata con un placeholder JPEG 1×1 nello zip e importando la copia patchata: tutto il resto del documento (testi, tabelle, anagrafica) è stato letto correttamente.

**⚠️ Nota operativa**: l'immagine 6 del DVR Torre Annunziata (probabile planimetria) andrà ricaricata manualmente dall'operatore quando il gestionale sarà online — è l'unica cosa che si è effettivamente persa.

## Pipeline a 3 step

L'import si è svolto in tre fasi progressive:

**1. Match per filename** (729 ok). Lo script `import_dvr.py` parsa il filename `<NOME_AG>_<SEDE>_Rev<NN>_<DDMMYYYY>.{xlsx,docx}` e cerca in anagrafica. Strategie: match esatto → riconoscimento accorpamenti `(... TW)` → varianti naming → SAN/SANT.

**2. Match "smart" per contenuto** (62 file recuperati in totale, in 2 ondate). Lo script `rematch_no_match.py` apre i file rimasti senza match e legge **città + indirizzo** dal foglio Dati. Score = 1 base + 2 se civico esatto + (1-4) per parole comuni della via + (-1/+1) per provincia. Match accettato automaticamente se score ≥ 4 e candidato univoco. Il city matching usa fuzzy difflib (≥ 0.85), startswith e contains, e strippa sigle provincia "BZ"/"FI" finali senza parentesi.

**3. Override manuali** (8 file): casi dove l'algoritmo aveva indizi forti ma score basso (es. città "Pastena" che è una frazione di Salerno → in anagrafica risulta solo "SALERNO"; o tabelle docx con città vuota; o accenti `Nardò` vs `NARDO'`). Sono salvati in tabella `filename_overrides` con `reason` documentata.

I 2 file con doppia estensione `.pdf.xlsx` (PRATO/MONTEMURLO, SIENA/MONTALCINO) sono risultati **veri xlsx** rinominati per errore: dopo aver allargato il regex sono stati importati regolarmente.

Il file `CHIUSI_TORRITA DI SIENA_Rev01_02122024.xlsx` aveva il foglio chiamato `incendio dati generali` invece di `Incendio`: ho aggiunto alias di ricerca foglio nel parser.

Esempi di match smart utili (filename → match deciso da contenuto):

- `ABANO TERME_MONSELICE-ESTE` → indirizzo `Via Matteotti 1, ESTE (PD)` → matcha `22399ML` ABANO TERME/MONSELICE (l'anagrafica ha `MONSELICE` ma la sede è effettivamente a Este).
- `BOLOGNA CENTRO_IR EMILIA` → `Via Milazzo 5, BOLOGNA` → matcha `38001IR` Ispettorato Regionale Emilia Romagna.
- `PALERMO EST_CENTRO AGENZIALE` → `Passaggio Lincoln 13, Palermo` → matcha `3800BR` PALERMO CENTRO (PALERMO EST TW)/BRANCACCIO.
- `VENEZIA-MESTRE_CENTRO AGENZIALE` → `Via Allegri 29` → matcha `5800_ _` VENEZIA/AGENZIA GENERALE.

Tutti i match smart sono salvati in tabella `filename_overrides` con punteggio e motivazione, riproducibili.

## Volumi DB a regime

| Tabella | Record |
|---|---:|
| Sedi anagrafica | 796 |
| DVR (sedi compilate) | 793 |
| Righe Pericoli | ~67.000 |
| Righe Valutazione | ~33.000 |
| Misure miglioramento (col H) | ~24.000 |
| Documentazione incendio | ~11.700 |
| Azioni piano miglioramento | ~6.000 |
| Combo Pericoli (auto-create) | ~4.200 |
| Filename overrides (smart match) | 69 |

## Casi degni di nota risolti automaticamente

Lo smart match ha riconciliato silenziosamente situazioni che richiedevano giudizio:

- **Accorpamenti storici**: file `AGROPOLI_*` → anagrafica `CILENTO (AGROPOLI TW)`. Il cliente ha mantenuto l'anagrafica con i nomi nuovi ma i file DVR conservano i vecchi.
- **Provincia errata nei file**: `RIMINI/VILLA VERUCCHIO` ha provincia "(RI)" nel file (Rieti) mentre quella corretta è "(RN)" (Rimini). Match preso comunque per via+civico esatto.
- **Frazioni e suffissi cittadini**: `Guidonia` (file) ↔ `GUIDONIA MONTECELIO` (anagrafica), `Acquaviva` ↔ `ACQUAVIVA DELLE FONTI`, `Signa` ↔ `LASTRA A SIGNA`.
- **Typo di battitura**: `S. **A**agata di Militello` (con doppia 'a') matchato via fuzzy difflib.
- **Sigle provincia attaccate al nome città**: `Ortisei BZ` (senza parentesi) recuperato.
- **Diacritici**: `Nardò` (file con accento) ↔ `NARDO'` (anagrafica con apostrofo).
- **Foglio Excel con nome non standard**: `CHIUSI_TORRITA DI SIENA.xlsx` ha il foglio `incendio dati generali` invece di `Incendio` — gestito con alias nel parser.
- **Doppia estensione**: `.pdf.xlsx` accettata dal regex come xlsx normale.

## File con problemi residui

Nessuno: tutti gli 800 file sono stati importati.

## Anomalie minori sull'anagrafica (importate con segnalazione)

Tre sedi avevano dati incompleti nel sorgente xlsx — sono state importate con il campo `note_import` valorizzato:

- **14699_ _** (CESENA / AGENZIA GENERALE): regione_geografica=#N/A nel sorgente
- **3000ST** (MESSINA CENTRO / SANTA TERESA RIVA): lat/lon mancanti
- **21599BC** (PALMI / BAGNARA CALABRA): CAP mancante

## Cosa proporre al cliente

1. **3 anomalie anagrafica** (sopra): chiedere CAP, coordinate e regione mancanti.
2. **(opzionale)** Far validare al cliente i 69 match smart applicati: la tabella `filename_overrides` contiene il filename originale, l'agenzia matchata e la motivazione, esportabile in CSV.
3. **(quando si entra in produzione)** Ricaricare manualmente la planimetria della sede Torre Annunziata, persa per corruzione fisica del file sorgente.
