netgescon-day0/docs/000-IMPORT/01-GESCON/GUIDA-IMPORT-GESCON-MDB.md

17 KiB
Executable File

Guida Import GESCON da MDB

Obiettivo

Usare Stabili.mdb come sorgente di controllo iniziale per decidere quali stabili importare, con una finestra dati prudente e verificabile prima della distribuzione operativa.

Sorgenti da considerare

1. Metadati stabili

  • dbc/Stabili.mdb
  • campi chiave attesi:
    • cod_stabile
    • nome_directory
    • campo CF stabile/condominio valorizzato

2. Dati annuali per stabile

  • <cod_stabile>/<anno>/singolo_anno.mdb
  • tabelle minime da validare:
    • condomin
    • operazioni
    • rate
    • incassi
    • dett_tab
    • voc_spe
    • straordinarie

3. Dati trasversali stabile

  • <cod_stabile>/generale_stabile.mdb
  • utile per verifiche aggiuntive su rate emesse, casse, incassi da estratto conto e dati generali

Regola multi-amministratore verificata 03/06/2026

  • Lo stesso codice_stabile deve poter convivere sotto amministratori diversi; la chiave corretta del contenitore dominio non e il solo codice stabile ma almeno amministratore_id + codice_stabile.
  • La stessa regola vale per le unita importate: codice_unita non puo restare globale se si vuole importare lo stesso stabile sotto due amministratori distinti.
  • Nel dominio DEV e stata verificata la coesistenza di 0026 su due tenant distinti:
    • stabile_id=31 sotto amministratore test 00000000
    • stabile_id=32 sotto amministratore reale HWFGITXK
  • Il reimport deve aggiornare il tenant selezionato senza riattribuire lo stabile all'altro amministratore.

Regola sorgenti MDB per contabilita Gescon

  • singolo_anno.mdb resta la sorgente annuale per condomin, operazioni, rate, incassi, dett_tab, voc_spe, straordinarie.
  • generale_stabile.mdb e la sorgente autorevole per EMES_GEN, EMES_DET e Inc_da_ec / in_da_ec.
  • Le tabelle annuali caricate in gescon_import devono sempre portare con se cod_stabile e legacy_year; se la staging proviene da schema storico va eseguito il reload con il loader aggiornato, non un semplice riuso delle righe gia presenti.
  • Per operazioni il reload deve essere idempotente su id_operaz: in caso contrario la pagina Filament puo vedere scritture miste o righe non riallineate allo slice reale dello stabile.
  • Per in_da_ec il reload deve produrre una staging slice-aware (cod_stabile, legacy_year) e una materializzazione read-only nel dominio (incassi_estratto_conto) con hash stabile del movimento, senza creare incassi applicativi automatici: l abbinamento finale resta umano-assistito.
  • Il nuovo HUB operativo e admin-filament/contabilita/incassi: deve mostrare sia incassi dominio sia snapshot legacy in_da_ec con payload pronto per AI interna; lo stesso snapshot e disponibile via GET api/v1/incassi/hub protetto da auth:sanctum.
  • Per lo stabile 0026 / anno 0001 e stato verificato che:
    • incassi nel singolo_anno.mdb contiene 0 righe, quindi uno staging vuoto non e un errore di import ma un dato legacy reale.
    • EMES_GEN nel generale_stabile.mdb contiene 3 emissioni.
    • EMES_DET nel generale_stabile.mdb contiene 81 righe dettaglio.
  • Le verifiche funzionali attese per 0026 / stabile_id=32 dopo il reload corretto delle sorgenti sono:
    • prima emissione 2026-01-05: totale 5037,00, 24 ricevute distinte
    • seconda emissione 2026-05-05: totale 5037,00, 24 ricevute distinte
    • conguaglio 2026-06-02: totale 1226,27, 24 ricevute distinte
    • ricevuta 24: unita legacy 20-21-22-23 (SEM-A, SEM-B, SEM-C, SEM-D)
  • Smoke test reale eseguito il 04/06/2026 su 0026 / anno 0001 / stabile_id=32 / amministratore_id=5:
    • archivio disponibile nel mount GESCON: solo cartella 0001
    • gescon:import-full --stabile=0026 --amministratore-id=5 --anno=1 --path=/mnt/gescon-archives/gescon completa la pipeline senza errori
    • al rerun gli importi rate_emesse restano stabili a 81 righe e somma 11300.27
    • al rerun dati_bancari resta consolidato a 1 riga (CCB, IBAN IT58P0103003203000001300987)
    • gli incassi restano 0, coerenti con il contenuto reale di singolo_anno.mdb

Regole operative di preselezione

