Skip to content

Risolutore POD italiani tramite API GSE dirette. Modulo Python + interfaccia web per identificare cabina primaria, fornitore e dati geografici.

License

Notifications You must be signed in to change notification settings

Zefram88/POD_RESOLVER

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

3 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ”Œ GSE POD Resolver

Risolutore di POD (Point of Delivery) tramite servizi GSE diretti

Python License Status

πŸ“‹ Descrizione

GSE POD Resolver Γ¨ uno strumento per risolvere i codici POD (Point of Delivery) italiani utilizzando direttamente le API GSE (Gestore Servizi Energetici). Il sistema fornisce informazioni complete su:

  • Cabina Primaria (Area Convenzionale)
  • Fornitore del servizio
  • Regioni e Province coinvolte
  • Comuni serviti dall'area

πŸš€ Caratteristiche

  • βœ… API Dirette GSE: Nessun scraping, solo chiamate API ufficiali
  • βœ… Dual Interface: Modulo Python + Interfaccia Web standalone
  • βœ… Dati ISTAT Completi: Mappature complete regioni/province italiane
  • βœ… Query Spaziali: Utilizzo di geometrie per identificare comuni
  • βœ… Zero Dependencies Esterne: Solo requests per HTTP
  • βœ… Context Manager: Gestione automatica delle risorse
  • βœ… Logging Completo: Tracciamento dettagliato delle operazioni

πŸ› οΈ Installazione

Prerequisiti

  • Python 3.8+
  • Accesso internet per le API GSE

Setup

# Clone del repository
git clone https://github.com/username/gse-pod-resolver.git
cd gse-pod-resolver

# Creazione virtual environment
python -m venv venv

# Attivazione (Windows)
venv\Scripts\activate

# Attivazione (Linux/Mac)
source venv/bin/activate

# Installazione dipendenze
pip install -r requirements.txt

πŸ“– Utilizzo

Modulo Python

from gse_pod_resolver import GSEPodResolver, PODResult

# Metodo 1: Utilizzo diretto
resolver = GSEPodResolver(timeout=45)
result = resolver.resolve_pod("IT001E12345678")
print(f"Fornitore: {result.fornitore}")
resolver.close()

# Metodo 2: Context manager (raccomandato)
with GSEPodResolver() as resolver:
    result = resolver.resolve_pod("IT001E12345678")
    print(f"Regioni: {result.regioni}")
    print(f"Province: {result.province}")
    print(f"Comuni: {result.comuni}")

# Metodo 3: Accesso diretto alle mappe ISTAT
resolver = GSEPodResolver()
print(f"Regione 5: {resolver.regioni_map[5]}")      # "Veneto"
print(f"Provincia 27: {resolver.province_map[27]}")  # "Venezia"
resolver.close()

Interfaccia Web

  1. Apri pod_resolver_web.html in qualsiasi browser moderno
  2. Inserisci il codice POD (es: IT001E12345678)
  3. Clicca "Risolvi POD"
  4. Visualizza i risultati in tempo reale

CLI

# Test singolo POD
python gse_pod_resolver.py IT001E12345678

# Output di esempio
πŸ”Œ GSE POD Resolver - Test
==================================================
πŸ” Test POD: IT001E12345678
------------------------------
βœ… POD: IT001E12345678
βœ… Cabina Primaria: AC001E00001
βœ… Fornitore: Fornitore Esempio S.p.A.
βœ… Regioni: Regione Esempio
βœ… Province: Provincia Esempio 1, Provincia Esempio 2
βœ… Comuni: Comune Esempio 1, Comune Esempio 2, Comune Esempio 3

πŸ”§ API GSE Utilizzate

1. POD β†’ AC Mapping

  • Endpoint: POD_AC/FeatureServer/12
  • Scopo: Trova l'Area Convenzionale per un POD
  • Campi: COD_POD, COD_AC

2. AC Geometry & Info

  • Endpoint: Aree_Convenzionali/FeatureServer/0
  • Scopo: Ottiene geometria e informazioni AC
  • Campi: COD_AC, RAG_SOC (Fornitore), geometry

