netgescon-day0/docs/support/ARCHITETTURA-RUOLI-MODULI-COWORKING.md

6.4 KiB
Executable File

Architettura ruoli, moduli e coworking

Obiettivo

NetGescon non va piu letto come un applicativo monoruolo dedicato solo all amministrazione condominiale.

La direzione corretta e questa:

  1. una base dominio unica e coerente
  2. moduli attivabili sopra la stessa base dati
  3. ruoli e abilitazioni che decidono cosa una persona puo fare
  4. stessa persona abilitabile su piu funzioni operative

In pratica: uno spazio unico di coworking operativo, non una somma di mini-app scollegate.

Base dominio da tenere stabile

La base comune resta:

  • anagrafica unica dei nominativi
  • stabili, unita immobiliari, relazioni e ruoli
  • movimenti, banca, ripartizione spese, piano dei conti
  • contabilita in partita doppia
  • ticket, allegati, documenti e storico operativo

Questa base non va duplicata per mestiere o per modulo.

Cosa cambia davvero tra un uso e l altro

Quello che cambia non e il dato di partenza, ma:

  • il ruolo
  • la procedura disponibile
  • il modulo abilitato
  • il livello di permesso sul tenant, sullo stabile o sul progetto

Esempi reali della stessa persona:

  • supporto informatico
  • sviluppo software
  • revisione contabile
  • collaboratore dell amministratore
  • gestione PBX / CTI
  • supervisione di ticket e fornitori

Regola architetturale

NetGescon deve diventare:

  • domain-first
  • permission-first
  • module-first

Non deve diventare:

  • menu-first
  • pagina-first
  • ruolo singolo hard-coded

Moduli principali gia visibili o in formazione

  • Condominio e anagrafica
  • Contabilita e banca
  • Ripartizioni e tabelle millesimali
  • Ticket e Post-it operativi
  • CTI / PBX / click-to-call
  • Import legacy Gescon
  • Revisione contabile
  • Storage tenant-aware e archivi
  • Distribuzione server e manutenzione nodo

Effetto pratico sulla UI

La UI deve progressivamente convergere verso:

  1. stessa base record
  2. azioni visibili solo se abilitate
  3. moduli attivabili senza biforcare il prodotto
  4. procedure specialistiche innestate sul contesto corretto

Esempio:

  • una chiamata entra nel CRM
  • produce un Post-it
  • il Post-it puo essere assegnato a operatore, collaboratore o fornitore
  • se serve diventa ticket
  • il ticket impatta documenti, fornitore, stabile, contabilita o revisione

Sempre sullo stesso grafo dati.

Modello di abilitazione consigliato

Tre livelli distinti:

1. Ruolo base

Definisce il perimetro generale:

  • amministratore
  • collaboratore
  • fornitore
  • revisore
  • tecnico
  • sviluppatore / ops

2. Capacita operative

Definiscono le azioni concrete:

  • vedere contabilità
  • modificare ripartizioni
  • usare CTI
  • lanciare sync staging
  • aprire ticket
  • assegnare Post-it
  • gestire fornitori

3. Ambito

Definisce dove valgono:

  • tenant / amministratore
  • stabile
  • progetto
  • modulo

Conseguenza tecnica

Ogni nuova funzione dovrebbe chiedersi prima:

  1. su quale base dominio si appoggia
  2. quale modulo la ospita
  3. quale permission la abilita
  4. su quale ambito agisce

Se una funzione non risponde a queste quattro domande, rischia di diventare una pagina isolata e fragile.

Stato implementativo 2026-05-09

Per iniziare a togliere i controlli hardcoded pagina-per-pagina, in Day0 e stata introdotta una prima base ACL centrale per programmi Filament.

Componenti introdotti:

  • config/program_acl.php con catalogo programmi e ruoli default;
  • program_acl_rules come storage di override per ruolo e per utente;
  • App\Services\ProgramAclService come risolutore unico;
  • pagina Super Admin > ACL programmi per governare le eccezioni;
  • primi programmi collegati: supporto.modifiche, fornitore.ticket-operativi, mobile.dashboard.

Aggiornamento 2026-06-02:

  • il catalogo ACL programmi e stato esteso anche a contabilita.situazione-iniziale, strumenti.documenti-archivio e condomini.unita-hub;
  • le relative pagine Filament usano ora ProgramAclService come gate di accesso quando il catalogo ACL e disponibile;
  • questo porta il super-admin a governare almeno la visibilita pagina-per-pagina su contabilita iniziale, archivio documenti e hub unita, anche se la granularita solo lettura / modifica resta ancora da costruire sopra il ponte attuale.

Questo non sostituisce ancora tutto il sistema ruoli/permessi esistente, ma crea il ponte giusto per arrivare a un modello davvero permission-first invece di continuare con soli hasAnyRole([...]) sparsi.

Regola di migrazione pratica

Quando una pagina Filament oggi usa ruoli hardcoded, il percorso consigliato e:

  1. lasciare il ruolo come fallback iniziale nel catalogo ACL;
  2. introdurre una chiave programma stabile;
  3. spostare canAccess() verso ProgramAclService;
  4. mantenere gli ambiti dominio separati: ruolo base, capacita operative, contesto tenant/stabile.

Ruoli leggeri e redirect iniziale

Per i ruoli condomino, inquilino e proprietario, il login Filament puo reindirizzare verso la dashboard mobile invece della home amministrativa piena.

Questo aiuta a rispettare la regola funzionale corrente:

  • fornitori -> area operativa ticket/fornitore;
  • condomini/inquilini/proprietari -> dashboard e menu mobile essenziali;
  • amministratore -> delega operativa ai collaboratori, non governo completo di tutti i ruoli di sistema.

Stato reale ACL su ruoli leggeri

Verifica aggiornata sul codice applicativo:

  • ProgramAclService e il catalogo config/program_acl.php governano oggi solo tre chiavi: supporto.modifiche, fornitore.ticket-operativi, mobile.dashboard;
  • il ponte ACL centrale esiste quindi davvero, ma non copre ancora in modo atomico i singoli moduli utente come documenti, ticket, anagrafe o estratto conto;
  • permessi e redirect per condomino / inquilino restano ancora in parte hardcoded in gate, middleware, helper menu e servizi di visibilita.

Implicazione architetturale:

  • il modello corretto resta permission-first, ma non bisogna confondere il ponte attuale con il risultato finale;
  • prima di dichiarare chiuso il perimetro ACL dei condomini/inquilini serve migrare le singole pagine o procedure verso chiavi programma stabili, lasciando i ruoli come fallback e non come unica regola.

Decisione attuale

La direzione da seguire nelle prossime sessioni e:

  1. consolidare i moduli gia emersi invece di moltiplicare pagine parallele
  2. portare la gestione operativa sempre piu vicino alle procedure abilitate
  3. usare la pagina Supporto > Modifiche come ponte fra sviluppo, documentazione e deploy
  4. preparare la distribuzione di NetGescon su nodi separati per ambienti di debug e collaudo