Importare nello smoke test solo gli stabili che rispettano tutte queste condizioni:

  1. lo stabile esiste in Stabili.mdb
  2. il campo CF stabile/condominio e valorizzato
  3. cod_stabile e presente e usabile come codice mnemonico principale
  4. nome_directory e presente e punta a una cartella archivio esistente

Regola gestioni cross-year e riferimenti emissione

  • Per stabili come 0016 l esercizio non va letto come anno solare: la gestione corretta e quella esposta in generale_stabile.mdb -> anni (anno_o, ordinarie_dal, ordinarie_al).
  • gescon_import.gestioni_annuali deve essere popolata o riallineata da quella tabella prima di rileggere rate, cosi la UI e i piani dominio possono raggruppare i movimenti su etichette come 2024/25 o 2025/26.
  • Anche gestioni_contabili dominio va riallineata sugli stessi periodi: anno_gestione puo restare numerico come chiave tecnica, ma denominazione, data_inizio e data_fine devono seguire il periodo reale (Ordinaria 2024/25, 2024-10-01 -> 2025-09-30).
  • rate_emissioni_dettaglio e la sorgente autorevole della contabilità per unità quando servono split proprietario/inquilino e riferimenti legacy: usare almeno questi campi:
    • cod_cond
    • cond_inq
    • anno_gestione
    • numero_mese
    • numero_ricevuta
    • data_emissione
    • importo_dovuto_euro
  • Regola validata sui riferimenti:
    • avviso_code = anno(data_emissione) + numero_mese con padding a due cifre
    • numero_ricevuta resta il riferimento da conservare per l aggancio degli incassi
    • nelle viste dominio delle rate_emesse il riferimento legacy da esporre e Gestione {anno_gestione} · ricevuta n.{numero_ricevuta}; se numero_ricevuta manca, mostrare almeno Gestione {anno_gestione} e avviso_code
    • esempio reale 0016-B-4: 1/2 Rata di Marzo 2025 -> anno_gestione=2024/25, numero_mese=1, data_emissione=2025-03-05, avviso_code=202501, numero_ricevuta=339
  • Quando unita_immobiliari.legacy_cond_id non coincide piu con il cod_cond corrente, la scheda unità deve risolvere i cod_cond candidati tramite gescon_import.condomin usando almeno cod_stabile + scala + interno; pero, se il legacy_cond_id salvato ha ancora righe reali in rate_emissioni_dettaglio per quella unità/stabile, va preferito per l estratto compatto per non mischiare snapshot correnti con la contabilità storica autoritativa. Caso validato: 0016-B-4 usa legacy_cond_id=47 per leggere 52/196/268/626/697/766 in 2024/25.
  • Per la scheda unità il campo Condomino di riferimento deve riflettere gescon_import.condomin.nom_cond; i comproprietari restano dettaglio accessorio e non sorgente del riferimento principale.

Regola consultazione esercizi importati

  • In fase di riallineamento al legacy, gli archivi importati devono restare simmetrici al dato sorgente: nessuna somma implicita e nessuno spostamento automatico tra esercizi senza controllo.
  • La consultazione NetGescon distingue ora tra:
    • anni conteggiabili: gestioni aperte o attive, usate per il dovuto corrente
    • anni visibili ma chiusi: ultima gestione chiusa, mantenuta per confronti totali e controlli legacy
    • storico nascosto: esercizi piu vecchi importati e memorizzati, esclusi da estratti e conteggi finche non si abilita un filtro dedicato
  • Sessione di test validata su 0016:
    • 2025 (0914) visibile e conteggiabile
    • 2024 (0913) visibile e conteggiabile
    • 2023 (0912) visibile ma chiusa, quindi fuori dal dovuto corrente
    • 2022 e precedenti (0909, 0005, 0004, ...) nascosti per default

Regole di naming e archivio

  • codice stabile operativo: usare stabile.cod_stabile
  • cartella archivio stabile: usare stabile.nome_directory
  • cartella dominio NetGescon: usare sempre il codice univoco/canonico dello stabile
  • sincronizzazione documentale: mantenere mapping stabile tra codice canonico NetGescon e cartella legacy, cosi da poter allineare anche Google Drive

Finestra temporale smoke test

Per il primo passaggio operativo non importare tutto lo storico.

