netgescon-master/docs/02-architettura-laravel/04-gestione-finanziaria/ANALISI-GESTIONE-FINANZIARIA.md
Pikappa2 480e7eafbd 🎯 NETGESCON - Setup iniziale repository completo
📋 Commit iniziale con:
-  Documentazione unificata in docs/
-  Codice Laravel in netgescon-laravel/
-  Script automazione in scripts/
-  Configurazione sync rsync
-  Struttura organizzata e pulita

🔄 Versione: 2025.07.19-1644
🎯 Sistema pronto per Git distribuito
2025-07-19 16:44:47 +02:00

21 KiB

NETGESCON - ANALISI GESTIONE FINANZIARIA AVANZATA

📋 OVERVIEW

La gestione finanziaria avanzata di NetGesCon gestisce tutti gli aspetti economici del condominio, dai fondi tradizionali alle nuove opportunità di rendita derivanti da spazi comuni e servizi innovativi.

💰 SISTEMA FONDI MULTIPLI

Struttura Gerarchica Fondi

Fondi Primari (Obbligatori per Legge)

1. FONDO ORDINARIO
   ├── Spese di gestione corrente
   ├── Manutenzioni ordinarie
   ├── Utenze parti comuni
   └── Servizi base (portineria, pulizie)

2. FONDO DI RISERVA
   ├── Accantonamento legale (minimo)
   ├── Manutenzioni straordinarie
   ├── Emergenze impreviste
   └── Riserva sicurezza

Fondi Secondari (Specifici per Servizio)

3. FONDI SPECIFICI
   ├── Fondo Ascensore
   │   ├── Manutenzione ordinaria
   │   ├── Guasti e riparazioni
   │   └── Sostituzione completa
   ├── Fondo Riscaldamento
   │   ├── Combustibile/energia
   │   ├── Manutenzione caldaia
   │   └── Efficientamento energetico
   ├── Fondo Facciata/Tetto
   │   ├── Manutenzione preventiva
   │   ├── Riparazioni localizzate
   │   └── Rifacimento completo
   └── Fondi Personalizzati
       ├── Fondo verde/giardini
       ├── Fondo sicurezza/videosorveglianza
       └── Fondo innovazione tecnologica

Fondi Terziari (Investimenti e Rendite)

4. FONDI RENDITA
   ├── Fondo Investimenti Spazi Comuni
   │   ├── Miglioramenti locali commerciali
   │   ├── Attrezzature sala eventi
   │   └── Tecnologie innovative
   ├── Fondo Redistribuzione Rendite
   │   ├── Accumulo ricavi affitti
   │   ├── Detrazione spese gestione
   │   └── Distribuzione proporzionale
   └── Fondo Sviluppo Futuro
       ├── Nuovi progetti reddituali
       ├── Efficientamento energetico
       └── Smart building technologies

🏦 GESTIONE DEPOSITI E CAUZIONI

Depositi Cauzionali Inquilini

Struttura Dati Deposito

CREATE TABLE depositi_cauzionali (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    unita_immobiliare_id BIGINT NOT NULL,
    inquilino_id BIGINT NOT NULL,
    
    -- Dati deposito
    importo_deposito DECIMAL(10,2) NOT NULL,
    numero_mensilita DECIMAL(3,1) DEFAULT 2.0,
    valuta CHAR(3) DEFAULT 'EUR',
    
    -- Date
    data_versamento DATE NOT NULL,
    data_scadenza_contratto DATE,
    data_svincolo DATE NULL,
    
    -- Interessi
    tasso_interesse DECIMAL(5,4) DEFAULT 0.0000,
    interessi_maturati DECIMAL(8,2) DEFAULT 0.00,
    
    -- Stato
    stato ENUM('attivo', 'svincolato', 'parzialmente_utilizzato', 'contenziosi') DEFAULT 'attivo',
    
    -- Garanzie aggiuntive
    fideiussione_bancaria BOOLEAN DEFAULT FALSE,
    polizza_assicurativa BOOLEAN DEFAULT FALSE,
    garante_persona_fisica BOOLEAN DEFAULT FALSE,
    
    -- Note e dettagli
    modalita_versamento VARCHAR(100),
    note_particolari TEXT,
    
    FOREIGN KEY (unita_immobiliare_id) REFERENCES unita_immobiliari(id),
    FOREIGN KEY (inquilino_id) REFERENCES persone(id)
);

