netgescon-day0/directives/history/walkthrough_fase7_quadratura_0021.md

14 KiB

Walkthrough delle Modifiche e Risultati dell'Importazione (Stabile 0021)

Tutte le rettifiche architetturali, i requisiti di Livello 3 e le ottimizzazioni grafiche/interfaccia UX sono stati implementati con successo.


Modifiche Apportate nella Sessione Corrente

1. UX/UI e Refix Layout Critico

  • Scroll Indipendente e Blocchi Scrolling Globale:
    • Aggiornato theme.css per forzare overflow: hidden !important; sul body principale (.fi-body.fi-body-has-navigation).
    • Configurato .fi-sidebar a 100vh/100dvh fissi con scorrimento indipendente (overflow-y: auto !important;) e posizionato l'header .fi-topbar a top: 0 eliminando margini anomali e sovrapposizioni.
    • Aggiornato legacy-admin-assets.blade.php per prioritizzare il selettore .fi-sidebar nel salvataggio e nel ripristino della posizione dello scroll tramite localStorage dopo ogni navigazione Livewire.

2. Revisione Tab Gestioni (Badge e Sanificazione Testi)

  • Modificato GestioniStabileTable.php per ripulire le diciture ridondanti (es. "Straordinaria - Straordinaria #1") dal testo visualizzato nelle colonne gestione_label e denominazione utilizzando espressioni regolari pulite.
  • Trasformata la colonna tipo_gestione in un badge colorato con associazioni di stato coerenti (success per ordinaria, info per riscaldamento, warning per straordinaria).

3. Logica Pulsanti "Indietro" Dinamica

  • Aggiornato il metodo getBackUrl() in UnitaImmobiliarePage.php e l'azione torna in FornitoreScheda.php per controllare a tre livelli:
    1. Il parametro ?back= in query string.
    2. L'URL precedente url()->previous() se non derivante da chiamate Ajax/Livewire.
    3. Fallback all'URL della pagina indice del modulo di riferimento.

4. Gestione Inquilini In-line (Conduttori Attivi)

  • Inserita una sezione interattiva "Gestione Conduttore (Inquilino Attivo in timeline)" nel tab "Persone" di unita-immobiliare.blade.php.
  • Implementata la logica di caricamento (hydrateInquilinoAttivo) e salvataggio (saveInquilino) in UnitaImmobiliarePage.php per associare/chiudere la timeline del conduttore attivo interfacciando la tabella pivot unita_anagrafica_periodo.

5. Raggruppamento Gerarchico Piano dei Conti In-line

  • Sostituita la precedente visualizzazione disgiunta delle tabelle millesimali con una tabella gerarchica integrata nel tab "Millesimi":
    • Mastro (Conto): Tabella Millesimale con input editabile per i millesimi.
    • Sottoconti (Voci di Spesa): Allineati come sotto-righe con input numerici per preventivo e consuntivo modificabili in-place.
  • Aggiunta la funzione Livewire savePianoConti() per persistere a database millesimi, preventivi e consuntivi dell'unità immobiliare (aggiornando dettaglio_millesimi e dettaglio_importi_tabella).

6. Modulo Consumi Acqua (Ingestione da acqua_dett / acqua_dett1)

  • Creato il servizio GesconCoreMigrationService.php per importare le letture contatori unendo ed esportando le tabelle acqua_dett e acqua_dett1 dal file master generale_stabile.mdb.
  • Legato ogni consumo all'unità immobiliare tramite id_cond, risolvendo l'occupante proprietario/inquilino e validando la lettura verificando la corrispondenza temporale dell'incasso cod_cond all'interno della timeline unita_anagrafica_periodo.
  • Integrato il passo come step della console acqua registrandolo in ImportGesconFullPipeline.php.

7. Estensione Pipeline - Importazione Rate da Preventivo

  • Aggiunto lo step ratePreventivo in ImportGesconFullPipeline.php per leggere la tabella rate da ciascun singolo_anno.mdb, determinare l'anno di esercizio, risolverlo nell'unità corretta tramite cod_cond e memorizzare le scadenze nella nuova tabella rate_scadenze_preventivo.
  • Corretto il bug di importazione in LoadGesconMdbToStaging.php che ometteva la mappatura del campo anno per la tabella di staging rate, provocando violazioni del vincolo NOT NULL.