3. Comuni Intersezione

  • Endpoint: Comuni/FeatureServer/10
  • Scopo: Trova comuni che intersecano l'AC
  • Campi: COD_REG, COD_PROV, COMUNE, PRO_COM_T

πŸ“Š Struttura Dati

PODResult

@dataclass
class PODResult:
    pod: str                    # Codice POD originale
    cabina_primaria: str        # Codice AC
    fornitore: str              # Nome fornitore
    regioni: List[str]          # Lista regioni
    province: List[str]         # Lista province
    comuni: List[str]           # Lista comuni

Mappe ISTAT

  • regioni_map: Codice β†’ Nome regione (20 regioni)
  • province_map: Codice β†’ Nome provincia (101 province)

πŸ” Esempi di Risoluzione

POD Cabina Fornitore Regione Provincia Comuni
IT001E12345678 AC001E00001 Fornitore Esempio 1 Regione Esempio 1 Provincia Esempio 1, Provincia Esempio 2 5 comuni
IT002E98765432 AC002E00002 Fornitore Esempio 2 Regione Esempio 2 Provincia Esempio 3 3 comuni
IT003E55556666 AC003E00003 Fornitore Esempio 3 Regione Esempio 3 Provincia Esempio 4, Provincia Esempio 5 7 comuni

🚨 Gestione Errori

try:
    with GSEPodResolver() as resolver:
        result = resolver.resolve_pod("IT001E12345678")
        print(f"βœ… POD: {result.pod}")
except ValueError as e:
    print(f"❌ POD non valido: {e}")
except RuntimeError as e:
    print(f"❌ Errore di risoluzione: {e}")

## πŸ§ͺ Testing

```bash
# Test rapido
python gse_pod_resolver.py IT001E12345678

# Test multipli
python gse_pod_resolver.py IT002E98765432
python gse_pod_resolver.py IT003E55556666

πŸ“ Struttura Progetto

gse-pod-resolver/
β”œβ”€β”€ gse_pod_resolver.py      # 🐍 Modulo Python principale
β”œβ”€β”€ pod_resolver_web.html    # 🌐 Interfaccia web standalone
β”œβ”€β”€ requirements.txt          # πŸ“¦ Dipendenze Python
β”œβ”€β”€ README.md                # πŸ“– Documentazione
β”œβ”€β”€ LICENSE                  # βš–οΈ Licenza
β”œβ”€β”€ .gitignore              # 🚫 File da ignorare
└── venv/                   # 🐍 Virtual environment

πŸ”’ Sicurezza

  • βœ… Validazione Input: Regex per formato POD
  • βœ… Escape HTML: Prevenzione XSS
  • βœ… Timeout Configurabili: Protezione da hanging
  • βœ… Gestione Sessioni: Riutilizzo efficiente HTTP

πŸ“± Responsive Design

L'interfaccia web Γ¨ ottimizzata per:

  • πŸ–₯️ Desktop (1200px+)
  • πŸ“± Tablet (768px-1199px)
  • πŸ“± Mobile (<768px)

🀝 Contribuire

  1. Fork del repository
  2. Creazione branch feature (git checkout -b feature/AmazingFeature)
  3. Commit delle modifiche (git commit -m 'Add AmazingFeature')
  4. Push del branch (git push origin feature/AmazingFeature)
  5. Apertura Pull Request

πŸ“„ Licenza

Distribuito sotto licenza MIT. Vedi LICENSE per maggiori informazioni.

πŸ“ž Supporto

πŸ™ Ringraziamenti

  • GSE per le API pubbliche
  • ISTAT per i dati geografici
  • ComunitΓ  Python per le librerie

⭐ Se questo progetto ti è utile, considera di dargli una stella!

About

Risolutore POD italiani tramite API GSE dirette. Modulo Python + interfaccia web per identificare cabina primaria, fornitore e dati geografici.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published