Calcolo Automatico Interessi

class DepositoCauzioneService {
    
    /**
     * Calcola interessi maturati su deposito cauzionale
     * Tasso BCE + spread o tasso fisso contrattuale
     */
    public function calcolaInteressi($depositoId, $dataCalcolo = null) {
        $deposito = DepositoCauzionale::find($depositoId);
        $dataCalcolo = $dataCalcolo ?? now();
        
        $giorniMaturazione = $deposito->data_versamento->diffInDays($dataCalcolo);
        $tassoGiornaliero = $deposito->tasso_interesse / 365;
        
        return $deposito->importo_deposito * $tassoGiornaliero * $giorniMaturazione;
    }
    
    /**
     * Svincolo automatico a fine contratto
     */
    public function svincoloAutomatico($depositoId) {
        $deposito = DepositoCauzionale::find($depositoId);
        
        if ($deposito->data_scadenza_contratto <= now()) {
            $interessiFinali = $this->calcolaInteressi($depositoId);
            $importoTotale = $deposito->importo_deposito + $interessiFinali;
            
            // Genera movimento contabile automatico
            $this->creaMovimentoSvincolo($deposito, $importoTotale);
            
            $deposito->update([
                'stato' => 'svincolato',
                'data_svincolo' => now(),
                'interessi_maturati' => $interessiFinali
            ]);
        }
    }
}

Depositi Ditte e Fornitori

Cauzioni Lavori

  • Percentuale standard: 10% valore lavori
  • Durata: Fino a collaudo + 12 mesi garanzia
  • Tipologie accettate:
    • Fideiussione bancaria
    • Polizza assicurativa
    • Deposito contanti
    • Trattenuta su acconti

Gestione Automatica

class CauzioneLavoriService {
    
    /**
     * Calcola cauzione automatica in base a preventivo
     */
    public function calcolaCauzione($importoLavori, $percentuale = 10) {
        return $importoLavori * ($percentuale / 100);
    }
    
    /**
     * Svincolo graduale cauzione
     */
    public function svincoloGraduale($lavoroId) {
        $lavoro = Lavoro::find($lavoroId);
        
        switch($lavoro->stato) {
            case 'completato':
                return $this->svincolaPercentuale($lavoro, 50); // 50% a lavori completati
            case 'collaudato':
                return $this->svincolaPercentuale($lavoro, 40); // 40% a collaudo
            case 'garanzia_scaduta':
                return $this->svincolaPercentuale($lavoro, 10); // 10% finale
        }
    }
}

💼 GESTIONE TFR E COMPENSI

TFR Dipendenti (Portiere, Custode, etc.)

Calcolo Automatico TFR

class TFRService {
    
    /**
     * Calcola accantonamento TFR mensile
     * Formula: (Retribuzione Lorda Annua / 13.5) rivalutata
     */
    public function calcolaAccantonamentoMensile($dipendenteId, $anno, $mese) {
        $dipendente = Dipendente::find($dipendenteId);
        $retribuzioneLordaAnnua = $this->getRetribuzioneLordaAnnua($dipendente, $anno);
        
        $accantonamentoBase = $retribuzioneLordaAnnua / 13.5 / 12;
        $rivalutazioneISTAT = $this->getRivalutazioneISTAT($anno, $mese);
        
        return $accantonamentoBase * (1 + $rivalutazioneISTAT);
    }
    
    /**
     * Rivalutazione ISTAT automatica
     */
    public function getRivalutazioneISTAT($anno, $mese) {
        // Collegamento automatico con API ISTAT o tabelle aggiornate
        return ISTATService::getIndiceRivalutazione($anno, $mese);
    }
    