Risultati dell'Importazione e Validazione

La pipeline di importazione per lo stabile 0021 è stata eseguita con successo con il comando:

php artisan gescon:import-full --stabile=0021 --path="storage/app/amministratori/HWFGITXK/legacy"

Quadratura Matematica Aggiornata

I risultati estratti dal log confermano il caricamento completo:

  • Unità Immobiliari core caricate: 212 record (risolvendo lo sdoppiamento dell'interno 8 e preservando le geometrie fisiche reali).
  • Soggetti Creati: 8 record (ora associati correttamente tramite lo step soggetti).
  • Diritti Inseriti: 276 record.
  • Gestioni Straordinarie (lavori straordinari) caricate: 10 record.
  • Millesimi (importi e dettagli): 5674 record.
  • Rate Emesse: 9437 record (importando sia le rate emesse storiche che quelle calcolate da preventivo).
  • Incassi: 2134 record.
  • Relazioni Materializzate: 1793 record inseriti.
  • Rate Preventivo Storiche: 6648 record importati in rate_scadenze_preventivo.
  • Letture Acqua Ingestite: 5 record validati e inseriti correttamente legando i consumi contatori tramite la timeline.

Modifiche Apportate nella Seconda Parte della Sessione

8. Audit Quadratura Millesimi e Audit 1:1 Unità

  • Allineamento & Integrità:
    • Implementata in TabelleMillesimaliArchivio.php la logica di audit completo. Per ogni tabella millesimale viene calcolata a runtime la somma delle righe inserite in dettaglio_millesimi confrontandola con il totale atteso (es. 1000.0).
    • Eseguito un audit 1:1 verificando che tutti i record di staging della tabella condomin (MDB) siano presenti e associati in NetGescon tramite legacy_cond_id.
    • Visualizzato in tabelle-millesimali.blade.php un badge di allerta critico rosso e un pannello premium con i dettagli di tutte le anomalie riscontrate (tabelle fuori quadratura e unità orfane/mancanti).

9. Upload Drive Multi-Tenant Hub Contratti e Sinistri

  • HUB Contratti:
    • Aggiunto il componente FileUpload in ContrattiHub.php configurato per caricare i file PDF in base alla struttura multi-tenant [Codice_Amministratore]/[Codice_Univoco_Stabile]/contratti.
    • Modificato il processo di inserimento contratto in modo che, se viene caricato un PDF, venga creata automaticamente un'entità Documento collegata.
  • Flusso Sinistri e Pratica Legale:
    • Aggiornato TicketGestione.php e ticket-gestione.blade.php per gestire la stima dell'importo del sinistro e memorizzarla nei metadati JSON.
    • Implementata la registrazione automatica in Partita Doppia (inserendo i movimenti dare/avere in operazioni_contabili) sul conto "Crediti vs Assicurazione" (ATT_CRED_ASS) e "Fondo Sospeso" (PASS_FND_SOSP) per la gestione contabile attiva.
    • Aggiunto il pannello interattivo per l'apertura in-line della pratica legale (con avvocato incaricato e note relative).

10. Cumulo Teste Assemblea e Filtro Convocati

  • Esclusione Inquilini (I):
    • Modificato il metodo sincronizzaNominativi in GestioneAssemblea.php per escludere tassativamente i conduttori/inquilini (ruolo I) dalle convocazioni e votazioni delle assemblee.
  • Cumulo Teste:
    • Aggiornato getVotiLiveStatsProperty per raggruppare e contare i voti favorevoli, contrari e astenuti basandosi sulle teste reali (soggetti unici soggetto_id), sommando i millesimi complessivi di tutte le proprietà collegate.

11. ODG Sospesi ed Eredità Votazioni

  • Tabella ODG Sospesi:
    • Creata la migrazione per aggiungere le colonne esito_votazione, note_delibera e imported_to_id in assemblee_ordine_giorno.
    • Aggiunto il tab "Punti OdG Sospesi" in AssembleeHub.php e assemblee-hub.blade.php per mostrare i punti non deliberati o sospesi delle assemblee passate.
    • Inserito in gestione-assemblea.blade.php un box di avviso che permette l'importazione in un clic di questi punti ereditandone i dettagli.

12. Modulo Importatore Contatori e Staging Orfani

  • Staging & Auto-Apprendimento:
    • Creata la tabella contatori_orfani_staging tramite migrazione.
    • Creato ContatoriImportService.php per il parsing flessibile del file CSV. Se una matricola non corrisponde a nessuna unità immobiliare dello stabile, la lettura viene salvata temporaneamente come orfana.
    • Integrata in ServiziStabileArchivio.php la griglia interattiva sotto la nuova Tab "Orfani Contatori".
    • Una volta effettuata l'associazione manuale, il sistema salva direttamente la matricola nella colonna acqua_contatore_seriale (auto-apprendimento) e sposta le letture nella tabella delle letture reali stabile_servizio_letture.

13. Risoluzione dei Crash Sintattici Filament V3 e SQLSTATE

  • GestioniStabileTable: Rimosso il metodo formatStateUsing() non supportato da TextInputColumn sulla colonna denominazione, risolvendo definitivamente i crash Livewire correlati a Filament V3.
  • UnitaImmobiliariArchivio: Corretto il join sulla tabella di soggetti legacy modificandola con anagrafiche (chiave anagrafica_id) per consentire la visualizzazione dello storico anagrafico delle unità senza sollevare errori di tabella mancante SQLSTATE.

14. Normalizzazione Date (Bug Y2K e Swap Mese/Giorno)

  • Deterministic Y2K Parser: Implementato un parser deterministico che analizza le scadenze del preventivo o i timestamp storici gestendo l'anno a due cifre (>=70 -> 19XX, <=25 -> 20XX).
  • Swap Mese/Giorno: Rileva dinamicamente i formati misti anglosassoni (MM/DD/YYYY) e continentali (DD/MM/YYYY) forzando lo swap se il mese estratto supera 12 (es. 23 interpretato come mese per la data 23/10/2024). Integrato sia in fase di caricamento staging (LoadGesconMdbToStaging.php) sia in fase di pipeline (ImportGesconFullPipeline.php).

15. Divisione Millesimi e Chiavi Composte

  • Scala Decimali Millesimi: Aggiunta la divisione automatica per 10000.0 delle somme millesimali totali estrattate da staging superiori a 9999 (recuperando correttamente i 4 decimali storici omessi dall'importatore legacy).
  • Join Composite condomin: Modificati tutti i join eseguiti sulla tabella di staging condomin legandoli tramite le chiavi composite (id_cond, cod_stabile, legacy_year) per isolare correttamente i record annuali del condomino senza creare duplicati o conflitti. Risolte le unità nel caricamento millesimi cercando prima la colonna univoca cod_cond.
  • Suffisso voci_spesa: Sdoppiati i codici dei sottoconti ordinari appendendo il nome della tabella millesimale come suffisso ([CODICE].[TABELLA]) e filtrando le query dei movimenti in prima nota per gestione_contabile_id onde scongiurare collisioni o duplicazioni.

16. Rielaborazione Scadenziari di Preventivo

  • Rate Preventivo Storiche: Riscritta la logica di stepRatePreventivo escludendo il conio Lire e forzando la quadratura contro dett_tab.prev_euro (con riallineamento delle discrepanze decimali < €2.0 sull'ultima rata ed auto-generazione di 4 scadenze trimestrali qualora lo scadenziario fosse orfano/mancante).

17. UI/UX: Header Compatti e Pagina di Audit

  • Header a riga singola: Sostituiti i vecchi banner descrittivi voluminosi con un box orizzontale a riga singola compatto (contenente denominazione dello stabile, esercizio attivo e badge tipologia) in servizi-stabile-archivio.blade.php, riscaldamento-stabile-archivio.blade.php e tabelle-millesimali.blade.php.
  • Menu Audit e Revisione: Creata la pagina Filament AuditQuadraturePage.php e la sua view audit-quadrature.blade.php nel namespace Gescon per analizzare ed esporre le anomalie 1:1, tabelle sbilanciate e discrepanze millesimali delle assemblee storiche rispetto all'MDB legacy.

Validazione Finale e Esecuzione con Successo della Pipeline

Il test finale di esecuzione per lo stabile 0021 ha avuto esito positivo (Exit Code 0). Tutte le rettifiche architetturali, i parser Y2K, le quadrature matematiche ed i join composite si sono comportati esattamente come previsto, archiviando il test di importazione senza errori ed aggiornando con successo i record della base dati locale. La compilazione dei file Blade è stata anch'essa validata con successo senza alcun warning.