16 KiB
Executable File
Archivi legacy e import (GESCON)
Archivi da prendere
1) Stabili.mdb
Percorso tipico:
- /mnt/gescon-archives/gescon/dbc/Stabili.mdb
Contiene:
- Anagrafica stabili
- Dati bancari/postali
- Dati catasto
- Scadenze rate ordinarie/riscaldamento
- Parametri FE e PEC
2) Fornitori.mdb
Percorso tipico:
- /mnt/gescon-archives/gescon/dbc/Fornitori.mdb
Contiene:
- Anagrafica fornitori
3) singolo_anno.mdb
Percorso tipico:
- /mnt/gescon-archives/gescon/<cod_stabile>//singolo_anno.mdb
Contiene:
- Unità immobiliari + nominativi (condomin)
- Comproprietari
- Tabelle millesimali (legacy:
tabelle) - Voci spesa
- Dett_tab
- Incassi
- Operazioni
- Straordinarie
- Preventivi straordinari (tabella
prevent_straordinari) - dett_pers (addebiti personalizzati, I05)
- Frazionamenti (fraz_gen / fraz_dett, Z01/Z02)
- tabella
Anagr_cassecon i codici legacy da preservare per incassi e operazioni
4) generale_stabile.mdb
Percorso tipico:
- /mnt/gescon-archives/gescon/<cod_stabile>/generale_stabile.mdb
Contiene:
- anni
- emes_gen / emes_det
- Fatture legacy
- Dati trasversali
Regola fondamentale anni
Nel legacy i dati sono replicati per ogni anno. Per ricostruire correttamente:
- Importare tutte le annualità per ogni stabile.
- Consolidare in staging con campi legacy_year/legacy_period/legacy_file.
Staging DB (anti-duplicazione)
- DB: gescon_import
- È la sorgente primaria per evitare doppie importazioni.
- Tabelle aggiunte:
tabelle_millesimali,dett_pers,fraz_gen,fraz_dett,mdb_fornitori - Tabelle straordinarie:
straordinarie,prevent_straordinari - Per
gescon:import-full --solo=millesimi|vociil filtro operativo corretto deve essere sempre sucod_stabile+legacy_year; in caso di righe staging duplicate dello stesso snapshot, l'import deve deduplicare prima di scrivere nel dominio.
Componenti di import (codice)
UI Filament
- app/Filament/Pages/Gescon/ImportazioneArchivi.php
- Modalità Linux: path diretto
- Modalità Windows: upload file/zip + estrazione
- stessa blade per creare o aggiornare lo stabile selezionato, senza modal
- sezione inline per banca principale e prima gestione contabile
- al salvataggio/import normalizza la parte finanziaria usando i codici reali di
Anagr_casse - la cassa locale resta solo
CON; i conti bancari vengono salvati indati_bancariconlegacy_cod_cassareale (es.CCB)
Comandi staging
- gescon:load-mdb
- import:gescon-mdb
- import:gescon-fornitori
- import:gescon-fatture-legacy
Import movimenti banca (Intesa XLSX)
- Parser XLSX con descrizione estesa (colonna F)
- Salva
descrizione_estesa+match_data+ flagda_confermare - Duplicati gestiti con
row_hash
Import banca per istituto (regole)
Intesa (XLSX)
- Layout rilevato: A Data, B Valuta, C Descrizione, D Avere, E Dare, F Descrizione estesa
- Import in Casse/Banche → Movimenti
Intesa (CSV)
- Supporto CSV con parser dedicato
Unicredit (WRI)
- Import con parser WRI
Spese bancarie (parole chiave iniziali)
- commissione / commissioni
- spese tenuta conto / canone
- imposta di bollo
- competenze
- spese invio / notifiche
- interessi debitori
- costo bonifico
Nota: l’elenco va aggiornato per ogni banca con termini specifici presenti negli estratti.
Pipeline dominio
- gescon:import-full
- gescon:import-gestioni
Flusso operativo raccomandato dalla stessa blade
Per i nuovi stabili importati da GESCON il flusso raccomandato e:
- caricare l elenco stabili da
Stabili.mdb; - selezionare lo stabile e usare
Carica setup inlineper leggere anagrafica, banca e mesi rate; - correggere direttamente nella stessa schermata i campi dello stabile e il setup della prima gestione;
- usare
Salva stabile inlineper creare o aggiornare lo stabile locale senza duplicarlo; - eseguire
Importa dati selezionatioppureImport + allineamento; - se serve, rifinire la prima gestione con
Salva gestione inline.
Risultato atteso:
- una sola cassa locale
CON; - conto bancario reale del condominio presente in
dati_bancariconis_nostro_conto=true; legacy_cod_cassadel conto bancario allineato aAnagr_cassedelsingolo_anno.mdb;- prima gestione ordinaria creata o aggiornata dalla stessa blade;
- mesi emissione rate letti da
Stabili.mdb(ORD_RATA_x,RIS_RATA_x) e memorizzati gestione per gestione; - nessuna creazione ripetuta dello stesso stabile a ogni passaggio.
Regole sorgente senza fallback
Per il ramo import stabile/gestioni usare queste sorgenti come riferimento:
- codici cassa e banca:
Anagr_cassedentro ognisingolo_anno.mdb; - dati descrittivi e IBAN banca principale:
Stabili.mdb/stabilidominio gia sincronizzato; - mesi rate ordinaria e riscaldamento:
Stabili.mdbtramite campiORD_RATA_xeRIS_RATA_x; - anni gestione: tabella
annidigenerale_stabile.mdb; se l archivio non la espone correttamente, usare il dato anno ricavabile dall archivio reale dello stesso stabile, ma non inventare anni sintetici.
Da evitare:
- seeding automatico di
CDL; - codici banca sintetici tipo
BANCA-PRINCIPALE; - mesi rate dedotti da fallback quando il master
Stabili.mdbe disponibile.
Verifica base confermata su stabile 0026
Validazione eseguita sulla base legacy:
condomin = 23;Comproprietari = 0nel file0026/0001/singolo_anno.mdb;tabelle = 8;dett_tab = 171;voc_spe = 46;Fraz_gen = 4;fraz_dett = 11.
Esito dominio importato:
unita_immobiliari = 23;proprieta = 23;locazioni = 4;soggetti distinti collegati = 21.
Nota importante sui soggetti:
- i
23proprietari attesi sono23rapporti di proprieta, non23persone uniche; - nel legacy di
0026i proprietari distinti sono18, gli inquilini distinti sono4, con almeno una anagrafica coincidente tra i due insiemi; - il risultato
21soggetti distinti in dominio e quindi coerente con deduplica reale e non con una perdita di record.
Esito millesimi e voci:
tabelle_millesimali = 8;dettaglio_millesimi = 92;dettaglio_importi_tabella = 171;voci_spesa = 46;SUM(importo_default) = 15108.00.
Riallineamento confermato dopo fix import millesimi/voci:
- il pipeline non deve piu accumulare righe da anni/stabili diversi quando si usa
--stabile=0026 --anno=0001; - lo snapshot staging
0026/0001puo contenere righe replicatex2, quindi l'import deve deduplicare prima di scrivere; - per tabelle legacy header-only come
ACQUA, le righedett_taba millesimi0non devono gonfiaredettaglio_millesimi; - per
ACQUA, indettaglio_importi_tabellava mantenuta una sola riga operativa per unita scegliendo il ruolo legacy con importo reale: esempio verificatoid_cond=1 -> C 204.76,id_cond=2 -> I 154.76.
QA dedicato:
- comando:
php artisan netgescon:qa-millesimi-spese --stabile=0026 --anno=0001; - esito: conteggi base riallineati (
8 / 92 / 171 / 46 / 15108.00), ma restano warning da chiudere prima del via libera contabile definitivo; ACQUA,INDIV.,REND.,RI.ASSeRIPARTsono tabelle legacy senza righedett_tabattive nello snapshot0026/0001, quindi non vanno trattate come tabelle ordinarie con righe millesimali positive finche il sorgente non le valorizza;- restano aperti i codici tabella presenti in staging ma non ancora portati a dominio (
CONG.R,RISC.L,RISC.,RISC.O,CONG.O,TABADL,L01.ST,L02.ST,L03.ST,P01.ST,TABASL,MED01,L04.ST); - resta da verificare il comportamento contabile di
Z01/Z02prima del via libera finale alla partita doppia, perche i frazionamenti legacy sono presenti in staging.
Situazione iniziale patrimoniale
Regole operative fissate per Contabilita > Situazione iniziale:
cre_deb_precedresta la sorgente dei valori pregressi da riportare avanti, separati in modo esplicito perCrediti eDebiti;CONG.Ova letto dadett_tabdelsingolo_anno.mdbcome tabella dei conguagli ordinari iniziali;- nella tab
conguaglivanno mantenute tutte le righeC/I, anche quandocons_euro = 0, per evitare fallback e permettere lo spostamento puntuale del valore sulla singola unita; FONDInon vanno piu confusi con i debiti: nella situazione iniziale esiste ora un bucket separato dedicato agli accantonamenti;Perc_proprietarioeperc_inquilinodivoc_sperappresentano la quota legacy della singola voce per l unita, ma non devono essere usati per ricalcolare importi storici gia emessi nellerate.
Base contabile condominiale
Impostazione da mantenere nel dominio Day0:
- il piano dei conti universale va tenuto minimale e condominiale, non esteso come una contabilita aziendale completa;
- i gruppi base restano quelli della partita doppia standard:
Attivita,Passivita,Patrimonio Netto,Ricavi,Costi; - i
creditiprincipali sono le quote/rate emesse verso unita e soggetti responsabili (condomino/inquilino), non crediti commerciali generici; - i
debitiprincipali sono i fornitori e gli altri soggetti che erogano beni o servizi allo stabile; - la chiusura di gestione non deve cercare
utileoperditama ilconguaglionecessario a coprire i costi sostenuti e chiudere le partite della gestione; - i
fondirestano conti patrimoniali standard di partita doppia (fondo rischi,fondo oneri,fondo ammortamento,fondo riserva,accantonamenti), senza introdurre bucket inventati fuori schema.
Sorgenti legacy da considerare autorevoli nel flusso contabile:
condominper unita e occupanti responsabili;tabelle+voc_speper struttura di riparto e voci del piano dei conti operativo;ratedelsingolo_anno.mdbcome credito verso l unita/soggetto;emes_geneemes_detdelgenerale_stabile.mdbcome intestazioni e dettagli delle emissioni fisiche inviate;incassidelsingolo_anno.mdbcome realizzo del credito emesso, da riconciliare concod_cassae poi con i movimenti banca/cassa di dominio;s_cassadelsingolo_anno.mdbcome saldo iniziale delle gestioni (s_ordin_euro,s_riscald_euro,s_straord_euro,n_stra).
Stato reale osservato oggi su 0026/0001:
- il raw
singolo_anno.mdbcontiene davvero intestazioneCONG.Oe righedett_tabper0026/0001; - il problema osservato era uno slice staging stantio: il preflight si fermava appena trovava righe gia presenti per
stabile + legacy_year; - dopo il fix
refresh-slicesul loader e il reload scoped,gescon_import.dett_tabper0026/0001risulta riallineato a244righe totali, di cui27CONG.O.
Controllo sorgente unita immobiliari su 0026/0001:
gescon_import.condomincontiene23righe e23cod_conddistinti;- non risultano duplicati sulla sorgente unita (
condomin) per questo snapshot; - la duplicazione osservata in questo passaggio riguarda
dett_tabevoc_spe, non la sorgente canonica delle unita.
Fornitori legacy sul tenant corretto
Verifica operativa eseguita su 0026:
- lo stabile
0026appartiene aamministratore_id = 3; - prima del riallineamento fornitori, il tenant
3aveva solo2fornitori concod_forn, mentre il catalogo storico principale era stato importato sotto un altro tenant; - eseguito
php artisan gescon:import-fornitori-legacy 3 --mdb=/mnt/gescon-archives/gescon/dbc/Fornitori.mdb; - esito finale sul tenant
3:363fornitori concod_fornvalorizzato e363codici distinti.
Conseguenza pratica:
- prima di usare contabilita e scritture legacy su uno stabile reale, verificare sempre che
fornitori.cod_fornsia presente nello stessoamministratore_iddello stabile, non solo in qualche altro tenant del dominio.
Semantica operativa delle tabelle speciali legacy
ACQUA
ACQUAnon va letta come tabella millesimale ordinaria da scrivere indettaglio_millesimi;- il totale resta in
voc_spe, mentre il riparto operativo per unita vive indett_tabed e collegato all unita tramiteid_conde al soggetto addebitato tramitecond_inquil(CoI); - nello staging corrente di
0026/0001le righeACQUAsono replicatex2, quindi l import deve deduplicare e poi collassare a una sola riga operativa per unita scegliendo il ruolo con importo effettivo.
RIPART
RIPARTdivide una singola voce legacy in piu voci reali di riparto, mantenendo sempre il100%dell importo originario;- la sorgente autorevole e la coppia
fraz_gen+fraz_dettdelsingolo_anno.mdb; - esempio verificato su
0026:Z01(ACEA: Energia elettrica) viene suddivisa in825 = 20%,A02 = 40%,B02 = 40%; - lo stesso criterio vale anche per pesi non percentuali normalizzati come
1-2-2, che rappresentano comunque una divisione integrale dell importo.
INDIV.
INDIV.non usa una tabella millesimale classica ma una ripartizione individuale su occupantiC/Idell unita immobiliare;- il primo livello resta la percentuale della voce (
Perc_proprietario/Perc_Inquilinoinvoc_spe); - il secondo livello dipende dai valori individuali collegati alle unita e alle spese personali (
dett_pers,n_spe, occupanti della UI); - per questo motivo la presenza della sola intestazione
INDIV.non implica righedett_tabvalorizzate.
REND.
REND.gestisce le rendite condominiali da ripartire secondo regolamento, su millesimi o altro criterio definito per lo stabile;- nello stabile
0026il riferimento operativo e l unita condominialecod_cond = 18(APP. CONDOMINIALE), da usare come ponte verso la gestione affitti gia prevista nel dominio; - le voci
RD*possono essere marcate comeFondonel legacy e non vanno trattate come semplici ricavi ordinari.
RI.ASS
RI.ASSrappresenta i rimborsi assicurativi gestiti dall amministratore (RB1..RB5);- nello snapshot
0026/0001le intestazioni e le voci sono presenti ma senza dettaglidett_tab, quindi oggi sono considerate non bloccanti per l import base; - se compaiono importi anomali in uno stabile nuovo, assumere prima una contaminazione del legacy e verificare archivio/storico prima di costruire automatismi di quadratura.
Conservazione della semantica legacy senza fallback
voci_spesa.meta_legacyconserva almenolegacy_tabella,legacy_is_fondo,legacy_fondo_raw, percentuali legacy e tipo gestione della voce importata;- questo vale anche per voci come
RD1eRB5, dove il flagFondo = Sideve restare disponibile al dominio prima del collegamento a partita doppia, FE e banca/posta; - non inventare dettagli di riparto o fondi nel dominio quando il legacy espone solo intestazioni: importare il dato reale e lasciare tracciata la provenienza.
Cumuli legacy e anagrafica unica
Verifica eseguita su 0021/0001/singolo_anno.mdb:
- gruppi
cumulo_condtrovati:77, di cui75con piu unita collegate; - gruppi
cumulo_inqtrovati:191, di cui21con piu unita collegate; - esempi reali confermati:
ATER C/O UFFICIO CONDOMINI PASSIVI,MINERVA FRANCESCO,ROSSI ENRICO,MASTRANGELI ALFREDO - GIUFFRIDA STEFANIA.
Conclusione operativa:
cumulo_condecumulo_inqnon sono un artefatto di stampa ma una semantica reale di raggruppamento comunicazioni e recapiti;- la deduplica per solo nominativo non basta, perche nello stesso gruppo esistono casi con email e cellulari parzialmente diversi tra una unita e l altra;
- la chiave di raggruppamento va quindi conservata vicino al legame unita <-> nominativo, non solo ricostruita a valle.
Stato del dominio dopo la patch corrente:
unita_immobiliare_nominativi.legacy_payloadconserva ora anchecumulo_*, recapiti raw,PEC,E_lostesso_Di, indirizzo legacy e altri campi utili del recordcondomin;- questo permette di materializzare in modo deterministico i futuri gruppi di comunicazione senza dover riaprire ogni volta il file MDB;
- la rubrica universale continua a essere il contenitore anagrafico principale, ma il legame canonico per la comunicazione multipla deve passare dal rapporto con l unita e non dal solo contatto principale.
Nota sui recapiti multipli:
rubrica_universaleha ancora campi primari singoli (email,telefono_cellulare);- i recapiti multipli esistono gia nel progetto tramite
rubrica_contatti_canalie, sul ramo persona, tramitePersonaEmailMultipla; - la normalizzazione finale dei recapiti deve quindi usare questi contenitori strutturati partendo dal payload legacy appena preservato.
Servizi
- app/Services/GesconImport/LegacyArchiveService.php
- app/Services/GesconImport/EssentialImportService.php
- app/Services/GesconImport/StabileEnrichmentService.php