    /**
     * Calcolo TFR finale con tassazione sostitutiva
     */
    public function calcolaTFRFinale($dipendenteId, $dataLicenziamento) {
        $accantonamenti = AccantonamentoTFR::where('dipendente_id', $dipendenteId)
                                         ->where('data_accantonamento', '<=', $dataLicenziamento)
                                         ->sum('importo_rivalutato');
        
        $tassazioneSostitutiva = $this->calcolaTassazioneSostitutiva($accantonamenti);
        
        return $accantonamenti - $tassazioneSostitutiva;
    }
}

Compensi Amministratore

Fatturazione Automatica

class CompensoProfessionaleService {
    
    /**
     * Genera fattura periodica amministratore
     */
    public function generaFatturaPeriodica($stabileId, $periodo) {
        $stabile = Stabile::find($stabileId);
        $amministratore = $stabile->amministratore;
        
        $compensoBase = $this->calcolaCompensoBase($stabile);
        $compensiAggiuntivi = $this->getCompensiAggiuntivi($stabile, $periodo);
        $rimborsiSpese = $this->getRimborsiSpese($amministratore, $periodo);
        
        $fatturaData = [
            'numero' => $this->generaNumeroFattura(),
            'data_emissione' => now(),
            'importo_imponibile' => $compensoBase + $compensiAggiuntivi + $rimborsiSpese,
            'iva' => $this->calcolaIVA($compensoBase + $compensiAggiuntivi),
            'ritenuta_acconto' => $this->calcolaRitenutaAcconto($compensoBase + $compensiAggiuntivi),
            'importo_totale' => $this->calcolaImportoFinale()
        ];
        
        return FatturaProfessionale::create($fatturaData);
    }
}

🏘️ RENDITE DA SPAZI COMUNI

Sistema di Ripartizione Innovativo

Algoritmo Distribuzione Ricavi

class RenaitaSpazioComune {
    
    /**
     * Algoritmo distribuzione ricavi spazi comuni
     */
    public function distribuisciRicavi($spazioId, $importoRicavo, $periodo) {
        $spazio = SpazioComune::find($spazioId);
        $stabile = $spazio->stabile;
        
        // 1. Detrazione spese di gestione
        $speseGestione = $this->calcolaSpeseGestione($spazio, $periodo);
        $ricavoNetto = $importoRicavo - $speseGestione;
        
        // 2. Accantonamento manutenzione (configurabile)
        $percentualeAccantonamento = $spazio->percentuale_accantonamento ?? 20;
        $accantonamentoManutenzione = $ricavoNetto * ($percentualeAccantonamento / 100);
        
        // 3. Importo distribuibile
        $importoDistribuibile = $ricavoNetto - $accantonamentoManutenzione;
        
        // 4. Distribuzione per millesimi (o algoritmo personalizzato)
        $this->distribuisciPerMillesimi($stabile, $importoDistribuibile);
        
        // 5. Registrazione movimenti contabili
        $this->registraMovimentiContabili($spazio, $importoRicavo, $speseGestione, $accantonamentoManutenzione, $importoDistribuibile);
    }
    
    /**
     * Distribuzione personalizzabile
     */
    public function distribuisciPerMillesimi($stabile, $importoDistribuibile) {
        $unitaImmobiliari = $stabile->unitaImmobiliari;
        $millesimitTotali = $unitaImmobiliari->sum('millesimi_generali');
        
        foreach($unitaImmobiliari as $unita) {
            $quotaSpettante = ($unita->millesimi_generali / $millesimitTotali) * $importoDistribuibile;
            
            // Accredita su conto rate o bonifico diretto
            $this->accreditaQuota($unita, $quotaSpettante);
        }
    }
}

Contratti e Tariffari Dinamici

Gestione Contratti Locazione

