# Direttiva Architetturale: Mapping Anagrafico, Contabile e Catastale Legacy Gescon ## 1. Collegamento tra `condomin` e `comproprietari` - **Campo primario**: `id_cond` - **Regola tassativa**: La tabella `comproprietari` deve essere collegata alla tabella `condomin` **esclusivamente** tramite il campo `id_cond`. - **Esempio Stabile 0016 (Interno B/4)**: - `condomin`: `id_cond = 47`, `cod_cond = 50`, `scala = B`, `int = 4`, `nom_cond = Barone Michele`, `perc_diritto_reale = 50` - `comproprietari`: `id_cond = 47`, `nom_cond = Francioni Claudia`, `email = cecilia.tordini@gmail.com`, `perc_diritto_reale = 50` - Risultato unificato: Int. B/4 -> **Barone Michele (50% Comproprietà)** e **Francioni Claudia / Cecilia Tordini (50% Comproprietà)**. - Divieto: È vietata qualsiasi associazione tra `comproprietari` e `condomin` basata sul campo `cod_cond`, in quanto `cod_cond` è il progressivo contabile della singola gestione e può identificare un'altra unità in quell'anno (es. `cod_cond = 47` appartiene all'interno E - Giovagnoni Marina). ## 2. Collegamento Contabile (`incassi`, `rate`, `emes_det`) - **Campo contabile per anno gestione**: `cod_cond` - **Distinzione ruolo contabile**: `cond_inquil` - `'C'`: Condomino / Proprietario - `'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`) - `AC_partic1` / `AC_partic2` -> `particella` (es. `98`, `96`, `49`) - `AC_urb_cat` -> `sezione` (es. `H501`) - `Catasto_comune` -> `codice_comune` (es. `Roma`, `H501`) - `Catasto_PR` -> `provincia` (es. `RM`) - **Gestione Sezioni Catastali Multiple / Palazzine**: - Negli stabili articolati o supercondomini (es. Milizie 3 / 0021 con Palazzina D in altra sezione/particella), la configurazione avanzata dello stabile conserva l'array `altri_riferimenti_catastali`. - Ciascun riferimento sezionale o di palazzina specifica `descrizione`, `foglio`, `particella`, `sezione`, `subalterno`, consentendo l'aggancio diretto alle rispettive unità immobiliari. ## 5. Tabelle Millesimali da Legacy (`tabelle` e `dett_tab` in `singolo_anno.mdb`) - **Tabella definizioni**: `tabelle` con campi `cod_tab`, `des_tab`, `totale`. - **Tabella dettagli ed attribuzione**: `dett_tab` con campi `cod_tab`, `id_cond`, `cond_inquil`, `mm`. - **Regola di collegamento**: - `tabelle.cod_tab` si lega a `dett_tab.cod_tab`. - `dett_tab.id_cond` si lega tassativamente a `condomin.id_cond` dell'unità immobiliare per quella specifica gestione. - `dett_tab.cond_inquil` (`'C'` Condomino, `'I'` Inquilino) attribuisce i millesimi (`mm`) al soggetto titolare. ## 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%. ## 7. Struttura Cartelle Canonica dello Stabile, Codice Univoco e Portabilità - **Codice Univoco Stabile (Non Legacy)**: Le cartelle fisiche di archivio documenti e backup SQLite sono identificate tassativamente tramite il `codice_univoco` generato dal sistema (es. `HWAGIBXK` o `0000000C`), **mai tramite il codice numerico del legacy** (es. `0001` o `0021`). - **Motivazione Architetturale**: L'uso del `codice_univoco` evita conflitti sulla stessa macchina nel caso in cui due amministratori differenti abbiano entrambi uno stabile con il medesimo identificativo legacy (es. `0001`), e garantisce la portabilità e l'interconnessione multi-tenant di fornitori, proprietari ed inquilini durante i passaggi di gestione. - **Percorsi Tipo**: - Cartella Stabile: `storage/app/private/amministratori/{codice_amministratore}/stabili/{codice_univoco}` - Documenti Stabile: `storage/app/private/amministratori/{codice_amministratore}/stabili/{codice_univoco}/documenti` - Backup & SQLite: `storage/app/private/amministratori/{codice_amministratore}/stabili/{codice_univoco}/database/backups` ## 8. Architettura Database PostgreSQL e Visualizzatore Web (Stile PhpMyAdmin) - **Database Engine**: PostgreSQL per persistenza strutturale multi-tenant e gestione passaggio gestioni tra amministratori. - **Visualizzatore Web PostgreSQL (Adminer)**: - Strumento di consultazione ed editing DB PostgreSQL accessibile via web all'URL `http://192.168.0.205:8000/adminer.php`. - Consente la consultazione immediata di tabelle, schemi, indici e record con interfaccia equivalente a PhpMyAdmin. - **Script di Inizializzazione Server DB**: `scripts/ops/setup_postgresql.sh`. ## 9. Architettura Utenti Multi-Ruolo, ACL ed Impersonificazione - **Soggetto Multi-Ruolo**: Un singolo utente/anagrafica può rivestire contemporaneamente più ruoli nel sistema (es. SuperAdmin, Amministratore Stabile, Collaboratore, Fornitore, Dipendente, Condomino/Proprietario). - **Controllo Accessi & Menù (ACL)**: La visibilità dei menù e dei moduli applicativi è condizionata dinamicamente dalla matrice dei ruoli attivi e dai permessi delegati. - **Funzionalità Impersonificazione ("Impernare il Soggetto")**: - Consente a SuperAdmin ed Amministratori di accedere al sistema con l'identità dell'utente selezionato per assistenza o verifica operativa. - Ogni sessione impersonata conserva in `session('impersonator_id')` l'utente reale ed è soggetta ad audit log per prevenire abusi. - **Ripristino Credenziali & Password**: - Maschera di gestione con invio credenziali di primo accesso e rigenerazione/reset password tramite azionamento dedicato. ## 10. Importazione Automatica Amministratori da Legacy (`Stabili.mdb`) - **Comando di importazione**: `php artisan gescon:import-amministratori-legacy` - Esegue l'estrazione automatica degli amministratori dalla tabella `Stabili` dei file MDB (`Stabili.mdb`), popola la tabella `amministratori` e crea i relativi utenti di sistema con codice univoco canonico (es. `00000001`, `00000002`). ## 11. Matrice Permessi ACL Dinamica ed Estensibile per Moduli - **Nessun Limite Rigido**: I permessi e le autorizzazioni applicative non sono cablati a codice ma gestiti in una matrice estensibile raggruppata per **Moduli Applicativi** (es. *Core, Contabilità, Assemblee, FE/Cassetto, Privacy, Catasto, Manutenzioni, CTI/PBX*). - **Estensione Futura**: L'aggiunta di un nuovo modulo o ruolo registra automaticamente i nuovi permessi delegabili senza intaccare la struttura applicativa. ## 12. Gestione Recapiti Multicanale Illimitati (`rubrica_contatti_canali`) - **Architettura Multi-Canale**: Ogni anagrafica/utente può associare un numero illimitato di contatti multicanale: - **Multi-Email**: Email Principale, Email Studio, Email Personale, PEC 1, PEC 2, ecc. - **Multi-Cellulare**: Cellulare Principale, Reperibilità Urgenze H24, WhatsApp Studio, ecc. - **Multi-Telefono Fisso**: Fisso Studio, Fisso Abitazione, Centralino VOIP (interno), Fax 1, Fax 2, ecc. - **Materializzazione**: I recapiti aggiuntivi sono conservati nella tabella `rubrica_contatti_canali` specificando `tipo`, `etichetta`, `valore` e flag `is_principale`. ## 13. Strategia Display Desktop (High-Density) & Mobile (Adaptive Responsive Cards) - **Desktop (High-Density Grid)**: Layout multi-colonna ad elevata densità informativa per sfruttare la risoluzione monitor del PC ed analizzare griglie contabili, millesimi e badge recapiti. - **Mobile (Responsive Adaptive Cards)**: Schede adattive collassabili per smartphone e tablet, ottimizzate con target touch per consultazione e gestione rapida in mobilità. ## 14. Coesistenza Temporanea e Autorità della Sorgente Legacy MDB - **Autorità della Sorgente**: Durante la fase di lavoro in contemporanea tra il vecchio gestionale MDB ed il nuovo NetGescon, **i dati del Legacy MDB sono la sorgente di verità primaria ed autoritativa**. - **Flusso di Sincronizzazione Unidirezionale**: Eventuali aggiornamenti o modifiche effettuate sul Legacy MDB sovrascrivono e sincronizzano i dati verso NetGescon (Legacy MDB $\rightarrow$ NetGescon). NetGescon non sovrascrive mai al contrario i dati del MDB originale. - **Importazione Differenziale Incrementale**: Il comando `php artisan gescon:load-mdb-staging --incremental` recepisce periodicamente le variazioni del legacy conservando la coerenza storica. ## 15. Importazione Note & Conti Correnti Bancari/Postali dallo Stabile (`Stabili.mdb`) - **Comando di importazione**: `php artisan gescon:import-stabili-bank-notes` - Estrae da `Stabili.mdb` (tabella `Stabili`): - **Note Stabile**: `note1` + `Note` (salvate nel campo `note`). - **Coordinate Bancarie 1**: `Banca`, `IBAN_Banca`, `Banca_num_cc`, `ABI`, `CAB`, `SIA`, `CIN`. - **Coordinate Bancarie 2 & Postali**: `Banca2`, `IBAN_Banca2`, `num_ccp` (CCP), `IBAN_Posta`, `num_ccp_2`, `IBAN_Posta_2`. - I dati sono strutturati ed archiviati in `stabili.configurazione_avanzata['conti_correnti']` e nei campi diretti `iban_principale`, `banca_principale`, `iban_secondario`, `banca_secondaria`. ## 16. Sistema Grafico Unificato per l'Anagrafica Fornitori (`/admin-filament/gescon/anagrafica/fornitori`) - **Design System Coerente**: La vista Fornitori condivide ed applica il design grafico unificato delle tabelle e schede anagrafiche del sistema (`FornitoriArchivio.php`). - **Wireframe ASCII di Riferimento**: `skill-netgescon/ui-wireframes/fornitori-anagrafica.md`. - **Filtri Tag & P.IVA**: Supporta la ricerca rapida per Ragione Sociale, Partita IVA, Codice Fiscale, recapiti e tag di categoria (es. *Idraulici, Elettricisti, Pulizie, Ascensori*). ## 17. Importazione Dati Fiscali Avanzati Fornitori (`Fornitori.mdb` & `Regime_fisclale.mdb`) - **Comando di importazione**: `php artisan gescon:import-fornitori-fiscal-details` - Estrae da `Fornitori.mdb` e `Regime_fisclale.mdb`: - **Ritenuta Tributo**: `Trib_1019_1020` (es. `1019`, `1020`, `1040`). - **Regime Fiscale**: `Regime_fiscale` (es. `RF01` Ordinario, `RF02` Minimi, `RF19` Forfettario). - **Cassa Professionale**: `Perc_cassa_prof` (Aliquota Cassa 4%, 5%). - **PEC & IBAN**: `PEC_Fornitore`, `Cod_IBAN`, `Intestaz_CC_esatta`. - Collegamento diretto con la pipeline di importazione delle Fatture Elettroniche (FE) e la Certificazione Unica (CU/770). ## 18. Audit Log Permanente delle Modifiche ("Chi fa cosa") - Ogni inserimento, modifica o cancellazione sui dati anagrafici, amministratori o stabili viene registrato nella tabella `audit_logs` memorizzando l'ID utente operante, il timestamp, i campi modificati ed i valori pre/post modifica. ## 19. Editing In-Place (Senza Modal Dialogs) - Le maschere CRUD (es. Amministratori `/admin-filament/superadmin/amministratori` e Fornitori `/admin-filament/anagrafica/fornitori/{record}`) consentono l'editing diretto nella stessa pagina senza aprire popup o finestre modal. ## 20. Amministratore Cecilia Tordini & Impersonificazione Istantanea - Amministratore censito con CF `TRDCCL74T52H501R` ed account `cecilia.tordini@netgescon.it` (ID #13). - Azione **Imperna** attiva nelle viste per consentire il login istantaneo contestuale da parte dei SuperAdmin senza richiedere digitazione di password.