netgescon-day0/docs/00-IMPORT/analyze_financial_flow.sh

252 lines
11 KiB
Bash
Executable File

#!/bin/bash
# SCRIPT ESTRAZIONE COMPLETA FLUSSO FINANZIARIO GESCON
# Include: Incassi, Conti Bancari, Fornitori, Relazioni Rate-Incassi-Banca
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
GESCON_DIR="/home/michele/netgescon/docs/02-architettura-laravel/Gescon/0021/0001"
UNICREDIT_FILE="/home/michele/netgescon/docs/02-architettura-laravel/dati-test/milizie 3/250410 da 200101 a 250410 Unicredit.wri"
OUTPUT_DIR="/home/michele/netgescon/docs/000-IMPORT/estratti"
ANALYSIS_LOG="/home/michele/netgescon/docs/000-IMPORT/analisi_flusso_finanziario.log"
mkdir -p "$OUTPUT_DIR"
echo "=== ANALISI FLUSSO FINANZIARIO COMPLETO ===" | tee "$ANALYSIS_LOG"
echo "Source Gescon: $GESCON_DIR/singolo_anno.mdb" | tee -a "$ANALYSIS_LOG"
echo "Source Unicredit: $UNICREDIT_FILE" | tee -a "$ANALYSIS_LOG"
echo "Started: $(date)" | tee -a "$ANALYSIS_LOG"
echo "" | tee -a "$ANALYSIS_LOG"
cd "$GESCON_DIR"
# 1. ESTRAZIONE TABELLE FINANZIARIE CORE
echo "=== FASE 1: TABELLE FINANZIARIE CORE ===" | tee -a "$ANALYSIS_LOG"
echo "Extracting incassi (payments received)..." | tee -a "$ANALYSIS_LOG"
mdb-export singolo_anno.mdb incassi > "$OUTPUT_DIR/incassi_completo.csv"
INCASSI_COUNT=$(cat "$OUTPUT_DIR/incassi_completo.csv" | wc -l)
echo "- incassi: $((INCASSI_COUNT - 1)) records" | tee -a "$ANALYSIS_LOG"
echo "Extracting Anagr_casse (bank accounts)..." | tee -a "$ANALYSIS_LOG"
mdb-export singolo_anno.mdb Anagr_casse > "$OUTPUT_DIR/anagr_casse.csv"
CASSE_COUNT=$(cat "$OUTPUT_DIR/anagr_casse.csv" | wc -l)
echo "- Anagr_casse: $((CASSE_COUNT - 1)) records" | tee -a "$ANALYSIS_LOG"
echo "Extracting Rubrica (suppliers/contacts)..." | tee -a "$ANALYSIS_LOG"
mdb-export singolo_anno.mdb Rubrica > "$OUTPUT_DIR/rubrica_fornitori.csv"
RUBRICA_COUNT=$(cat "$OUTPUT_DIR/rubrica_fornitori.csv" | wc -l)
echo "- Rubrica: $((RUBRICA_COUNT - 1)) records" | tee -a "$ANALYSIS_LOG"
# 2. ANALISI RELAZIONI CRITICHE
echo "" | tee -a "$ANALYSIS_LOG"
echo "=== FASE 2: ANALISI RELAZIONI FINANZIARIE ===" | tee -a "$ANALYSIS_LOG"
# Analisi codici cassa negli incassi
echo "Analyzing cod_cassa distribution in incassi..." | tee -a "$ANALYSIS_LOG"
tail -n +2 "$OUTPUT_DIR/incassi_completo.csv" | cut -d',' -f18 | sort | uniq -c | while read count cod_cassa; do
echo " - Cassa $cod_cassa: $count incassi" | tee -a "$ANALYSIS_LOG"
done
# Analisi codici cassa nelle operazioni (se già estratte)
if [ -f "$OUTPUT_DIR/operazioni_contabili.csv" ]; then
echo "Analyzing cod_cassa distribution in operazioni..." | tee -a "$ANALYSIS_LOG"
tail -n +2 "$OUTPUT_DIR/operazioni_contabili.csv" | cut -d',' -f14 | sort | uniq -c | while read count cod_cassa; do
echo " - Cassa $cod_cassa: $count operazioni" | tee -a "$ANALYSIS_LOG"
done
fi
# Analisi conti bancari configurati
echo "Analyzing bank accounts configuration..." | tee -a "$ANALYSIS_LOG"
cat "$OUTPUT_DIR/anagr_casse.csv" | while IFS=',' read -r id_cassa codice descrizione saldo_iniziale saldo_euro tipo_riga; do
if [[ "$codice" != "Codice" ]]; then # Skip header
echo " - $codice: $descrizione (Saldo: €$saldo_euro)" | tee -a "$ANALYSIS_LOG"
fi
done
# 3. ANALISI CORRELAZIONI TEMPORALI
echo "" | tee -a "$ANALYSIS_LOG"
echo "=== FASE 3: CORRELAZIONI TEMPORALI ===" | tee -a "$ANALYSIS_LOG"
# Distribuzione incassi per anno
echo "Analyzing incassi by year..." | tee -a "$ANALYSIS_LOG"
tail -n +2 "$OUTPUT_DIR/incassi_completo.csv" | cut -d',' -f5 | sort | uniq -c | while read count anno; do
echo " - Anno $anno: $count incassi" | tee -a "$ANALYSIS_LOG"
done
# Distribuzione incassi per mese (se presenti date)
echo "Analyzing incassi temporal distribution..." | tee -a "$ANALYSIS_LOG"
tail -n +2 "$OUTPUT_DIR/incassi_completo.csv" | cut -d',' -f15 | grep -E '[0-9]{2}/[0-9]{2}/[0-9]{2}' | cut -d'/' -f1,2 | sort | uniq -c | head -10 | while read count mese_anno; do
echo " - Periodo $mese_anno: $count incassi" | tee -a "$ANALYSIS_LOG"
done
# 4. ANALISI FILE UNICREDIT
echo "" | tee -a "$ANALYSIS_LOG"
echo "=== FASE 4: ANALISI FILE UNICREDIT ===" | tee -a "$ANALYSIS_LOG"
if [ -f "$UNICREDIT_FILE" ]; then
echo "Analyzing Unicredit WRI file..." | tee -a "$ANALYSIS_LOG"
# Cerca l'inizio dei dati CSV
CSV_START_LINE=$(grep -n "Data;Valuta;Descrizione;Euro;Caus." "$UNICREDIT_FILE" | head -1 | cut -d':' -f1)
if [ -n "$CSV_START_LINE" ]; then
TOTAL_MOVEMENTS=$(tail -n +$((CSV_START_LINE + 1)) "$UNICREDIT_FILE" | grep -E '^[0-9]{2}/[0-9]{2}/[0-9]{4}' | wc -l)
echo " - Total bank movements: $TOTAL_MOVEMENTS" | tee -a "$ANALYSIS_LOG"
# Analisi causali bancarie
echo " - Bank transaction codes:" | tee -a "$ANALYSIS_LOG"
tail -n +$((CSV_START_LINE + 1)) "$UNICREDIT_FILE" | grep -E '^[0-9]{2}/[0-9]{2}/[0-9]{4}' | cut -d';' -f5 | sort | uniq -c | while read count code; do
case "$code" in
"048") echo " - $code: $count transactions (BONIFICO ENTRATA)" | tee -a "$ANALYSIS_LOG" ;;
"219") echo " - $code: $count transactions (IMPOSTA BOLLO)" | tee -a "$ANALYSIS_LOG" ;;
*) echo " - $code: $count transactions" | tee -a "$ANALYSIS_LOG" ;;
esac
done
# Analisi importi
echo " - Amount analysis:" | tee -a "$ANALYSIS_LOG"
TOTAL_ENTRATE=$(tail -n +$((CSV_START_LINE + 1)) "$UNICREDIT_FILE" | grep -E '^[0-9]{2}/[0-9]{2}/[0-9]{4}' | grep ';048$' | cut -d';' -f4 | tr ',' '.' | awk '{sum += $1} END {printf "%.2f", sum}')
TOTAL_USCITE=$(tail -n +$((CSV_START_LINE + 1)) "$UNICREDIT_FILE" | grep -E '^[0-9]{2}/[0-9]{2}/[0-9]{4}' | grep -v ';048$' | cut -d';' -f4 | grep '^-' | tr ',' '.' | sed 's/-//' | awk '{sum += $1} END {printf "%.2f", sum}')
echo " - Total entrate (048): €$TOTAL_ENTRATE" | tee -a "$ANALYSIS_LOG"
echo " - Total uscite: €$TOTAL_USCITE" | tee -a "$ANALYSIS_LOG"
# Estrazione sample per pattern matching
echo " - Sample entries for pattern analysis:" | tee -a "$ANALYSIS_LOG"
tail -n +$((CSV_START_LINE + 1)) "$UNICREDIT_FILE" | grep ';048$' | head -5 | while IFS=';' read data valuta descrizione importo caus; do
echo " - $data: €$importo - $(echo "$descrizione" | cut -c1-50)..." | tee -a "$ANALYSIS_LOG"
done
else
echo " - WARNING: Could not find CSV data start in Unicredit file" | tee -a "$ANALYSIS_LOG"
fi
else
echo " - WARNING: Unicredit file not found at $UNICREDIT_FILE" | tee -a "$ANALYSIS_LOG"
fi
# 5. MAPPATURA RELAZIONI CROSS-TABLE
echo "" | tee -a "$ANALYSIS_LOG"
echo "=== FASE 5: MAPPATURA RELAZIONI CROSS-TABLE ===" | tee -a "$ANALYSIS_LOG"
# Correlazione condomini in incassi vs condomini master
if [ -f "$OUTPUT_DIR/condomini_completo.csv" ]; then
echo "Cross-referencing condomini in incassi vs master table..." | tee -a "$ANALYSIS_LOG"
# Condomini unici negli incassi
COND_IN_INCASSI=$(tail -n +2 "$OUTPUT_DIR/incassi_completo.csv" | cut -d',' -f2 | sort | uniq | wc -l)
# Condomini totali
COND_TOTAL=$(tail -n +2 "$OUTPUT_DIR/condomini_completo.csv" | cut -d',' -f2 | sort | uniq | wc -l)
echo " - Condomini with payments: $COND_IN_INCASSI" | tee -a "$ANALYSIS_LOG"
echo " - Total condomini: $COND_TOTAL" | tee -a "$ANALYSIS_LOG"
echo " - Payment coverage: $(echo "scale=1; $COND_IN_INCASSI * 100 / $COND_TOTAL" | bc -l)%" | tee -a "$ANALYSIS_LOG"
fi
# Correlazione rate vs incassi (se esistono entrambe)
if [ -f "$OUTPUT_DIR/rate_condominiali.csv" ]; then
echo "Cross-referencing rate vs incassi..." | tee -a "$ANALYSIS_LOG"
RATE_TOTALI=$(tail -n +2 "$OUTPUT_DIR/rate_condominiali.csv" | wc -l)
INCASSI_TOTALI=$(tail -n +2 "$OUTPUT_DIR/incassi_completo.csv" | wc -l)
echo " - Total rate emesse: $RATE_TOTALI" | tee -a "$ANALYSIS_LOG"
echo " - Total incassi registrati: $INCASSI_TOTALI" | tee -a "$ANALYSIS_LOG"
echo " - Collection ratio: $(echo "scale=1; $INCASSI_TOTALI * 100 / $RATE_TOTALI" | bc -l)%" | tee -a "$ANALYSIS_LOG"
fi
# 6. CREAZIONE REPORT INTEGRAZIONE
echo "" | tee -a "$ANALYSIS_LOG"
echo "=== FASE 6: INTEGRATION MAPPING ===" | tee -a "$ANALYSIS_LOG"
cat > "$OUTPUT_DIR/mapping_integrazione.md" << 'EOF'
# MAPPING INTEGRAZIONE FLUSSO FINANZIARIO
## Relazioni Identificate
### 1. INCASSI → CONDOMINI
```sql
incassi.cod_cond = condomin.cod_cond
```
### 2. INCASSI → CONTI BANCARI
```sql
incassi.cod_cassa = Anagr_casse.Codice
```
### 3. OPERAZIONI → CONTI BANCARI
```sql
operazioni.cod_cassa = Anagr_casse.Codice
```
### 4. OPERAZIONI → FORNITORI
```sql
operazioni.cod_ben = Rubrica.ID
```
### 5. RATE → INCASSI (Cross-Reference)
```sql
-- Complex matching required
rate.id_condomino = incassi.cod_cond
AND rate.n_mese = incassi.n_mese
AND rate.o_r_s = incassi.o_r_s
AND ABS(rate.importo_dovuto_euro - incassi.importo_pagato_euro) < 1.00
```
### 6. INCASSI → MOVIMENTI BANCARI (Pattern Matching)
```sql
-- Matching via pattern recognition
movimenti_bancari.controparte_nome LIKE CONCAT('%', condomin.nom_cond, '%')
AND ABS(movimenti_bancari.importo - incassi.importo_pagato_euro) < 1.00
AND ABS(DATEDIFF(movimenti_bancari.data_operazione, incassi.dt_empag)) <= 30
```
## Pattern Unicredit Identificati
- **Causale 048**: Bonifici in entrata (pagamenti condomini)
- **Causale 219**: Commissioni bancarie
- **Pattern UI**: `([A-D])\s*-?\s*(\d+)` per estrazione Scala-Interno
- **Pattern Nome**: `BONIFICO SEPA DA\s+([A-Z\s]+)\s+PER` per nome pagatore
## Import Sequence Raccomandato
1. **Conti bancari** (da Anagr_casse)
2. **Fornitori** (da Rubrica)
3. **Incassi** (da incassi)
4. **Movimenti bancari** (da file Unicredit)
5. **Pattern matching** automatico
6. **Riconciliazione** manuale sospesi
EOF
echo "Integration mapping created: $OUTPUT_DIR/mapping_integrazione.md" | tee -a "$ANALYSIS_LOG"
# 7. SUMMARY FINALE
echo "" | tee -a "$ANALYSIS_LOG"
echo "=== SUMMARY FLUSSO FINANZIARIO ===" | tee -a "$ANALYSIS_LOG"
echo "Files extracted:" | tee -a "$ANALYSIS_LOG"
for file in "$OUTPUT_DIR"/*.csv; do
if [ -f "$file" ]; then
filename=$(basename "$file")
lines=$(cat "$file" | wc -l)
size=$(du -h "$file" | cut -f1)
echo "- $filename: $((lines - 1)) records, $size" | tee -a "$ANALYSIS_LOG"
fi
done
echo "" | tee -a "$ANALYSIS_LOG"
echo "Next steps:" | tee -a "$ANALYSIS_LOG"
echo "1. Create Laravel migrations for: incassi, conti_bancari, fornitori" | tee -a "$ANALYSIS_LOG"
echo "2. Implement Unicredit WRI import service" | tee -a "$ANALYSIS_LOG"
echo "3. Build pattern matching engine for auto-reconciliation" | tee -a "$ANALYSIS_LOG"
echo "4. Create dashboard for payment tracking and gap analysis" | tee -a "$ANALYSIS_LOG"
echo "" | tee -a "$ANALYSIS_LOG"
echo "Completed: $(date)" | tee -a "$ANALYSIS_LOG"
echo "=== END FINANCIAL FLOW ANALYSIS ===" | tee -a "$ANALYSIS_LOG"
echo ""
echo "✅ Financial flow analysis completed!"
echo "📁 Files saved to: $OUTPUT_DIR"
echo "📊 Analysis log: $ANALYSIS_LOG"
echo "🗺️ Integration mapping: $OUTPUT_DIR/mapping_integrazione.md"