Scheda Radio Reader — iliad / TDC
Questo skill fornisce le istruzioni per estrarre dati da Schede Radio PDF in formato iliad/TDC e compilare il file Excel TSSR_B40.
Struttura del documento Scheda Radio
Le Schede Radio iliad/TDC sono documenti tecnici PDF che documentano un sito di trasmissione radio. Il documento segue tipicamente questa struttura:
- Intestazione — Logo iliad/TDC, titolo "Scheda Radio" o "Scheda Tecnica Sito Radio", data
- Anagrafica sito — Codice sito, nome, indirizzo, comune, provincia, coordinate GPS
- Dati tecnici impianto — Altezze, struttura portante, tipo palo
- Apparati radio — Produttore, modello antenna, settori, frequenze
- Note e firme — Data sopralluogo, tecnico, validazione
Regole di estrazione campi
Consulta references/field-mappings.md per i pattern regex completi e gli esempi di varianti di layout.
Codice Sito
Formato canonico: [A-Z]{2}\d{5}_\d{3} (es. RM00126_003, MI00342_001, TO00789_002)
- Cercare prima in testata documento, poi in box "Codice Sito" o "Site ID"
- Può apparire anche come
RM 00126_003 (con spazio) — rimuovere lo spazio
- Alternativa senza underscore:
RM00126003 → normalizzare a RM00126_003
Nome Sito
- Solitamente su riga separata dopo il codice sito, o in campo "Nome Sito" / "Site Name"
- Formato tipico:
Città-Quartiere o Comune-Localita (es. Acilia-Monti San Paolo)
- Può contenere trattini, spazi, caratteri accentati
Coordinate GPS (WGS84)
- Latitudine: compresa tra 35.0 e 47.5 per l'Italia
- Longitudine: compresa tra 6.5 e 18.5 per l'Italia
- Formati accettati: decimale (
41.823456), gradi-minuti-secondi (41°49'24.44"N)
- Etichette: "Lat", "Latitudine", "N:", "LAT", "φ"
- Se in DMS, convertire in decimale:
gradi + minuti/60 + secondi/3600
Comune e Provincia
- Comune: nome intero senza abbreviazioni (es.
Roma, Milano, Fiumicino)
- Provincia: sigla 2 lettere maiuscole (es.
RM, MI, TO)
- Spesso compaiono insieme:
Roma (RM) o Roma - RM o in righe separate
Data Sopralluogo
- Formati accettati:
gg/mm/aaaa, gg-mm-aaaa, gg.mm.aaaa
- Etichette: "Data", "Data sopralluogo", "Data visita", "Del"
- Normalizzare sempre a formato
gg/mm/aaaa
Indirizzo
- Riga completa con via/piazza/strada, numero civico, eventuale CAP
- Etichette: "Indirizzo", "Via", "Indirizzo sito", "Ubicazione"
- Includere tutto tranne comune e provincia (già in celle separate)
Produttore Antenna
- Valori tipici:
Huawei, Nokia, Ericsson, Kathrein, CommScope, RFS, Andrew
- Etichette: "Produttore", "Fornitore", "Manufacturer", "Brand"
- Estrarre solo il nome del produttore, non il modello
Modello Antenna
- Codice alfanumerico (es.
APXVAAA4X4D65R, 742265, BSTA4518BM)
- Etichette: "Modello", "Tipo antenna", "Model", "Part number"
Base Antenna (m)
- Altezza base dell'antenna dal suolo, in metri
- Etichette: "Base Antenna", "Base ant.", "H base", "Altezza base", "Quota base"
- Estrarre solo il numero (es.
24.5, 30)
Altezza Centro Elettrico (m)
- Altezza del centro elettrico / centro radiante dal suolo, in metri
- Etichette: "Centro Elettrico", "H el.", "ACE", "Altezza CE", "Centro Radiante", "H centro"
- Estrarre solo il numero (es.
27.5, 33.2)
Mappatura celle Excel — Foglio1
| Cella |
Campo sorgente |
Formato atteso |
| F6 |
Nome sito |
Testo libero (es. "Acilia-Monti San Paolo") |
| F7 |
Codice sito |
Codice normalizzato (es. "RM00126_003") |
| E5 |
Comune + Provincia |
"Comune (SiglaProv)" (es. "Roma (RM)") |
| E8 |
Data sopralluogo |
"gg/mm/aaaa" |
| F16 |
Comune |
Solo nome comune |
| F17 |
Indirizzo completo |
Via, numero, eventuale CAP |
| N16 |
Sigla provincia |
2 lettere maiuscole (es. "RM") |
| C34 |
Nota tecnica |
Stringa formattata (vedi sotto) |
Formato nota tecnica C34
Lat: XX.XXXXXX - Lon: XX.XXXXXX | Produttore: XXXX | Modello: XXXX | Base ant.: XX m | H el.: XX m
Esempio reale:
Lat: 41.823456 - Lon: 12.345678 | Produttore: Huawei | Modello: APXVAAA4X4D65R | Base ant.: 24.5 m | H el.: 27.5 m
Gestione celle mergiate in Excel
Il file TSSR_B40 contiene spesso celle mergiate. Se ws["F6"] = valore non funziona:
# Approccio alternativo per celle mergiate
from openpyxl.utils import get_column_letter
def set_merged_cell(ws, cell_ref, value):
"""Scrive in una cella anche se è mergiate."""
cell = ws[cell_ref]
# Trovare la cella master del merge range
for merge_range in ws.merged_cells.ranges:
if cell.coordinate in merge_range:
# Scrivi nella cella in alto a sinistra del range
ws.cell(row=merge_range.min_row,
column=merge_range.min_col).value = value
return
# Cella non mergiate: scrittura diretta
ws[cell_ref] = value
Dipendenze Python richieste
pip install pdfplumber openpyxl --break-system-packages -q
Alternativa per PDF problematici:
pip install pypdf --break-system-packages -q
1---2name: scheda-radio-reader3description: This skill should be used when the user mentions "Scheda Radio", "TSSR", "B40", "iliad", "TDC", "sito radio", "antenna", "sopralluogo radio", or asks to "compilare il TSSR", "estrarre dati dal PDF", "leggere la scheda radio", "compilare il B40". Also triggers on mentions of codice sito (pattern like RM00126_003), Scheda Tecnica Sito Radio, or any telecom site documentation workflow.4---56# Scheda Radio Reader — iliad / TDC78Questo skill fornisce le istruzioni per estrarre dati da Schede Radio PDF in formato iliad/TDC e compilare il file Excel TSSR_B40.910## Struttura del documento Scheda Radio1112Le Schede Radio iliad/TDC sono documenti tecnici PDF che documentano un sito di trasmissione radio. Il documento segue tipicamente questa struttura:13141. **Intestazione** — Logo iliad/TDC, titolo "Scheda Radio" o "Scheda Tecnica Sito Radio", data152. **Anagrafica sito** — Codice sito, nome, indirizzo, comune, provincia, coordinate GPS163. **Dati tecnici impianto** — Altezze, struttura portante, tipo palo174. **Apparati radio** — Produttore, modello antenna, settori, frequenze185. **Note e firme** — Data sopralluogo, tecnico, validazione1920## Regole di estrazione campi2122Consulta `references/field-mappings.md` per i pattern regex completi e gli esempi di varianti di layout.2324### Codice Sito2526Formato canonico: `[A-Z]{2}\d{5}_\d{3}` (es. `RM00126_003`, `MI00342_001`, `TO00789_002`)2728- Cercare prima in testata documento, poi in box "Codice Sito" o "Site ID"29- Può apparire anche come `RM 00126_003` (con spazio) — rimuovere lo spazio30- Alternativa senza underscore: `RM00126003` → normalizzare a `RM00126_003`3132### Nome Sito3334- Solitamente su riga separata dopo il codice sito, o in campo "Nome Sito" / "Site Name"35- Formato tipico: `Città-Quartiere` o `Comune-Localita` (es. `Acilia-Monti San Paolo`)36- Può contenere trattini, spazi, caratteri accentati3738### Coordinate GPS (WGS84)3940- Latitudine: compresa tra 35.0 e 47.5 per l'Italia41- Longitudine: compresa tra 6.5 e 18.5 per l'Italia42- Formati accettati: decimale (`41.823456`), gradi-minuti-secondi (`41°49'24.44"N`)43- Etichette: "Lat", "Latitudine", "N:", "LAT", "φ"44- Se in DMS, convertire in decimale: `gradi + minuti/60 + secondi/3600`4546### Comune e Provincia4748- Comune: nome intero senza abbreviazioni (es. `Roma`, `Milano`, `Fiumicino`)49- Provincia: sigla 2 lettere maiuscole (es. `RM`, `MI`, `TO`)50- Spesso compaiono insieme: `Roma (RM)` o `Roma - RM` o in righe separate5152### Data Sopralluogo5354- Formati accettati: `gg/mm/aaaa`, `gg-mm-aaaa`, `gg.mm.aaaa`55- Etichette: "Data", "Data sopralluogo", "Data visita", "Del"56- Normalizzare sempre a formato `gg/mm/aaaa`5758### Indirizzo5960- Riga completa con via/piazza/strada, numero civico, eventuale CAP61- Etichette: "Indirizzo", "Via", "Indirizzo sito", "Ubicazione"62- Includere tutto tranne comune e provincia (già in celle separate)6364### Produttore Antenna6566- Valori tipici: `Huawei`, `Nokia`, `Ericsson`, `Kathrein`, `CommScope`, `RFS`, `Andrew`67- Etichette: "Produttore", "Fornitore", "Manufacturer", "Brand"68- Estrarre solo il nome del produttore, non il modello6970### Modello Antenna7172- Codice alfanumerico (es. `APXVAAA4X4D65R`, `742265`, `BSTA4518BM`)73- Etichette: "Modello", "Tipo antenna", "Model", "Part number"7475### Base Antenna (m)7677- Altezza base dell'antenna dal suolo, in metri78- Etichette: "Base Antenna", "Base ant.", "H base", "Altezza base", "Quota base"79- Estrarre solo il numero (es. `24.5`, `30`)8081### Altezza Centro Elettrico (m)8283- Altezza del centro elettrico / centro radiante dal suolo, in metri84- Etichette: "Centro Elettrico", "H el.", "ACE", "Altezza CE", "Centro Radiante", "H centro"85- Estrarre solo il numero (es. `27.5`, `33.2`)8687## Mappatura celle Excel — Foglio18889| Cella | Campo sorgente | Formato atteso |90|-------|---------------|----------------|91| F6 | Nome sito | Testo libero (es. "Acilia-Monti San Paolo") |92| F7 | Codice sito | Codice normalizzato (es. "RM00126_003") |93| E5 | Comune + Provincia | "Comune (SiglaProv)" (es. "Roma (RM)") |94| E8 | Data sopralluogo | "gg/mm/aaaa" |95| F16 | Comune | Solo nome comune |96| F17 | Indirizzo completo | Via, numero, eventuale CAP |97| N16 | Sigla provincia | 2 lettere maiuscole (es. "RM") |98| C34 | Nota tecnica | Stringa formattata (vedi sotto) |99100### Formato nota tecnica C34101102```103Lat: XX.XXXXXX - Lon: XX.XXXXXX | Produttore: XXXX | Modello: XXXX | Base ant.: XX m | H el.: XX m104```105106Esempio reale:107```108Lat: 41.823456 - Lon: 12.345678 | Produttore: Huawei | Modello: APXVAAA4X4D65R | Base ant.: 24.5 m | H el.: 27.5 m109```110111## Gestione celle mergiate in Excel112113Il file TSSR_B40 contiene spesso celle mergiate. Se `ws["F6"] = valore` non funziona:114115```python116# Approccio alternativo per celle mergiate117from openpyxl.utils import get_column_letter118119def set_merged_cell(ws, cell_ref, value):120 """Scrive in una cella anche se è mergiate."""121 cell = ws[cell_ref]122 # Trovare la cella master del merge range123 for merge_range in ws.merged_cells.ranges:124 if cell.coordinate in merge_range:125 # Scrivi nella cella in alto a sinistra del range126 ws.cell(row=merge_range.min_row,127 column=merge_range.min_col).value = value128 return129 # Cella non mergiate: scrittura diretta130 ws[cell_ref] = value131```132133## Dipendenze Python richieste134135```bash136pip install pdfplumber openpyxl --break-system-packages -q137```138139Alternativa per PDF problematici:140```bash141pip install pypdf --break-system-packages -q142```