diff --git a/app/Filament/Pages/UnitaImmobiliarePage.php b/app/Filament/Pages/UnitaImmobiliarePage.php index 3c3e381..f2a2703 100755 --- a/app/Filament/Pages/UnitaImmobiliarePage.php +++ b/app/Filament/Pages/UnitaImmobiliarePage.php @@ -1272,79 +1272,61 @@ public function hydrateNominativiStorici(): void return true; }); - $this->nominativiStorici = $filteredRows->map(function ($row): array { - $rawInizio = method_exists($row, 'getRawOriginal') ? $row->getRawOriginal('data_inizio') : null; - $rawFine = method_exists($row, 'getRawOriginal') ? $row->getRawOriginal('data_fine') : null; - $payload = is_array($row->legacy_payload) ? $row->legacy_payload : []; + $groupedNominativi = []; - $inizioVal = $this->normalizeLegacyDateValue($rawInizio ?? $row->data_inizio ?? null); - $fineVal = $this->normalizeLegacyDateValue($rawFine ?? $row->data_fine ?? null); + foreach ($filteredRows as $row) { + $nomUpper = mb_strtoupper(trim((string) $row->nominativo)); + $ruoloKey = (string) $row->ruolo; + $key = $ruoloKey . ':' . $nomUpper; - $inizio = $inizioVal ? Carbon::parse($inizioVal)->format('d/m/Y') : null; - $fine = $fineVal ? Carbon::parse($fineVal)->format('d/m/Y') : null; - $periodo = null; - if ($inizio && $fine) { - $periodo = 'Da ' . $inizio . ' · fino a ' . $fine; - } elseif ($inizio) { - $periodo = 'Da ' . $inizio; - } elseif ($fine) { - $periodo = 'Fino al ' . $fine; + $payload = is_array($row->legacy_payload) ? $row->legacy_payload : []; + $gYear = $payload['legacy_year'] ?? $payload['source_year'] ?? null; + + if (! isset($groupedNominativi[$key])) { + $groupedNominativi[$key] = [ + 'row' => $row, + 'nominativo' => $row->nominativo, + 'ruolo' => $row->ruolo === 'C' ? ($row->fonte === 'legacy_comproprietari' ? 'Comproprietario' : 'Proprietario') : ($row->ruolo === 'I' ? 'Inquilino' : $row->ruolo), + 'percentuale' => is_numeric($row->percentuale) ? number_format((float) $row->percentuale, 2, ',', '.') . '%' : null, + 'fonte' => $row->fonte === 'legacy_comproprietari' ? 'Legacy comproprietari' : 'Archivio storico legacy', + 'gestioni' => $gYear ? [(string) $gYear] : [], + 'payload' => $payload, + ]; } else { - $periodo = 'Da sempre'; + if ($gYear && ! in_array((string) $gYear, $groupedNominativi[$key]['gestioni'], true)) { + $groupedNominativi[$key]['gestioni'][] = (string) $gYear; + } } + } - $percentuale = null; - if (is_numeric($row->percentuale)) { - $percentuale = number_format((float) $row->percentuale, 3, ',', '.') . '%'; - } + $this->nominativiStorici = []; + foreach ($groupedNominativi as $item) { + $gList = $item['gestioni']; + $periodo = count($gList) > 1 + ? 'Gestioni ' . implode(', ', $gList) . ' (Titolare storico)' + : (count($gList) === 1 ? 'Gestione ' . $gList[0] : 'In carica'); $details = []; + $payload = $item['payload']; $dirittoLabel = trim((string) ($payload['diritto_label'] ?? '')); if ($dirittoLabel !== '') { $details[] = 'Diritto: ' . $dirittoLabel; } - $legacyYears = $payload['legacy_years'] ?? []; - if (is_array($legacyYears) && $legacyYears !== []) { - $details[] = 'Annualita: ' . implode(', ', array_map('strval', $legacyYears)); - } - $cf = trim((string) ($payload['codice_fiscale'] ?? $payload['cond_cod_fisc'] ?? $payload['inquilin_cod_fisc'] ?? $payload['inquil_cod_fisc'] ?? '')); if ($cf !== '') { $details[] = 'CF: ' . $cf; } - $contrattoDal = $this->normalizeLegacyDateValue($payload['inquilin_contratto_dal'] ?? $payload['inquil_contratto_dal'] ?? null); - if ($contrattoDal) { - $details[] = 'Contratto dal: ' . Carbon::parse($contrattoDal)->format('d/m/Y'); - } - - $catasto = array_filter([ - trim((string) ($payload['catasto_sez_urbana'] ?? '')), - trim((string) ($payload['catasto_foglio'] ?? '')), - trim((string) ($payload['catasto_particella'] ?? '')), - trim((string) ($payload['catasto_sub'] ?? '')), - trim((string) ($payload['catasto_categoria'] ?? '')), - ]); - if ($catasto !== []) { - $details[] = 'Catasto: ' . implode(' / ', $catasto); - } - - $sourceLabel = match ((string) ($row->fonte ?? '')) { - 'legacy_comproprietari' => 'Legacy comproprietari', - 'legacy_condomin' => 'Legacy condomin', - default => $row->fonte ?: null, - }; - - return [ - 'ruolo' => $this->formatNominativoStoricoRuolo((string) ($row->ruolo ?? ''), (string) ($row->fonte ?? ''), $payload), - 'nominativo' => $row->nominativo ?: '—', + $this->nominativiStorici[] = [ 'periodo' => $periodo, - 'percentuale' => $percentuale, - 'fonte' => $sourceLabel, - 'detail' => $details === [] ? null : implode(' · ', $details), + 'nominativo' => $item['nominativo'], + 'ruolo' => $item['ruolo'], + 'percentuale' => $item['percentuale'], + 'fonte' => $item['fonte'], + 'detail' => count($details) > 0 ? implode(' · ', $details) : null, ]; - })->all(); + } if (empty($this->nominativiStorici)) { $this->populateNominativiStoriciFallback(); diff --git a/skill-netgescon/directives/ANAGRAFICHE_MAPPING_LEGACY.md b/directives/ANAGRAFICHE_MAPPING_LEGACY.md similarity index 88% rename from skill-netgescon/directives/ANAGRAFICHE_MAPPING_LEGACY.md rename to directives/ANAGRAFICHE_MAPPING_LEGACY.md index 0f8b85c..445e153 100644 --- a/skill-netgescon/directives/ANAGRAFICHE_MAPPING_LEGACY.md +++ b/directives/ANAGRAFICHE_MAPPING_LEGACY.md @@ -1,4 +1,4 @@ -# Direttiva Architetturale: Mapping Anagrafico e Contabile Legacy Gescon +# Direttiva Architetturale: Mapping Anagrafico, Contabile e Catastale Legacy Gescon ## 1. Collegamento tra `condomin` e `comproprietari` - **Campo primario**: `id_cond` @@ -16,6 +16,10 @@ ## 2. Collegamento Contabile (`incassi`, `rate`, `emes_det`) - `'I'`: Inquilino / Locatario - **Funzione**: Il campo `cod_cond` accoppiato con `cond_inquil` lega in maniera univoca ciascuna riga di addebito o incasso (`incassi`, `rate`, `emes_det` in `generale_stabile.mdb`) all'anagrafica del condomino o dell'inquilino per quella specifica gestione. +## 3. Gestione Percentuali e Movimentazioni Temporali +- Le quote e percentuali di possesso (`perc_diritto_reale`, es. 50% / 50%) devono essere mantenute con precisione senza forzare la Piena Proprietà (100%) in presenza di comproprietari o contitolari. +- Ciascun avvicendamento storico va conservato nelle movimentazioni temporali per l'anno gestione di competenza. + ## 4. Dati Catastali Stabile (`Stabili.mdb` - Prefisso `AC_`) - **Estrazione da `Stabili.mdb`**: - `AC_Foglio` -> `foglio` (es. `404`) @@ -38,5 +42,3 @@ ## 5. Tabelle Millesimali da Legacy (`tabelle` e `dett_tab` in `singolo_anno.mdb ## 6. Principio di Deterministicità Assoluta (Regola Commercialista) - **Divieto di Fallback o Date Fittizie**: È tassativamente vietato inventare date fittizie (es. `01/01/2000` o `01/01/2026` ripetute) o stimare ruoli non presenti negli archivi MDB. - **Trattamento dati mancanti**: Se una relazione o una data di decorrenza non è presente negli archivi consolidati, il sistema deve riportare unicamente le gestioni storiche certe (es. `Gestioni 0004, 0005, 0909, 0912, 0913, 0914`) oppure restituire `BLOCCO_DATI`. I dati devono essere certificabili e certi al 100%. - - diff --git a/skill-netgescon/ui-wireframes/importazione-archivi.md b/skill-netgescon/ui-wireframes/importazione-archivi.md new file mode 100644 index 0000000..8d543bb --- /dev/null +++ b/skill-netgescon/ui-wireframes/importazione-archivi.md @@ -0,0 +1,40 @@ +# ASCII Wireframe - Importazione Archivi (GESCON) + +URL: `http://192.168.0.205:8000/admin-filament/gescon/importazione-archivi` + +```text ++-----------------------------------------------------------------------------------------------------------------------+ +| NETGESCON · CENTRO STELLA [ Utente: Cecilia Tordini v ] | ++-----------------------------------------------------------------------------------------------------------------------+ +| GESTIONE GESCON > IMPORTAZIONE ARCHIVI | +| | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | IMPORTAZIONE E SINCRONIZZAZIONE ARCHIVI LEGACY (GESCON MDB) | | +| | Esecuzione deterministica Web (Docker-ready) senza comandi CLI manuali | | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | PARAMETRI DI IMPORTAZIONE | | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | | | +| | Stabile da importare: Anno Gestione Legacy: | | +| | [ 0013 - OTTAVIANO 105 - GIULIO CESARE 171 v ] [ 0015 (Anno 2026) v ] | | +| | | | +| | Directory Sorgente Legacy: Opzioni Avanzate: | | +| | [ /mnt/gescon-archives/gescon/0013 ] [X] Genera Hot Backup SQLite (stabile_0013.sqlite) | | +| | [ ] Reset Staging Temp (Preserva stabili consolidati) | | +| | | | +| | [ > AVVIA IMPORTAZIONE & SINCRONIZZAZIONE STABILE 0013 ] | | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | STATO SINCRONIZZAZIONE STABILI ARCHIVIATI | | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | CODE | DENOMINAZIONE STABILE | GESTIONI | UNITA | MIRROR STAGING | COLLISIONI | ESITO IDEMPOTENTE | | +| +-------+----------------------------------+----------+-------+----------------+------------+-------------------------+ | +| | 0021 | SUPERCONDOMINIO MILIZIE 3 | 3 Anni | 212 | 694 Righe | 0 | [ OK ] 100% Sincrono | | +| | 0013 | OTTAVIANO 105 - GIULIO CESARE 171 | 12 Anni | 56 | 694 Righe | 0 | [ OK ] 100% Sincrono | | +| | 0016 | GERMANICO 96 | 6 Anni | 68 | 409 Righe | 0 | [ OK ] 100% Sincrono | | +| +-----------------------------------------------------------------------------------------------------------------+ | ++-----------------------------------------------------------------------------------------------------------------------+ +``` diff --git a/skill-netgescon/ui-wireframes/nominativi-stabile.md b/skill-netgescon/ui-wireframes/nominativi-stabile.md new file mode 100644 index 0000000..01be402 --- /dev/null +++ b/skill-netgescon/ui-wireframes/nominativi-stabile.md @@ -0,0 +1,41 @@ +# ASCII Wireframe - Nominativi e Anagrafica Unica per Stabile + +URL: `http://192.168.0.205:8000/admin-filament/condomini/nominativi` + +```text ++-----------------------------------------------------------------------------------------------------------------------+ +| NETGESCON · CENTRO STELLA [ Utente: Cecilia Tordini v ] | ++-----------------------------------------------------------------------------------------------------------------------+ +| CONDOMINI > NOMINATIVI E ANAGRAFICA UNICA | +| | +| Stabile Attivo: [ 0016 - GERMANICO 96 (ID 19) v ] Anno Gestione: [ 0914 (Anno 2026 - Attiva) v ] | +| | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | FILTRI E RICERCA ANAGRAFICA CANONICA | | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | Vista Stato Audit: Ruolo: Unità / Nominativo: Cerca Testo Libero: | | +| | (•) Attivi [ Tutti v ] [ Cerca per Scala/Int/Nome... v ] [ Es. Codice Fiscale, Nome... ] | | +| | ( ) Storico (Audit) | | +| | ( ) Tutti | | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | ANAGRAFICA UNICA E RUOLI CONSOLIDATI (Stabile 0016 - GERMANICO 96) [ + Nuovo Nominativo ] | | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | NOMINATIVO CANONICO | CF / P.IVA | RUOLO & QUOTA | UNITA IMMOBILIARE | PERIODO / GESTIONE | AZIONI | | +| +--------------------------+------------------+-------------------+-------------------+--------------------+--------+ | +| | FRANCIONI CLAUDIA / | FRNCLD49P51H501B | Comproprietà 50% | Scala B - Int. 4 | Dal 01/01/2000 | [Apri] | | +| | BARONE MICHELE | BRNMHL69M11H501K | Comproprietà 50% | (ID 321) | (Gestione 0914) | [Edit] | | +| | [Email: cecilia.tordini@gmail.com] | | | | | | +| +--------------------------+------------------+-------------------+-------------------+--------------------+--------+ | +| | SAVELLI FABIO | SVLFBA58H27H501P | Comproprietà 50% | Scala A - Int. 25 | Dal 01/01/2000 | [Apri] | | +| | [Anagrafica 000000SF] | | | (ID 334) | (Gestione 0914) | [Edit] | | +| +--------------------------+------------------+-------------------+-------------------+--------------------+--------+ | +| | BINI FLORIANA / | BNIFRN76M50H501V | Nuda proprietà | Scala A - Int. 59 | Dal 01/01/2000 | [Apri] | | +| | BINI VANESSA | BNIVSS79M46H501K | | (ID 368) | (Gestione 0914) | [Edit] | | +| +--------------------------+------------------+-------------------+-------------------+--------------------+--------+ | +| | GRILLO CAMILLO / | GRLCLL41R14H501X | Usufrutto / Nuda | Scala A - Int. 33 | Dal 01/01/2000 | [Apri] | | +| | GRILLO FRANCESCO | GRLFNC77D03H501R | | (ID 342) | (Gestione 0914) | [Edit] | | +| +-----------------------------------------------------------------------------------------------------------------+ | ++-----------------------------------------------------------------------------------------------------------------------+ +``` diff --git a/skill-netgescon/ui-wireframes/stabili.md b/skill-netgescon/ui-wireframes/stabili.md new file mode 100644 index 0000000..13e983a --- /dev/null +++ b/skill-netgescon/ui-wireframes/stabili.md @@ -0,0 +1,45 @@ +# ASCII Wireframe - Scheda Stabile e Dati Catastali + +URL: `http://192.168.0.205:8000/admin-filament/condomini/stabile` + +```text ++-----------------------------------------------------------------------------------------------------------------------+ +| NETGESCON · CENTRO STELLA [ Utente: Cecilia Tordini v ] | ++-----------------------------------------------------------------------------------------------------------------------+ +| CONDOMINI > SCHEDA STABILE | +| | +| SUPERCONDOMINIO MILIZIE 3 | +| Codice Operatore: 0021 · Viale delle Milizie 3 · Roma | +| [ Rate emesse ] [ Movimenti / Import estratto ] [ Posta stabile ] | +| | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | TAB: [ Dati generali (Active) ] [ Unità ] [ Palazzine ] [ Assicurazioni ] [ Tabelle ] [ Rate ] [ Gestioni ] ... | | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | +| +------------------------------------------------------+ +-------------------------------------------------------+ | +| | INFORMAZIONI GENERALI | | INDIRIZZO COMPLETO | | +| +------------------------------------------------------+ +-------------------------------------------------------+ | +| | ID Stabile: STAB-0021 | | Indirizzo: Viale delle Milizie 3 | | +| | Denominazione: SUPERCONDOMINIO MILIZIE 3 | | Città: Roma | | +| | Codice Fiscale: 80234560589 | | CAP: 00192 | | +| | CF Amministratore: BRNMHL69M11H501K | | Provincia: RM | | +| | Riscaldamento: [ Attivo / Disattivo ] | | Indirizzo Completo: Viale delle Milizie 3, 00192 Roma | | +| +------------------------------------------------------+ +-------------------------------------------------------+ | +| | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | DATI CATASTALI E AMMINISTRATIVI (Da Stabili.mdb e Archivio Consolidato) | | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | CATASTO PRINCIPALE | CONTRIBUTI / INPS | STATISTICHE E PALAZZINE | | +| +------------------------------------------+-------------------------------+--------------------------------------+ | +| | Codice Comune: H501 (Roma) | Posizione INPS: 8493021948 | N. Condomini: 48 | | +| | Foglio: 404 | N. Contribuente: 1029482 | N. Unità: 52 | | +| | Particella: 98 | Codice Destinatario SDI: 00000| N. Palazzine: 4 (A, B, C, D) | | +| | Sezione: H501 | PEC: milizie3@pec.it | | | +| +------------------------------------------+-------------------------------+--------------------------------------+ | +| | RIFERIMENTI CATASTALI AGGIUNTIVI / SECONDARI (Es. Palazzina D o Corpi Separati) [ + Aggiungi Sezione ] | | +| +------------------------------------------+-------------------------------+--------------------------------------+ | +| | - Ref #1: Palazzina D (Corpo Separato) | Foglio: 404 | Particella: 99 | Sezione: H501 | Sub: — | | +| | - Ref #2: Locali Commerciali Seminterrato | Foglio: 404 | Particella: 100 | Sezione: H501 | Sub: — | | +| +-----------------------------------------------------------------------------------------------------------------+ | ++-----------------------------------------------------------------------------------------------------------------------+ +``` diff --git a/skill-netgescon/ui-wireframes/unita-immobiliare.md b/skill-netgescon/ui-wireframes/unita-immobiliare.md new file mode 100644 index 0000000..4c48f35 --- /dev/null +++ b/skill-netgescon/ui-wireframes/unita-immobiliare.md @@ -0,0 +1,55 @@ +# ASCII Wireframe - Scheda Unità Immobiliare (Timeline e Tabelle Millesimali) + +URL: `http://192.168.0.205:8000/admin-filament/unita-immobiliare?unita_id=321` + +```text ++-----------------------------------------------------------------------------------------------------------------------+ +| NETGESCON · CENTRO STELLA [ Utente: Cecilia Tordini v ] | ++-----------------------------------------------------------------------------------------------------------------------+ +| UNITA IMMOBILIARI > SCHEDA UNITA IMMOBILIARE (Scala B - Int. 4 - Piano 2) | +| | +| Stabile: [ 0016 - GERMANICO 96 v ] Anno Gestione: [ 0914 (Anno 2026 - Attiva) v ] | +| Barra selezione unità: [<- Prec.] Unità: [ Scala B - Int. 4 (ID 321) v ] [Succ. ->] | +| | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | TAB: [ Riepilogo (Active) ] [ Tabelle Millesimali ] [ Estratto Conto ] [ Ripartizione Spese ] [ Dati Catasto ] | | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | TITOLARI E COMPROPRIETARI IN CARICA (Gestione 0914 - Anno 2026) | | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | - BARONE MICHELE | Proprietario | Quota: 50,00% | CF: BRNMHL69M11H501K | [Apri Anagrafica] | | +| | - FRANCIONI CLAUDIA / | Comproprietario | Quota: 50,00% | CF: FRNCLD49P51H501B | [Apri Anagrafica] | | +| | [Email: cecilia.tordini@gmail.com] | | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | TIMELINE SUBENTRI E GESTIONI ANTERIORI (Determinismo Certificato Legacy) | | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | Cronistoria titolari ed avvicendamenti per questa unità immobiliare tra le diverse gestioni | | +| | | | +| | [•] Proprietario: BARONE MICHELE (Quota: 50,00%) | | +| | Intervallo: Gestioni 0004, 0005, 0909, 0912, 0913, 0914 (Titolare storico consolidato) | | +| | | | +| | [•] Comproprietario: FRANCIONI CLAUDIA (Quota: 50,00%) | | +| | Intervallo: Gestioni 0004, 0005, 0909, 0912, 0913, 0914 (Legacy comproprietari) | | +| | CF: FRNCLD49P51H501B · Email: cecilia.tordini@gmail.com | | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | TABELLE MILLESIMALI E ATTRIBUZIONE QUOTE (Da singolo_anno.mdb: tabelle & dett_tab) | | +| +-----------------------------------------------------------------------------------------------------------------+ | +| | CODICE TABELLA | NOME TABELLA / CATEGORIA | VALORE MILLESIMI (mm) | SOGGETTO ATTRIBUTO | | +| +-----------------+------------------------------------+-----------------------+------------------------------------+ | +| | TAB.A | Tabella Millesimale A (Proprietà) | 15,2780 mm | Condomino (BARONE MICHELE/FRANCIONI| | +| | TAB.BB | Tabella Millesimale Scala B | 21,6060 mm | Condomino (BARONE MICHELE/FRANCIONI| | +| | TABA.P | Tabella Millesimale Proprietà P. | 15,2780 mm | Condomino (BARONE MICHELE/FRANCIONI| | +| | DET_18 | Detrazione Fiscali 18% | 15,2780 mm | Condomino (BARONE MICHELE/FRANCIONI| | +| | REND | Rendita Fabbricati | 15,2780 mm | Condomino (BARONE MICHELE/FRANCIONI| | +| | RI.ASS | Ripartizione Assicurazione | 15,2780 mm | Condomino (BARONE MICHELE/FRANCIONI| | +| | ANTICI | Anticipi Condominiali | 15,2780 mm | Condomino (BARONE MICHELE/FRANCIONI| | +| | L02.ST | Lavori Straordinari L02 | 15,2780 mm | Condomino (BARONE MICHELE/FRANCIONI| | +| | L03.ST | Lavori Straordinari L03 | 15,2780 mm | Condomino (BARONE MICHELE/FRANCIONI| | +| +-----------------------------------------------------------------------------------------------------------------+ | ++-----------------------------------------------------------------------------------------------------------------------+ +```