# 🐍 NETGESCON IMPORTER - Bridge Python per GESCON > **πŸ”„ Sistema di importazione e sincronizzazione** > Per convivenza temporale GESCON β†’ NetGescon > Aggiornato: 14 Luglio 2025 ## 🎯 **OBIETTIVO** Creare un **bridge Python** che permetta: - βœ… **Import graduale** dati da GESCON esistente - πŸ”„ **Sincronizzazione bidirezionale** temporanea - πŸ“Š **Validazione integritΓ ** dati importati - πŸš€ **Transizione sicura** senza perdita dati ## πŸ—οΈ **ARCHITETTURA SISTEMA** ### **Struttura Directory** ``` netgescon-importer/ β”œβ”€β”€ requirements.txt # Dipendenze Python β”œβ”€β”€ config/ β”‚ β”œβ”€β”€ gescon_config.yml # Config connessione GESCON β”‚ β”œβ”€β”€ netgescon_config.yml # Config API NetGescon β”‚ └── mapping_schema.yml # Mapping campi GESCON β†’ NetGescon β”œβ”€β”€ src/ β”‚ β”œβ”€β”€ gescon_reader.py # Lettura dati GESCON β”‚ β”œβ”€β”€ data_mapper.py # Mapping e trasformazione β”‚ β”œβ”€β”€ netgescon_client.py # Client API NetGescon β”‚ β”œβ”€β”€ validator.py # Validazione dati β”‚ β”œβ”€β”€ sync_service.py # Servizio sincronizzazione β”‚ └── scheduler.py # Scheduling automatico β”œβ”€β”€ logs/ # Log operazioni β”œβ”€β”€ temp/ # File temporanei └── main.py # Entry point principale ``` ## πŸ”§ **COMPONENTI PRINCIPALI** ### **1. GESCON Reader** ```python # gescon_reader.py class GesconReader: def __init__(self, config): self.config = config self.connection = None def connect_database(self): """Connessione al DB GESCON (Access/SQL Server/MySQL)""" pass def read_stabili(self): """Lettura tabella stabili""" pass def read_unita_immobiliari(self): """Lettura unitΓ  immobiliari""" pass def read_soggetti(self): """Lettura anagrafica soggetti""" pass def read_movimenti_contabili(self, from_date=None): """Lettura movimenti contabilitΓ """ pass ``` ### **2. Data Mapper** ```python # data_mapper.py class DataMapper: def __init__(self, mapping_config): self.mapping = mapping_config def map_stabile(self, gescon_stabile): """Mappa dati stabile GESCON β†’ NetGescon""" return { 'denominazione': gescon_stabile['denominazione'], 'codice_fiscale': gescon_stabile['cod_fisc'], 'indirizzo': gescon_stabile['indirizzo'], # ... altri campi } def map_unita_immobiliare(self, gescon_unita): """Mappa unitΓ  immobiliare""" pass def validate_mapping(self, source_data, mapped_data): """Valida la correttezza del mapping""" pass ``` ### **3. NetGescon API Client** ```python # netgescon_client.py class NetGesconClient: def __init__(self, base_url, api_token): self.base_url = base_url self.headers = { 'Authorization': f'Bearer {api_token}', 'Content-Type': 'application/json' } def import_stabili(self, stabili_data): """Import stabili via API""" response = requests.post( f'{self.base_url}/api/import/stabili', json=stabili_data, headers=self.headers ) return response.json() def check_import_status(self, job_id): """Check status import job""" pass ``` ### **4. Sync Service** ```python # sync_service.py class SyncService: def __init__(self, gescon_reader, netgescon_client, mapper): self.gescon = gescon_reader self.netgescon = netgescon_client self.mapper = mapper def full_import(self): """Import completo iniziale""" try: # 1. Import stabili stabili = self.gescon.read_stabili() mapped_stabili = [self.mapper.map_stabile(s) for s in stabili] result = self.netgescon.import_stabili(mapped_stabili) # 2. Import unitΓ  immobiliari # 3. Import soggetti # 4. Import contabilitΓ  except Exception as e: logger.error(f"Errore import: {e}") def incremental_sync(self): """Sincronizzazione incrementale""" pass ``` ## πŸ“‹ **FASI IMPLEMENTAZIONE** ### **FASE 1: Setup Ambiente** (1-2 giorni) ```bash # Setup progetto Python cd /home/michele/netgescon/ mkdir netgescon-importer cd netgescon-importer # Virtual environment python3 -m venv venv source venv/bin/activate # Dipendenze base pip install pandas sqlalchemy requests pyyaml schedule logging ``` ### **FASE 2: Analisi Schema GESCON** (2-3 giorni) - [ ] **Connessione** database GESCON esistente - [ ] **Mappatura tabelle** e relazioni - [ ] **Identificazione** primary/foreign keys - [ ] **Analisi** integritΓ  dati esistenti - [ ] **Documentazione** schema trovato ### **FASE 3: Mapping Dati** (3-4 giorni) - [ ] **Creazione** mapping_schema.yml - [ ] **Implementazione** DataMapper class - [ ] **Test** trasformazioni dati - [ ] **Validazione** mapping correttezza ### **FASE 4: API Integration** (2-3 giorni) - [ ] **API endpoint** NetGescon per import - [ ] **Autenticazione** API token - [ ] **Gestione** job asincroni import - [ ] **Monitoring** status e errori ### **FASE 5: Sincronizzazione** (4-5 giorni) - [ ] **Import iniziale** completo - [ ] **Sync incrementale** automatica - [ ] **Conflict resolution** strategy - [ ] **Rollback** procedure ## βš™οΈ **CONFIGURAZIONE** ### **gescon_config.yml** ```yaml database: type: "access" # access, sqlserver, mysql path: "/path/to/gescon.mdb" # Per Access # connection_string: "..." # Per SQL Server/MySQL tables: stabili: "Stabili" unita: "UnitaImmobiliari" soggetti: "Soggetti" movimenti: "MovimentiContabili" ``` ### **netgescon_config.yml** ```yaml api: base_url: "http://localhost:8000" # URL NetGescon token: "your-api-token" timeout: 30 import: batch_size: 100 max_retries: 3 validate_before_import: true ``` ### **mapping_schema.yml** ```yaml stabili: denominazione: "Denominazione" codice_fiscale: "CodiceFiscale" indirizzo: "Indirizzo" citta: "Citta" cap: "CAP" # ... mapping completo campi unita_immobiliari: # ... mapping unitΓ  ``` ## 🎯 **UTILIZZO** ### **Import Iniziale** ```bash # Import completo da GESCON python main.py --action=full-import --validate=true # Import solo stabili python main.py --action=import --entity=stabili # Preview import (senza salvare) python main.py --action=preview --entity=all ``` ### **Sincronizzazione Automatica** ```bash # Avvia scheduler sincronizzazione ogni ora python main.py --action=schedule --interval=1h # Sync manuale incrementale python main.py --action=sync-incremental ``` ### **Monitoring** ```bash # Status ultimo import python main.py --action=status # Log errori tail -f logs/netgescon_importer.log ``` ## πŸ“Š **REPORT E VALIDAZIONE** ### **Report Import** - **πŸ“ˆ Statistiche**: Record importati, errori, warning - **πŸ“‹ Mapping**: Campi mappati vs non mappati - **⚠️ Anomalie**: Dati mancanti, duplicati, inconsistenze - **βœ… Validazione**: Controlli integritΓ  superati ### **Dashboard Web** (Opzionale) Creare semplice dashboard web per: - πŸ“Š **Status** import in tempo reale - πŸ“ˆ **Grafici** progresso migrazione - πŸ“‹ **Log** operazioni con filtri - πŸ”§ **Controlli** manuali correzione errori ## πŸš€ **DEPLOYMENT** ### **Server Dedicato Import** ```bash # Setup su server Linux git clone netgescon-importer cd netgescon-importer ./setup.sh # Service systemd per scheduling sudo systemctl enable netgescon-importer sudo systemctl start netgescon-importer ``` ### **Docker Container** (Opzionale) ```dockerfile FROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . CMD ["python", "main.py", "--action=schedule"] ``` ## πŸ”’ **SICUREZZA** - **πŸ” Credenziali** in variabili ambiente - **πŸ›‘οΈ Backup** automatico prima import - **πŸ“ Audit trail** tutte le operazioni - **πŸ”„ Rollback** procedure emergency - **⚑ Rate limiting** API calls --- ## πŸ“‹ **CHECKLIST IMPLEMENTAZIONE** ### **Setup** βœ… - [ ] Ambiente Python configurato - [ ] Dipendenze installate - [ ] Config files creati - [ ] Connessione GESCON testata ### **Development** πŸ”„ - [ ] GesconReader implementato - [ ] DataMapper completato - [ ] NetGesconClient funzionante - [ ] SyncService operativo - [ ] Test suite creata ### **Testing** ⏳ - [ ] Import test dati campione - [ ] Validazione mapping - [ ] Performance test - [ ] Error handling test - [ ] Rollback test ### **Production** ⏳ - [ ] Deploy server produzione - [ ] Monitoring configurato - [ ] Backup procedures - [ ] Documentation utenti - [ ] Training team **Questo sistema garantisce una transizione sicura e graduale da GESCON a NetGescon!** πŸš€