Criterio autorevole unita e nominativi

  • Lo snapshot corrente di unita, soggetti e diritti deve derivare sempre dall'ultimo anno legacy disponibile per lo stabile, non dall'anno storico che si sta rileggendo in quel momento.
  • La chiave stabile di allineamento tra staging e dominio deve essere condomin.id_cond o condomin.legacy_id_cond quando disponibile. Nel dominio questo valore va mantenuto in unita_immobiliari.legacy_cond_id.
  • condomin.cod_cond va trattato come codice di snapshot annuale: puo cambiare tra una gestione e l altra e quindi non e una chiave storica affidabile.
  • Se cod_cond non coincide con l anno precedente, il fallback corretto e:
    • verificare prima id_cond
    • se il record annuale non basta, verificare il nominativo (nom_cond / proprietario_denominazione) tra annualita consecutive
    • usare cod_cond solo come aggancio locale alla singola gestione per rate, incassi e pagamenti di quell anno
  • scala, interno e catasto_sub servono per esporre il codice mnemonico operatore e per le verifiche di riconciliazione, ma non devono sostituire id_cond come chiave interna.
  • Se si rilancia un'importazione su un anno precedente, il preflight deve comunque precaricare anche l'ultima annualita disponibile per evitare che lo snapshot corrente venga ricostruito con un anno vecchio.
  • Non vanno creati fallback artificiali come interno = 0, unita sintetiche o nominativi fittizi per colmare buchi che non esistono nella sorgente.

Regola operativa per import da blade

  • La blade admin-filament/gescon/importazione-archivi deve guidare l operatore a partire dall ultima gestione aperta e a selezionare solo le gestioni da caricare andando a ritroso.
  • Le annualita vanno mostrate in ordine decrescente, con la piu recente come default per gestioni aperte.
  • Il pulsante consigliato per il flusso completo resta Import + allineamento, usando la selezione Gestioni da caricare (ultima aperta -> ritroso).
  • Questo passaggio e importante soprattutto nei casi legacy dove cod_cond e stato riallineato a mano dal vecchio amministratore e quindi ha spostato di uno o piu posti le righe delle annualita successive.

Regola storico anni precedenti

  • Gli anni precedenti arricchiscono unita_immobiliare_nominativi come cronologia delle variazioni.
  • Non devono sovrascrivere il nominativo corrente dell'ultimo anno disponibile.
  • Le compresenze di piu comproprietari nello stesso intervallo sono lecite e vanno distinte dai duplicati veri dello stesso nominativo.
  • Il payload storico deve conservare integralmente le famiglie legacy utili alla UI e ai rebuild successivi: cond_*, catasto_*, pertinenze_*, diritti_*, inquilin_* e inquil_*.
  • Per gli inquilini il CF autorevole e condomin.inquilin_cod_fisc; la data inizio contratto autorevole e condomin.inquilin_contratto_dal.
  • Dopo una correzione anagrafica su 0016 o casi analoghi, il giro minimo coerente e:
    • php artisan gescon:import-full --stabile=<codice> --anno=<ultima_gestione> --path=<archivio> --solo=unita
    • php artisan gescon:import-full --stabile=<codice> --anno=<ultima_gestione> --path=<archivio> --solo=relazioni
    • pulizia mirata di rubrica_ruoli sullo stabile
    • php artisan gescon:sync-rubrica-ruoli --stabile=<stabile_id> --limit=5000 --create-missing --apply

Bonifica anagrafiche post-import

  • Dopo gli step unita, soggetti e diritti, eseguire la bonifica recapiti con php artisan gescon:bonifica-rubrica-canali --stabile=<codice> --apply.
  • La bonifica spezza telefoni, email e PEC salvati nello stesso campo usando separatori legacy come ;, ,, newline o /.
  • I recapiti vengono materializzati in rubrica_contatti_canali con tipo esplicito (telefono, cellulare, email, pec) e flag is_principale.
  • Regola di classificazione attuale:
    • numeri che iniziano con 3 => cellulare
    • numeri che iniziano con 0 => telefono
    • gli altri restano sul tipo di origine se gia noto
  • La push/sync Google deve leggere e scrivere anche i canali aggiuntivi, non solo i campi primari della rubrica.

Regola codice unita

  • unita_immobiliari.codice_unita e limitato a varchar(20) nel dominio corrente.
  • I codici generati dall'import devono quindi essere compatti e deterministici:
    • rimozione dei separatori interni non significativi nei segmenti legacy
    • se il codice supera ancora il limite, uso di suffisso hash corto stabile invece di troncare in modo ambiguo
  • Questa regola e necessaria per stabili come 0013, dove gli interni legacy aggregati possono produrre stringhe del tipo 0013-NGOT-107/109-C47.

Piloti verificati 08/04/2026

0002 - Carlo Alberto Racchia 2

  • anno autorevole importato: 2024 (0038)
  • unita: 61
  • soggetti: 52
  • diritti: 82 inseriti
  • QA netgescon:qa-unita-nominativi --stabile_id=8:
    • unita attive 61
    • unita senza nominativi 0
    • duplicati periodi 0
    • nessuna anomalia bloccante
  • caso da tenere distinto dai buchi veri:
    • cod_cond = 62 nello snapshot 0038 risulta come record comune (nome = CONDOMINIO (magazzino)) e non ha scala, interno, catasto_sub, piano
    • quindi oggi viene correttamente escluso dalla costruzione delle UI ordinarie se si pretende un identificativo fisico autorevole