CREATE TABLE contratti_spazi_comuni (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    spazio_comune_id BIGINT NOT NULL,
    inquilino_id BIGINT NOT NULL,
    
    -- Dati contratto
    numero_contratto VARCHAR(50) UNIQUE,
    data_inizio DATE NOT NULL,
    data_fine DATE NOT NULL,
    durata_mesi INT NOT NULL,
    
    -- Condizioni economiche
    canone_mensile DECIMAL(8,2) NOT NULL,
    incremento_istat BOOLEAN DEFAULT TRUE,
    percentuale_incremento_annuo DECIMAL(5,2) DEFAULT 0.00,
    
    -- Spese accessorie
    spese_condominiali_a_carico_inquilino BOOLEAN DEFAULT TRUE,
    utenze_separate BOOLEAN DEFAULT FALSE,
    
    -- Garanzie
    deposito_cauzionale DECIMAL(10,2),
    fideiussione_bancaria BOOLEAN DEFAULT FALSE,
    
    -- Clausole speciali
    diritto_riscatto BOOLEAN DEFAULT FALSE,
    clausola_recesso_anticipato BOOLEAN DEFAULT FALSE,
    preavviso_recesso_giorni INT DEFAULT 60,
    
    -- Stato
    stato ENUM('attivo', 'scaduto', 'disdetto', 'rinnovato') DEFAULT 'attivo',
    
    FOREIGN KEY (spazio_comune_id) REFERENCES spazi_comuni(id),
    FOREIGN KEY (inquilino_id) REFERENCES persone(id)
);

Tariffari Servizi a Consumo

CREATE TABLE tariffari_servizi (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    spazio_comune_id BIGINT NOT NULL,
    
    -- Tipologia tariffazione
    tipo_tariffazione ENUM('oraria', 'giornaliera', 'a_consumo', 'forfettaria'),
    
    -- Tariffe base
    tariffa_base DECIMAL(6,2) NOT NULL,
    tariffa_condomini DECIMAL(6,2), -- Sconto per condomini
    tariffa_festivi DECIMAL(6,2), -- Maggiorazione festivi
    
    -- Pacchetti e scontistiche
    sconto_abbonamento_mensile DECIMAL(5,2) DEFAULT 0.00,
    sconto_lungo_periodo DECIMAL(5,2) DEFAULT 0.00,
    
    -- Penali e cauzione
    penale_danni DECIMAL(8,2) DEFAULT 0.00,
    cauzione_utilizzo DECIMAL(8,2) DEFAULT 0.00,
    
    -- Validità
    data_validita_inizio DATE NOT NULL,
    data_validita_fine DATE,
    
    FOREIGN KEY (spazio_comune_id) REFERENCES spazi_comuni(id)
);

📊 REPORTING E DASHBOARD FINANZIARIA

Dashboard Real-Time

  • Saldo fondi in tempo reale
  • Previsioni flussi di cassa
  • Rendimenti spazi comuni
  • Scadenze depositi cauzionali
  • Alerting automatico

Report Automatici

  • Bilancio mensile dettagliato
  • Estratto conto per condomino
  • Report rendite spazi comuni
  • Analisi costi-benefici servizi
  • Proiezioni finanziarie

Integrazione Fiscale

  • Export dati per commercialista
  • Pre-compilazione 770
  • Gestione ritenute
  • IVA su prestazioni
  • Certificazioni uniche automatiche

🎯 ROADMAP IMPLEMENTAZIONE

Fase 1: Fondamenta (2-3 settimane)

  • Struttura database fondi multipli
  • Sistema base depositi cauzionali
  • Calcolo TFR automatico

Fase 2: Spazi Comuni (3-4 settimane)

  • Gestione contratti affitto
  • Algoritmi distribuzione ricavi
  • Tariffari dinamici

Fase 3: Automazioni (2-3 settimane)

  • Fatturazione automatica
  • Svincoli programmati
  • Reporting avanzato

Fase 4: Integrazione (1-2 settimane)

  • Dashboard finanziaria
  • Export fiscali
  • API bancarie (PSD2)

💡 RENDITE INNOVATIVE DA PROPRIETÀ CONDOMINIALI NUOVE IDEE

