# 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
```sql
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
```php
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
```php
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
```php
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
```php
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
```php
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
```sql
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
```sql
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

```sql
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
```php
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
```sql
-- 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)
);
```