0013 - Ottaviano 105 / Giulio Cesare 171

  • anno autorevole importato: 2026 (0015)
  • fix necessario prima del rilancio:
    • compattazione deterministica di codice_unita per non superare il limite DB
  • esito finale dopo fix:
    • unita: 26 processate, 12 aggiornate
    • soggetti: 50
    • diritti: 90 inseriti, 3 aggiornati, 39 ignorati
    • QA netgescon:qa-unita-nominativi --stabile_id=16: nessuna anomalia bloccante
  • attenzione funzionale aperta:
    • stabile con unita fisicamente/catastalmente uniche ma spezzate nel legacy per gestire piu titolari
    • la futura unione UI deve appoggiarsi a dati catastali e a logiche di cumulo/quote, non a merge distruttivi dei record legacy

0023 - Germanico 79 (legacy 8)

  • anno autorevole importato: 2025 (0096)
  • unita: 27 processate, 16 aggiornate
  • soggetti: 20
  • diritti: 25 inseriti, 15 aggiornati, 2 ignorati
  • QA netgescon:qa-unita-nominativi --stabile_id=24: nessuna anomalia bloccante

Regola straordinarie

  • Le spese straordinarie vanno considerate aperte nella gestione in cui vengono lette.
  • Codici legacy uguali presenti in anni diversi non vanno collassati tra loro: devono restare distinti almeno per anno gestione e, se serve, per numero progressivo straordinaria.

Import base

  • anno corrente legacy piu recente disponibile
  • anno precedente

Import esteso solo per straordinarie

  • includere fino a 5 anni indietro
  • fermarsi prima se non esistono MDB annuali o non esistono righe utili nelle tabelle straordinarie

Storico oltre la finestra base

  • da importare solo su richiesta o quando serve per quadrature, estratti conto storici o audit mirati

Copertura minima richiesta per rendere operativo il sistema

Lo smoke test deve confermare che per ogni stabile selezionato siano importabili almeno:

  1. nominativi completi da condomin
  2. unita immobiliari e riferimenti scala/interno/piano
  3. collegamenti proprietario/inquilino/comproprietari
  4. voci spesa e tabelle millesimali essenziali
  5. rate e incassi degli ultimi 2 anni
  6. straordinarie degli ultimi 5 anni, se presenti

Questo e il minimo per attivare senza dati monchi:

  • ticket
  • letture acqua
  • CRM/rubrica unica
  • estratti conto da cellulare
  • pagamento online rate condominiali

Smoke Test pratico per stabile

Per ogni stabile filtrato da Stabili.mdb eseguire questa checklist.

A. Controllo metadati

  • cod_stabile valorizzato
  • nome_directory valorizzato
  • CF stabile valorizzato
  • cartella legacy esistente

B. Controllo annualita

  • individuato ultimo anno disponibile
  • individuato anno precedente disponibile
  • individuate eventuali annualita straordinarie fino a -5 anni

C. Controllo file

  • esiste singolo_anno.mdb per ogni anno scelto
  • se presente, esiste generale_stabile.mdb
  • Stabili.mdb leggibile senza errori

D. Controllo tabelle minime

  • condomin leggibile
  • operazioni leggibile
  • rate leggibile
  • incassi leggibile
  • dett_tab leggibile
  • voc_spe leggibile
  • straordinarie leggibile o assente in modo coerente

E. QA dominio post-import

  • stabile creato/aggiornato correttamente
  • unita importate
  • rubrica/nominativi deduplicati
  • snapshot corrente allineato all'ultima annualita disponibile
  • legacy_cond_id valorizzato e coerente con condomin.cod_cond
  • nessuna unita attiva con interno = 0 o codice sintetico inventato
  • rate/incassi coerenti per gli anni caricati
  • nessun crash nelle pagine operative principali

Raccomandazione di rollout

Ordine consigliato:

  1. caricare elenco candidati da Stabili.mdb
  2. filtrare solo stabili con CF valorizzato
  3. per ciascuno verificare nome_directory
  4. importare ultimi 2 anni
  5. importare straordinarie fino a 5 anni
  6. eseguire QA per stabile/anno
  7. abilitare progressivamente ticket, letture, CRM e consultazione mobile

Nota importante

La tabella staging gescon_import.stabili non va usata come unica base per questa preselezione se i CF risultano non materializzati. In quel caso la fonte corretta per lo smoke test resta il Stabili.mdb reale.