Affitti Spazi Tecnologici

  • Antenne Telefonia Mobile
    • Contratti pluriennali con operatori (TIM, Vodafone, WindTre)
    • Canoni annuali €5.000-€15.000 per antenna
    • Clausole di adeguamento automatico
    • Cessione gratuita energia elettrica
    • Manutenzione a carico gestore
    • Polizze assicurative dedicate
CREATE TABLE contratti_antenne (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    stabile_id BIGINT NOT NULL,
    spazio_comune_id BIGINT NOT NULL,
    
    -- Dati operatore
    operatore_telefonico ENUM('tim', 'vodafone', 'windtre', 'iliad', 'altro'),
    ragione_sociale VARCHAR(200),
    partita_iva VARCHAR(11),
    
    -- Contratto
    numero_contratto VARCHAR(50),
    data_inizio DATE NOT NULL,
    data_scadenza DATE NOT NULL,
    durata_anni INT DEFAULT 9,
    rinnovo_automatico BOOLEAN DEFAULT TRUE,
    preavviso_disdetta_mesi INT DEFAULT 12,
    
    -- Condizioni economiche
    canone_annuo DECIMAL(10,2) NOT NULL,
    incremento_istat BOOLEAN DEFAULT TRUE,
    incremento_percentuale_annuo DECIMAL(4,2) DEFAULT 0.00,
    deposito_cauzionale DECIMAL(10,2),
    
    -- Spese accessorie
    energia_elettrica_a_carico_gestore BOOLEAN DEFAULT TRUE,
    manutenzione_ordinaria_a_carico_gestore BOOLEAN DEFAULT TRUE,
    assicurazione_a_carico_gestore BOOLEAN DEFAULT TRUE,
    
    -- Specifiche tecniche
    tipologia_antenna ENUM('gsm', 'umts', 'lte', '5g', 'mista'),
    numero_apparati INT DEFAULT 1,
    potenza_massima_watt DECIMAL(8,2),
    superficie_occupata_mq DECIMAL(6,2),
    
    -- Autorizzazioni
    autorizzazione_comunale BOOLEAN DEFAULT FALSE,
    data_autorizzazione_comunale DATE NULL,
    numero_pratica_comunale VARCHAR(50),
    
    -- Documenti collegati
    documento_contratto_id BIGINT NULL,
    documento_autorizzazione_id BIGINT NULL,
    documento_collaudo_id BIGINT NULL,
    
    FOREIGN KEY (stabile_id) REFERENCES stabili(id),
    FOREIGN KEY (spazio_comune_id) REFERENCES spazi_comuni(id),
    FOREIGN KEY (documento_contratto_id) REFERENCES documenti_archivio(id)
);

Servizi a Pagamento Innovativi

  • Posti Biciclette Premium

    • Box chiusi e videosorvegliati
    • Tariffazione mensile/annuale
    • Servizi aggiuntivi (riparazione, pulizia)
    • App gestione prenotazioni
  • Servizi Condominiali Digitali

    • WiFi condominiale a pagamento
    • Armadietti Amazon/Poste
    • Stazioni ricarica auto elettriche
    • Servizi delivery dedicati

Gestione Rendite Speciali

class RenditeSpecialiService {
    
    /**
     * Calcola rendite annuali da contratti speciali
     */
    public function calcolaRenditeAnnuali($stabileId, $anno) {
        $rendite = [];
        
        // Antenne telefonia
        $renditeAntenne = $this->calcolaRenditeAntenne($stabileId, $anno);
        $rendite['antenne'] = $renditeAntenne;
        
        // Posti bici premium
        $renditeBici = $this->calcolaRenditeBici($stabileId, $anno);
        $rendite['bici'] = $renditeBici;
        
        // Altri servizi
        $renditeServizi = $this->calcolaRenditeServizi($stabileId, $anno);
        $rendite['servizi'] = $renditeServizi;
        
        // Totale rendite
        $totaleRendite = array_sum(array_column($rendite, 'totale'));
        
        // Calcola distribuzione per condomini
        $distribuzione = $this->calcolaDistribuzioneRendite($stabileId, $totaleRendite);
        
        return [
            'rendite_dettaglio' => $rendite,
            'totale_annuo' => $totaleRendite,
            'distribuzione_condomini' => $distribuzione,
            'spese_gestione' => $this->calcolaSpeseGestione($stabileId, $totaleRendite),
            'netto_distribuibile' => $totaleRendite * 0.9 // 10% spese gestione
        ];
    }
    
