14 KiB
Audit Import GESCON (MDB/ZIP) → NetGescon
Obiettivo: avere una mappa trasparente di cosa importiamo da GESCON (file MDB dentro archivio/cartelle o ZIP unico) e in quali tabelle NetGescon finisce.
Questo documento è volutamente “operativo”: non descrive l’interfaccia, ma input → staging → dominio.
1) Che cosa esporta GESCON (scenario reale)
Dalla pratica (e dai materiali già presenti nel repo) emergono 2 modalità equivalenti:
-
Archivio su filesystem (cartelle)
- un path base tipo
.../gescon/ - per ogni stabile una cartella
/<codice_stabile>/ - dentro:
generale_stabile.mdb - per ogni anno:
/<anno_cartella>/singolo_anno.mdb - spesso esiste anche un indice:
cartellestabili_e_anni.mdb
- un path base tipo
-
ZIP unico “bulk”
- contiene gli stessi MDB (o una struttura equivalente) compressi
- concettualmente: ZIP → estrazione temporanea → si riusa la pipeline “filesystem”
Nel codice attuale, la pipeline lavora nativamente sul filesystem (--path e cartelle per stabile/anno). Lo scenario “ZIP unico” è quindi: estrai ZIP → passa la cartella estratta come --path.
Riferimenti codice:
- Pipeline: netgescon-laravel/app/Console/Commands/ImportGesconFullPipeline.php
- Scan/risoluzione archivio per anni: netgescon-laravel/app/Services/GesconImport/LegacyArchiveService.php
- Controller legacy con path MDB: netgescon-laravel/app/Http/Controllers/Admin/GesconImportController.php
2) File MDB “chiave” (cosa contengono)
2.1 Stabili.mdb
- Anagrafica stabili (denominazione/indirizzo/cf/iban/…)
- Usato come fonte metadati (arricchimento) quando lo staging non è sufficiente.
Nel codice:
- fallback “crea stabile da MDB” nello step
stabili: ImportGesconFullPipeline.php
2.2 cartellestabili_e_anni.mdb
- indice master che collega
cod_stabile↔ cartella stabile ↔ cartelle anni
Nel codice:
- usato nella UI legacy per dedurre struttura anni/cartelle: GesconImportController.php
2.3 generale_stabile.mdb
- dati “di stabile” (non anno-specifici): tipicamente casse/conti, parametri, e in alcune installazioni anche fatture/altre tabelle.
Nel codice:
- step
bancheleggeAnagr_cassedagenerale_stabile.mdb: ImportGesconFullPipeline.php
2.4 singolo_anno.mdb
- dati dell’anno: condòmini/unità/rapporti, millesimi, voci, operazioni, rate/incassi, giroconti, straordinarie, ecc.
Nel codice:
- staging/dominio usa soprattutto la tabella
condomine le tabelle contabili (operazioni,rate,incassi, …)
3) Pipeline “canonica” attuale (3 livelli)
Livello A — Staging DB gescon_import (import tecnico)
È un database “ponte” che replica (in parte o in toto) tabelle GESCON in MySQL.
Nel repo coesistono più migrazioni/strategie di staging (storiche). Le principali:
-
Schema staging completo (replica ampia):
- netgescon-laravel/database/migrations/2025_08_05_000001_create_gescon_import_database_schema.php
- Crea (tra le altre):
stabili,fornitori,condomin,voc_spe,operazioni,rate,incassi,dett_tab,tabelle_millesimali,dett_pers,detrazioni_fiscali, …
-
Schema staging “essential” (tabelle essenziali e campi “puliti”):
- netgescon-laravel/database/migrations/2025_08_06_000002_create_gescon_import_essential_tables.php
- Crea:
stabili,anni_gestione,condomini,voci_spesa,operazioni,rate,incassi,millesimi_dettaglio,fornitori,import_log
-
Schema staging “optimized/verified” (alcune tabelle verificate):
- netgescon-laravel/database/migrations/2025_08_05_235537_create_gescon_import_optimized_tables.php
- Crea:
stabili_gescon,fornitori_gescon,fatture_gescon,rate_*_gescon,f24_gescon,destinatari_*_gescon,import_log
Nota: nella pipeline gescon:import-full i riferimenti principali sono a:
condomindett_tabtabelle_millesimalivoc_speoperazionirateincassigiri_conti/Giri_contistraordinariedett_persdetrazioni_fiscalistabili
(estratto automaticamente dai riferimenti in codice).
Livello B — Tabelle dominio “NetGescon” (dati usati dall’app)
La pipeline gescon:import-full non si limita a riempire lo staging: crea/aggiorna anche entità di dominio.
Le tabelle di dominio toccate direttamente (principali):
stabiliunita_immobiliarisoggettiproprieta(diritti reali / legami soggetto↔unità)tabelle_millesimalietabelle_millesimali_righevoci_spesaoperazioni_contabilirate_emesse(solo se esiste colonnalegacy_id)incassimovimenti_internilavori_straordinariaddebiti_personalizzatidetrazioni_fiscali_dom
Per supportare alcune parti del dominio e QA post-import esiste una migrazione dedicata:
Livello C — QA (viste)
La stessa migrazione crea viste vw_gescon_import_* per verificare rapidamente il risultato import.
4) Mapping operativo: STAGING → DOMINIO (pipeline gescon:import-full)
Questa è la mappa “vera” per l’import end-to-end.
4.1 Step stabili
Input staging:
gescon_import.stabili(se presente)- altrimenti
gescon_import.condomin(distinctcod_stabile) - fallback (solo metadati): lettura
Stabili.mdbse fornito--mdbo deducibile da--path
Output dominio:
stabili(crea/aggiorna non distruttivo: completa campi mancanti)
Riferimento:
- step
stabiliin ImportGesconFullPipeline.php
4.2 Step unita
Input staging:
gescon_import.condomin
Output dominio:
unita_immobiliari(crea unità “STAB-SCALA-INT”, riconosce pertinenze e normalizza piano)
Riferimento:
- trait HandlesUnitaStep.php
4.3 Step soggetti
Input staging:
gescon_import.condomin
Output dominio:
soggetti(dedup: CF → email → nome+cognome)- crea/associa anche record
Persona(rubrica universale) tramitePersonaSyncService
Riferimento:
- trait HandlesSoggettiStep.php
4.4 Step diritti
Input staging:
gescon_import.condomin
Output dominio:
proprieta(legameunita_immobiliari↔soggetticome proprietà/locazione)
Riferimento:
- trait HandlesDirittiStep.php
4.5 Step millesimi
Input staging:
gescon_import.dett_tab(righe millesimi)gescon_import.tabelle_millesimali(intestazioni) se presente- join con
gescon_import.condominper risalire acod_stabile(quando necessario)
Output dominio:
tabelle_millesimali(intestazioni)tabelle_millesimali_righe(righe per unità)
Riferimento:
- step
millesimiin ImportGesconFullPipeline.php
4.6 Step voci
Input staging:
gescon_import.voc_spe
Output dominio:
voci_spesa(collega tabella millesimale default quando possibile)
Riferimento:
- step
vociin ImportGesconFullPipeline.php
4.7 Step banche
Input file (filesystem):
/<path>/<stabile>/generale_stabile.mdbtabellaAnagr_casse- fallback:
Anagr_casseanche neisingolo_anno.mdb
Output dominio:
dati_bancari(conti, IBAN, flag conto nostro)casse(es.CON,CDL, eventuali codici locali)
Riferimento:
- step
banchein ImportGesconFullPipeline.php
4.8 Step operazioni
Input staging:
gescon_import.operazioni
Output dominio:
operazioni_contabili(conlegacy_id)- collegamento opzionale a
dati_bancaritramitecod_cassa(se colonnaconto_bancario_idesiste)
Riferimento:
- step
operazioniin ImportGesconFullPipeline.php
4.9 Step rate
Input staging:
gescon_import.rate(con eventuale join acondominse mancacod_stabile)
Output dominio:
rate_emesseSOLO se schema halegacy_id- altrimenti lo step “salta” (perché la tabella storica richiede molti campi)
Riferimento:
- step
ratein ImportGesconFullPipeline.php
4.10 Step incassi
Input staging:
gescon_import.incassi
Output dominio:
incassiconlegacy_id(oid_incasso_gesconse presente)- link a
dati_bancari/cassese le colonne esistono
Riferimento:
- step
incassiin ImportGesconFullPipeline.php
4.11 Step giroconti
Input staging:
gescon_import.Giri_contiogescon_import.giri_conti
Output dominio:
movimenti_interni
Riferimento:
- step
girocontiin ImportGesconFullPipeline.php
4.12 Step straord
Input staging:
gescon_import.straordinarie
Output dominio:
lavori_straordinari
Riferimento:
- step
straordin ImportGesconFullPipeline.php
4.13 Step addebiti
Input staging:
gescon_import.dett_pers
Output dominio:
addebiti_personalizzati
Riferimento:
- step
addebitiin ImportGesconFullPipeline.php
4.14 Step detrazioni
Input staging:
gescon_import.detrazioni_fiscali
Output dominio:
detrazioni_fiscali_dom
Riferimento:
- step
detrazioniin ImportGesconFullPipeline.php
5) Come viene popolato lo STAGING (MDB → gescon_import.*)
Qui ci sono più “strade” nel repo (alcune legacy/storiche).
5.1 Import via Artisan (consigliato per pipeline moderna)
- Comando principale:
gescon:import-full - Fa
preflightStaging()e può caricarecondomindasingolo_anno.mdbquando manca nello staging.
Riferimento:
5.2 Import diretto MDB → tabelle staging “stg_*” (workflow alternativo)
Esiste anche un comando “diretto” che importa alcune tabelle MDB in tabelle stg_* (non è la stessa cosa dello staging gescon_import.* usato dal full pipeline):
Questo è utile per casi specifici (rate/operazioni/incassi da estratto), ma non è la base del “bulk import ZIP” come richiesto.
5.3 Script Python generici (storici / tooling)
Nel repo ci sono script per importare MDB in MySQL con naming “raw”:
- netgescon-laravel/scripts/import_mdb_to_mysql.py
- netgescon-laravel/scripts/import_mdb_to_mysql_advanced.py
E un mapping “generico” (non allineato al dominio Laravel moderno):
Questi tool sono utili per “dump” e diagnostica, ma la pipeline Laravel principale usa l’approccio gescon:import-full.
6) Cosa manca per supportare davvero “ZIP unico” end-to-end
A oggi abbiamo:
- pipeline su filesystem completa (
gescon:import-full) che richiede un--pathe struttura cartelle - lettura MDB via
mdb-tools
Per lo scenario ZIP unico mancano (a livello prodotto):
- Upload ZIP (UI)
- Extract in area temporanea per utente/stabile (storage)
- Validazione: verifica presenza minima di:
Stabili.mdboppurecartellestabili_e_anni.mdb- almeno un
singolo_anno.mdbper lo stabile selezionato
- Esecuzione pipeline puntando
--pathalla cartella estratta - Pulizia della cartella temporanea + log import
Questo documento copre (3) e (4) dal punto di vista di “dati che entrano e dove finiscono”.
7) Quick checklist (per controllare che importiamo “la base funzionante”)
Base GitHub “funzionante” = anagrafiche + unità + ruoli/rapporti + contabilità minima.
stabilicreati (dominio)unita_immobiliaricreatesoggetticreati + dedup OKproprieta(diritti) creatitabelle_millesimali+tabelle_millesimali_righevoci_spesadati_bancari/casse(almenoCONe un conto nostro)operazioni_contabili(se si vuole “prima nota/contabilità”)rate_emesseeincassi(dipende dallo schema: rate richiedelegacy_id)
Per la QA, usare le viste vw_gescon_import_* create dalla migrazione: