netgescon-day0/docs/00-IMPORT/RELAZIONI-COMPLETE-FLUSSO-FINANZIARIO.md

307 lines
11 KiB
Markdown

# RELAZIONI COMPLETE GESCON - FLUSSO FINANZIARIO INTEGRATO
## 🔄 FLUSSO COMPLETO: RATE → INCASSI → BANCA → RICONCILIAZIONE
### TABELLE CRITICHE IDENTIFICATE
#### 1. TABELLA INCASSI (440 records)
- **Collegamento Rate**: `n_riferimento` + `anno_rif` + `n_mese` + `o_r_s`
- **Collegamento Condomini**: `cod_cond``condomin.cod_cond`
- **Collegamento Conti**: `cod_cassa``Anagr_casse.Codice`
- **Collegamento Straordinarie**: `n_stra``straordinarie.id_stra`
**STRUCTURE**:
```sql
incassi.cod_cond = condomin.cod_cond
incassi.cod_cassa = Anagr_casse.Codice
incassi.n_stra = straordinarie.id_stra
incassi.n_riferimento = rate.id_rate (cross-reference)
```
#### 2. TABELLA ANAGR_CASSE (Conti Bancari)
- **ID**: `Id_cassa`
- **Codice**: `Codice` ("CON" = Contanti, "CCB" = Conto Corrente Bancario)
- **Descrizione**: `Descrizione` ("UNICREDIT CC N.000104951005")
- **Saldi**: `Saldo_iniziale` + `Saldo_iniziale_EURO`
**CRITICAL RELATIONS**:
```sql
Anagr_casse.Codice = operazioni.cod_cassa
Anagr_casse.Codice = incassi.cod_cassa
```
#### 3. TABELLA RUBRICA (Fornitori/Anagrafiche)
- **Fornitori**: Tutti i soggetti esterni per fatture
- **Professionisti**: Amministratori, tecnici, avvocati
- **Collegamento**: `operazioni.cod_ben``Rubrica.ID`
### FILE UNICREDIT - PATTERN ANALYSIS
Dal file `250410 da 200101 a 250410 Unicredit.wri`:
**FORMATO STANDARD**:
```
Data;Valuta;Descrizione;Euro;Caus.
02/01/2020;31/12/2019;IMPOSTA BOLLO CONTO CORRENTE DPR642/72-DM24/5/2012;-25,21;219
02/01/2020;02/01/2020;BONIFICO A VOSTRO FAVORE BONIFICO SEPA DA DUCA CARLO PER rata 1 risc. 2019-2020;139,00;048
```
**PATTERN ENTRATE (Caus. 048)**:
- `BONIFICO A VOSTRO FAVORE BONIFICO SEPA DA [NOME] PER [CAUSALE]`
- Causali riconosciute:
- `rata 1 risc. 2019-2020` → Riscaldamento rata 1
- `1 RATA CONDOMINIALE 2020` → Rate ordinarie
- `B18 1 RATA COND 2020` → Scala B, interno 18
- `MANNINO INTERNO 1 SCALA C` → Identificazione diretta UI
**PATTERN USCITE (Caus. 219, etc.)**:
- `IMPOSTA BOLLO CONTO CORRENTE` → Commissioni bancarie
- `BONIFICO SEPA A [FORNITORE]` → Pagamenti fornitori
### ALGORITMO DI MATCHING COMPLETO
#### STEP 1: Pattern Recognition per Entrate
```regex
BONIFICO.*DA\s+([A-Z\s]+)\s+PER\s+(.+)
→ $1 = NOME_PAGATORE, $2 = CAUSALE
CAUSALE PATTERNS:
- (\w)\s*-?\s*(\d+)\s+(RATA|RT\.)\s+(COND|RISC) → Scala=$1, Interno=$2
- INTERNO\s+(\d+)\s+SCALA\s+([A-D]) → Interno=$1, Scala=$2
- (\d+)\s+RATA\s+(CONDOMINIALE|RISCALDAMENTO) → Numero rata
- (20\d{2})[/-](20\d{2}) → Anno competenza
```
#### STEP 2: Riconciliazione Automatica
1. **Match Nome**: `movimenti_bancari.controparte_nome``condomin.nom_cond`
2. **Match UI**: Scala + Interno → `unita_immobiliari.identificativo`
3. **Match Importo**: `movimenti_bancari.importo` = `rate.importo_dovuto_euro`
4. **Match Data**: `movimenti_bancari.data_operazione``rate.dt_empag` (±30 giorni)
#### STEP 3: Collegamento Contabile
```sql
-- Riconciliazione automatica
UPDATE movimenti_bancari SET
unita_immobiliare_id = (SELECT id FROM unita_immobiliari WHERE scala_estratta = movimento.scala AND interno_estratto = movimento.interno),
soggetto_id = (SELECT soggetto_id FROM unita_immobiliari WHERE id = movimento.unita_immobiliare_id),
stato_riconciliazione = 'RICONCILIATO',
contabilita_id = (SELECT id FROM contabilita WHERE movimento_bancario_id = movimento.id)
WHERE confidence_level >= 95.00;
```
---
## 🗄️ SCHEMA DATABASE INTEGRATO
### TABELLE DA CREARE/AGGIORNARE
#### 1. **conti_bancari** (estende Anagr_casse)
```sql
CREATE TABLE conti_bancari (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
gestione_id BIGINT NOT NULL,
-- Dati Conto (da Anagr_casse)
codice_gescon VARCHAR(10) NOT NULL, -- Codice originale (CCB, CON)
denominazione VARCHAR(255) NOT NULL, -- UNICREDIT CC N.000104951005
iban VARCHAR(34) NULL, -- IT30Q0200805170000104951005
numero_conto VARCHAR(20) NULL, -- 000104951005
banca_denominazione VARCHAR(255) DEFAULT 'UNICREDIT',
banca_abi VARCHAR(5) DEFAULT '02008',
banca_cab VARCHAR(5) DEFAULT '05170',
-- Saldi
saldo_iniziale DECIMAL(12,2) DEFAULT 0,
saldo_attuale DECIMAL(12,2) DEFAULT 0,
saldo_riconciliato DECIMAL(12,2) DEFAULT 0,
-- Configurazione Import
formato_import ENUM('UNICREDIT_WRI','CBI','MT940') DEFAULT 'UNICREDIT_WRI',
pattern_separatore VARCHAR(5) DEFAULT ';',
-- Collegamenti
piano_conto_id BIGINT NOT NULL, -- FK piano_conti.id
FOREIGN KEY (gestione_id) REFERENCES gestioni(id),
FOREIGN KEY (piano_conto_id) REFERENCES piano_conti(id),
UNIQUE KEY unique_codice_gestione (codice_gescon, gestione_id)
);
```
#### 2. **incassi** (da tabella Gescon)
```sql
CREATE TABLE incassi (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
gestione_id BIGINT NOT NULL,
-- Dati Gescon
id_incasso_gescon INT NOT NULL, -- ID_incasso originale
-- Collegamenti Core
condomino_id BIGINT NOT NULL, -- FK condomini.id (da cod_cond)
unita_immobiliare_id BIGINT NOT NULL, -- FK unita_immobiliari.id
conto_bancario_id BIGINT NOT NULL, -- FK conti_bancari.id (da cod_cassa)
-- Dettagli Incasso
numero_riferimento INT NOT NULL, -- n_riferimento (link a rate)
anno_riferimento YEAR NOT NULL, -- anno_rif
numero_mese TINYINT NOT NULL, -- n_mese (1-12)
tipo_rata ENUM('O','R','S') NOT NULL, -- o_r_s (Ordinaria/Riscaldamento/Straordinaria)
numero_straordinaria INT NULL, -- n_stra (se S)
-- Importi
importo_pagato_lire BIGINT DEFAULT 0, -- importo_pagato (legacy)
importo_pagato DECIMAL(10,2) NOT NULL, -- importo_pagato_euro
-- Date
data_pagamento DATE NOT NULL, -- dt_empag
data_registrazione TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-- Collegamenti Riconciliazione
movimento_bancario_id BIGINT NULL, -- FK movimenti_bancari.id
contabilita_id BIGINT NULL, -- FK contabilita.id
-- Stato
stato_riconciliazione ENUM('NON_RICONCILIATO','RICONCILIATO','PARZIALE') DEFAULT 'NON_RICONCILIATO',
riconciliato_automaticamente BOOLEAN DEFAULT FALSE,
confidence_score DECIMAL(5,2) DEFAULT 0,
-- Audit
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (gestione_id) REFERENCES gestioni(id),
FOREIGN KEY (condomino_id) REFERENCES condomini(id),
FOREIGN KEY (unita_immobiliare_id) REFERENCES unita_immobiliari(id),
FOREIGN KEY (conto_bancario_id) REFERENCES conti_bancari(id),
FOREIGN KEY (movimento_bancario_id) REFERENCES movimenti_bancari(id),
FOREIGN KEY (contabilita_id) REFERENCES contabilita(id),
INDEX idx_riferimento (numero_riferimento, anno_riferimento),
INDEX idx_condomino (condomino_id),
INDEX idx_data_pagamento (data_pagamento),
INDEX idx_riconciliazione (stato_riconciliazione),
UNIQUE KEY unique_incasso_gescon (id_incasso_gescon, gestione_id)
);
```
#### 3. **fornitori** (da Rubrica Gescon)
```sql
CREATE TABLE fornitori (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
gestione_id BIGINT NOT NULL,
-- Dati Gescon
id_rubrica_gescon INT NULL, -- ID originale
-- Anagrafica
denominazione VARCHAR(255) NOT NULL, -- Nome
codice_fiscale VARCHAR(16) NULL, -- Cod_fisc
partita_iva VARCHAR(11) NULL, -- Part_iva
-- Indirizzo
indirizzo VARCHAR(255) NULL, -- Indirizzo
cap VARCHAR(5) NULL, -- Cap
citta VARCHAR(100) NULL, -- Citta
provincia VARCHAR(2) NULL, -- Pr
-- Contatti
telefono_1 VARCHAR(20) NULL, -- tel_1
telefono_2 VARCHAR(20) NULL, -- tel_2
email VARCHAR(255) NULL,
pec VARCHAR(255) NULL,
-- Categorizzazione
tipologia ENUM('FORNITORE','PROFESSIONISTA','BANCA','ENTE','ALTRO') DEFAULT 'FORNITORE',
categoria_spesa VARCHAR(50) NULL, -- Elettricità, Pulizie, Manutenzione, etc.
-- Configurazione Pagamenti
giorni_pagamento INT DEFAULT 30,
modalita_pagamento ENUM('BONIFICO','CONTANTI','ASSEGNO','RID') DEFAULT 'BONIFICO',
iban_fornitore VARCHAR(34) NULL,
-- Collegamenti Automatici
piano_conto_preferito_id BIGINT NULL, -- FK piano_conti.id
auto_match_pattern VARCHAR(255) NULL, -- Pattern per riconoscimento automatico
-- Stato
attivo BOOLEAN DEFAULT TRUE,
note TEXT NULL,
-- Audit
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (gestione_id) REFERENCES gestioni(id),
FOREIGN KEY (piano_conto_preferito_id) REFERENCES piano_conti(id),
INDEX idx_gestione (gestione_id),
INDEX idx_denominazione (denominazione),
INDEX idx_codice_fiscale (codice_fiscale),
INDEX idx_partita_iva (partita_iva),
INDEX idx_tipologia (tipologia),
UNIQUE KEY unique_rubrica_gescon (id_rubrica_gescon, gestione_id)
);
```
---
## 🔄 PROCESSO DI RICONCILIAZIONE COMPLETO
### FASE 1: Import Dati Base
```bash
# 1. Import conti bancari da Anagr_casse
php artisan import:gescon-conti-bancari
# 2. Import incassi da tabella incassi
php artisan import:gescon-incassi
# 3. Import fornitori da Rubrica
php artisan import:gescon-fornitori
```
### FASE 2: Import Movimenti Bancari
```bash
# 4. Import movimenti bancari da file Unicredit
php artisan import:unicredit-wri /home/michele/netgescon/docs/02-architettura-laravel/dati-test/milizie\ 3/250410\ da\ 200101\ a\ 250410\ Unicredit.wri --gestione=GES00148
```
### FASE 3: Riconciliazione Automatica
```bash
# 5. Pattern recognition e matching
php artisan reconcile:movimenti-automatico --gestione=GES00148 --confidence-min=90
# 6. Verifica manuale sospesi
php artisan reconcile:review-manual --gestione=GES00148
```
### FASE 4: Quadratura e Report
```bash
# 7. Quadratura rate emesse vs incassate
php artisan report:quadratura-rate --gestione=GES00148 --anno=2024
# 8. Solleciti automatici
php artisan generate:solleciti --gestione=GES00148 --scaduti-da=30
```
---
## 📊 DASHBOARD RICONCILIAZIONE
### KPI PRINCIPALI
- **Rate Emesse**: Totale euro da incassare per periodo
- **Rate Incassate**: Totale euro riconciliati con banca
- **Gap Incassi**: Differenza rate emesse - incassate
- **Movimenti Non Riconciliati**: Entrate bancarie senza match
- **Confidence Score Medio**: Qualità matching automatico
### ALERT AUTOMATICI
- Movimenti > €500 non riconciliati
- Incassi duplicati (stesso condomino/periodo)
- Pattern non riconosciuti (confidence < 50%)
- Discrepanze importi > 5%
---
**NEXT PHASE**: Implementare import completo e sistema di riconciliazione automatica integrando tutti i flussi identificati.