    /**
     * Distribuzione automatica rendite
     */
    public function distribuisciRenditeAutomaticamente($stabileId, $importoTotale, $periodo) {
        $stabile = Stabile::find($stabileId);
        $unitaImmobiliari = $stabile->unitaImmobiliari;
        
        // Calcola quote per millesimi
        $millesimitTotali = $unitaImmobiliari->sum('millesimi_generali');
        
        foreach ($unitaImmobiliari as $unita) {
            $quotaSpettante = ($unita->millesimi_generali / $millesimitTotali) * $importoTotale;
            
            // Crea movimento contabile
            MovimentoContabile::create([
                'stabile_id' => $stabileId,
                'unita_immobiliare_id' => $unita->id,
                'persona_id' => $unita->proprietario_principale_id,
                'tipo_movimento' => 'entrata',
                'categoria' => 'rendite_condominiali',
                'descrizione' => "Quota rendite condominiali {$periodo}",
                'importo' => $quotaSpettante,
                'data_movimento' => now(),
                'modalita_pagamento' => 'accredito_conto_rate'
            ]);
            
            // Accredita su conto rate condomino
            $this->accreditaSuContoRate($unita->id, $quotaSpettante);
        }
    }
}

4. GESTIONE FONDI CONDOMINIALI SPECIFICI

4.1 Depositi Cauzionali

  • Gestione Depositi per Locali Affittati
    • Registrazione depositi cauzionali
    • Tracking utilizzo e restituzione
    • Interessi maturati sui depositi
    • Gestione garanzie fideiussorie

4.2 TFR e Gestione Personale

  • TFR Portiere/Personale
    • Calcolo automatico TFR
    • Accantonamenti mensili
    • Gestione liquidazioni
    • Archivio contratti e buste paga

4.3 Accantonamenti per Uso Proprietà Comuni

  • Quote Uso Spazi Comuni
    • Terrazzo condominiale
    • Locali tecnici
    • Spazi pubblicitari
    • Aree di sosta/parcheggio

4.4 Rendite da Proprietà Condominiali

  • Affitti Antenne Telefonia Mobile

    • Contratti operatori telefonici
    • Canoni mensili/annuali
    • Gestione rinnovi automatici
    • Ripartizione ricavi tra condomini
  • Posti Bici e Mobilità

    • Affitto posti bici
    • Colonnine ricarica elettrica
    • Car sharing condominiale
    • Gestione accessi e prenotazioni
  • Altri Servizi Innovativi

    • Distributori automatici
    • Armadietti Amazon Locker
    • Spazi co-working temporanei
    • Servizi di pulizia premium

4.5 Gestione Centralizzata Fondi

-- Tabella fondi_condominio
CREATE TABLE fondi_condominio (
    id INT PRIMARY KEY,
    stabile_id INT,
    tipo_fondo ENUM('deposito_cauzionale', 'tfr', 'accantonamento', 'rendita'),
    descrizione VARCHAR(255),
    importo_iniziale DECIMAL(10,2),
    saldo_attuale DECIMAL(10,2),
    data_creazione DATE,
    data_scadenza DATE,
    stato ENUM('attivo', 'chiuso', 'sospeso'),
    note TEXT
);

-- Tabella movimenti_fondi
CREATE TABLE movimenti_fondi (
    id INT PRIMARY KEY,
    fondo_id INT,
    tipo_movimento ENUM('entrata', 'uscita', 'trasferimento'),
    importo DECIMAL(10,2),
    descrizione TEXT,
    data_movimento DATE,
    documento_riferimento VARCHAR(100)
);