#!/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"