Applicazione web per estrarre automaticamente dati da fatture PDF e immagini tramite OCR e salvarli su Google Sheets.
🎯 Sistema intelligente multi-formato, multilingua, multi-valuta e multi-azienda per l'estrazione automatizzata di dati contabili.
- Caratteristiche Principali
- Quick Start
- Installazione Completa
- Configurazione
- Utilizzo
- Sistema Multi-Azienda
- Funzionalità Dettagliate
- Troubleshooting
- FAQ
Gestisci più aziende sullo stesso server, ognuna con:
- Nickname univoco e logo personalizzato
- Token di autenticazione generato automaticamente
- Google Sheet dedicato con nome: "Fatture OCR - {nickname}"
- Isolamento dati completo tra aziende
Sistema a 5 modalità con validazione automatica:
- Auto (Raccomandato): Sistema ibrido adattivo
- Tesseract: OCR locale gratuito (70-100% accuratezza)
- Gemini Flash: AI economico e veloce (~0.5¢/fattura)
- Gemini Pro: Massima accuratezza OCR (~1-2¢/fattura)
- Claude Sonnet 4.5: Ragionamento avanzato (~2-3¢/fattura)
- 6 Paesi: Italia, Germania, Svizzera, UK, USA, Hong Kong
- 4 Lingue: Italiano, Tedesco, Inglese, Francese
- 6 Valute: EUR, CHF, USD, GBP, HKD, JPY
- 7 Formati: PDF, JPG, JPEG, PNG, GIF, BMP, TIFF
Integrazione diretta con Google Sheets:
- Controllo duplicati automatico
- Formattazione professionale
- Cache persistente degli spreadsheet
- OAuth2 sicuro
Sistema di autenticazione multi-livello robusto:
- Autenticazione Token-Based: Ogni richiesta API protetta con Bearer token
- Isolamento Multi-Tenant: File ownership tracking impedisce accessi cross-azienda
- Modalità Amministratore: Dashboard dedicata con token admin separato
- Security Logging: Monitoraggio automatico di tentativi di accesso non autorizzati
- Auto-Logout: Sessioni invalide gestite automaticamente
- API Protection: Tutti gli endpoint protetti con decoratori di autenticazione
# macOS - Installa tutto con 3 comandi
brew install tesseract tesseract-lang poppler python@3.11# 1. Clona il repository
git clone https://github.com/cerro333/fatture-ocr_Claude-code.git
cd fatture-ocr_Claude-code
# 2. Crea ambiente virtuale e installa dipendenze
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# 3. Configura environment
cp .env.example .env
# Modifica .env se necessario (opzionale per iniziare)
# 4. Avvia il server
cd backend
python app.py- Apri browser: http://localhost:5001
- Crea azienda: Inserisci nickname (es: "miazienda")
- Carica fattura: Drag & drop un PDF
- Estrai dati: Clicca "Estrai Dati"
- Connetti Google: Solo la prima volta (OAuth2)
- Esporta: Clicca "Esporta su Google Sheets"
✅ Fatto! I tuoi dati sono su Google Sheets.
macOS (Click per espandere)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"brew install tesseract tesseract-lang
tesseract --version # Verifica installazionebrew install popplerpython3 --version # Verifica versione
brew install python@3.11 # Se necessarioLinux (Ubuntu/Debian)
# Aggiorna pacchetti
sudo apt update
# Installa Tesseract + lingue
sudo apt install tesseract-ocr tesseract-ocr-ita tesseract-ocr-deu tesseract-ocr-fra
# Installa Poppler
sudo apt install poppler-utils
# Python 3.9+
sudo apt install python3 python3-pip python3-venvWindows
- Scarica installer da: https://github.com/UB-Mannheim/tesseract/wiki
- Installa in
C:\Program Files\Tesseract-OCR\ - Aggiungi al PATH:
C:\Program Files\Tesseract-OCR\ - Scarica language packs: italiano, tedesco, francese
- Scarica da: https://github.com/oschwartz10612/poppler-windows/releases
- Estrai in
C:\Program Files\poppler\ - Aggiungi al PATH:
C:\Program Files\poppler\Library\bin\
Scarica e installa da: https://www.python.org/downloads/
# Clona repository
git clone https://github.com/cerro333/fatture-ocr_Claude-code.git
cd fatture-ocr_Claude-code
# Crea ambiente virtuale
python3 -m venv venv
# Attiva ambiente virtuale
source venv/bin/activate # macOS/Linux
# oppure
venv\Scripts\activate # Windows
# Installa dipendenze
pip install --upgrade pip
pip install -r requirements.txt# Copia template
cp .env.example .env
# Modifica con il tuo editor
nano .env # o code .env, vim .env, ecc.Per esportare su Google Sheets devi configurare OAuth2:
Step 1: Crea Progetto Google Cloud
- Vai su Google Cloud Console
- Clicca Seleziona progetto → Nuovo progetto
- Nome:
fatture-ocr(o quello che preferisci) - Clicca Crea
Step 2: Abilita API (IMPORTANTE)
- Menu laterale: API e servizi → Libreria
- Cerca e abilita:
- Google Sheets API ✅ (OBBLIGATORIO)
- Google Drive API ✅ (FORTEMENTE CONSIGLIATO)
Step 3: Configura OAuth Consent Screen
- API e servizi → Schermata consenso OAuth
- Tipo: Esterno → Crea
- Compila:
- Nome app:
Estrattore Fatture - Email assistenza: tua email
- Email sviluppatore: tua email
- Nome app:
- Salva e continua
- Ambiti → Aggiungi o rimuovi ambiti:
https://www.googleapis.com/auth/spreadsheetshttps://www.googleapis.com/auth/drive.file
- Utenti di test: Aggiungi la tua email Gmail
- Salva e continua → Torna alla dashboard
Step 4: Crea Credenziali OAuth
- API e servizi → Credenziali
- + Crea credenziali → ID client OAuth
- Tipo: Applicazione desktop
- Nome:
Fatture OCR Desktop - Crea → Scarica JSON
- Sposta il file:
mv ~/Downloads/client_*.json credentials/client_secret.jsonVantaggi: Gratis fino a 1500 richieste/giorno, miglior OCR
# 1. Ottieni API Key gratuita
# Vai su: https://aistudio.google.com/app/apikey
# Crea API Key e copiala
# 2. Aggiungi a .env
GOOGLE_GEMINI_API_KEY=AIzaSy-tua-chiave-qui
# 3. Scegli modelli (opzionale)
GEMINI_FLASH_MODEL=gemini-2.0-flash-exp # Economico
GEMINI_PRO_MODEL=gemini-2.0-flash-thinking-exp-1219 # AccuratoVantaggi: Ragionamento avanzato per documenti complessi
# 1. Crea account Anthropic
# Vai su: https://console.anthropic.com/
# Settings → API Keys → Create Key
# 2. Aggiungi a .env
ANTHROPIC_API_KEY=sk-ant-api03-tua-chiave-quiNota: L'app funziona perfettamente anche senza AI, usando solo Tesseract OCR gratuito.
# Attiva ambiente virtuale (se non attivo)
cd fatture-ocr_Claude-code
source venv/bin/activate # macOS/Linux
# venv\Scripts\activate # Windows
# Avvia server
cd backend
python app.pyVedrai:
==================================================
Estrattore OCR Fatture
==================================================
Server avviato su: http://localhost:5001
Apri browser: http://localhost:5001
-
Crea Azienda
- Clicca "Crea Nuova Azienda"
- Inserisci nickname (es: "acme", "miazienda")
- (Opzionale) Carica logo aziendale
- Copia e salva il token generato!
-
Connetti Google Sheets (solo prima volta)
- Clicca "Connetti Google"
- Autorizza l'app nel browser
- Accetta permessi richiesti
📁 Upload → 🔍 Estrai → ✏️ Verifica → 📊 Esporta
-
Upload Fatture
- Drag & drop o clicca per selezionare
- Formati: PDF, JPG, PNG, TIFF, ecc.
- Multipli file supportati
-
Estrai Dati
- Scegli modalità:
- Auto (raccomandato): sistema intelligente
- Tesseract: solo OCR locale
- AI: massima accuratezza
- Clicca "Estrai Dati"
- Attendi elaborazione
- Scegli modalità:
-
Verifica Risultati
- Controlla dati nella tabella
- Clicca ✏️ per modificare manualmente
- Verde = Alta confidenza
- Giallo = Media confidenza
- Rosso = Bassa confidenza (verifica consigliata)
-
Esporta su Google Sheets
- Seleziona righe da esportare
- Clicca "Esporta su Google Sheets"
- Automaticamente:
- Crea foglio "Fatture OCR - {nickname}"
- Controlla duplicati
- Formatta intestazioni
- Clicca link per aprire il foglio
Gestisci più aziende sullo stesso server, ognuna con:
- Nickname univoco (3-20 caratteri)
- Token di autenticazione (generato automaticamente)
- Google Sheet dedicato: "Fatture OCR - {nickname}"
- Logo personalizzato (opzionale)
- Dati completamente isolati
# Azienda 1
COMPANY_acme_NICKNAME=acme
COMPANY_acme_TOKEN=cf1ab10626eac1644d5de83cfed66bdc
COMPANY_acme_SHEET_ID=1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs
COMPANY_acme_LOGO=acme.png
# Azienda 2
COMPANY_techcorp_NICKNAME=techcorp
COMPANY_techcorp_TOKEN=d143a0164ef15508e5415afc86c1392d
COMPANY_techcorp_SHEET_ID=1XyZ123AbC456DeF789GhI012JkL345MnO
COMPANY_techcorp_LOGO=techcorp.jpgDall'Interfaccia Web (Raccomandato):
- Apri http://localhost:5001
- Clicca "Crea Nuova Azienda"
- Inserisci nickname univoco
- (Opzionale) Carica logo
- Salva il token generato
Il sistema salva automaticamente in .env - Non serve riavviare il server!
- Clicca "Esci" nell'header
- Inserisci token dell'altra azienda
- Clicca "Verifica Token"
- Upload: Clicca "Cambia Logo" nell'header
- Formati: PNG, JPG, GIF, WebP (max 5MB)
- Dimensione: Visualizzato 200x100px
- Rimozione: Nel modale logo, clicca "Rimuovi Logo"
Il token deve essere condiviso solo con persone fidate della tua azienda:
✅ Metodi Sicuri:
- Password manager aziendale (1Password, Bitwarden)
- Email interna aziendale
- Chat aziendale sicura (Slack, Teams)
❌ NON Condividere:
- Social media pubblici
- Email non cifrate a esterni
L'admin è un superuser con accesso completo a tutte le aziende.
Esegui lo script di configurazione iniziale:
python3 setup_admin.pyIl script:
- Genera un token sicuro di 64 caratteri
- Lo salva automaticamente in
.env(rigaADMIN_TOKEN=...) - Mostra il token per uso immediato
- Apri http://localhost:5001
- Nel modale di autenticazione, clicca sulla tab "Admin"
- Inserisci il token admin
- Clicca "Accedi come Admin"
La dashboard admin (dark mode automatico) offre:
📊 Panoramica Aziende:
- Lista completa di tutte le aziende configurate
- Visualizzazione logo, token (mascherato), Sheet ID
- Badge indicatore presenza Google Sheet
🎭 Impersonazione Azienda:
- Dropdown per selezionare e operare come qualsiasi azienda
- Bottone "Impersona" per switchare rapidamente
- Bottone "Torna all'Admin" per tornare alla dashboard
⚙️ Operazioni CRUD:
- Crea Azienda: Genera nuova azienda con nickname e logo
- Elimina Azienda: Rimuove azienda da
.env(opzionalmente anche il Google Sheet) - Rigenera Token: Genera nuovo token per un'azienda (il vecchio smette di funzionare)
Quando elimini un'azienda, puoi scegliere se:
- ✅ Eliminare anche il Google Sheet → Il foglio viene spostato nel cestino di Google Drive (recuperabile entro 30 giorni)
- ❌ Mantenere il Google Sheet → Il foglio rimane accessibile, l'azienda viene solo rimossa dal sistema
🔒 Best Practices:
- Non condividere mai il token admin
- Usa un password manager per conservarlo
- Rigeneralo periodicamente (es. ogni 6 mesi)
- Limita accesso al server a persone fidate
Se perdi il token admin o vuoi rigenerarlo per sicurezza:
python3 setup_admin.pyScegli l'opzione di rigenerazione - il vecchio token smetterà di funzionare.
🔍 OCR e Riconoscimento Intelligente
- Pre-processing avanzato per immagini fotografate
- Supporto multilingua: IT, DE, EN, FR
- Nessun invio dati a server esterni
Validazione Fornitore (multilingua):
- ❌ Numeri telefono nel nome (-25% confidence)
- ❌ URL/domini web (-25%)
- ❌ Email nel nome (-25%)
- ❌ Keywords indirizzo (-20%)
- ❌ Nome troppo lungo > 80 caratteri (-20%)
Validazione Numero Fattura:
- ❌ Keywords data/fattura/importo (-30%)
- ❌ Errori OCR comuni (-30%)
- ❌ Solo lettere senza numeri (-20%)
Trigger AI Automatico:
- Confidence < 85% → Gemini Flash
- Confidence < 90% → Gemini Pro
- Elimina falsi positivi da Tesseract
- Fornitore: Algoritmo a priorità con suffissi aziendali
- Data Fattura: Formati numerici e testuali
- Data Scadenza: Multilingua
- Numero Fattura: IT, DE, CH, UK, US
- Importo Totale: Logica avanzata, skip intestazioni
- Valuta: Rilevamento contestuale
🌍 Gestione Internazionale
- 🇮🇹 Italia/Germania:
1.699,00 - 🇨🇭 Svizzera:
1'699.00 - 🇺🇸 USA/UK:
1,699.00 - 🇭🇰 Hong Kong:
HK$3263
- Tutti gli importi con 2 decimali
- Formato:
234.00,1234.50 - Valido per tutti i metodi (Tesseract, Gemini, Claude)
EUR, CHF, USD, GBP, HKD, JPY
Italiano, Tedesco, Inglese, Francese
📊 Export e Google Sheets
- Foglio Dedicato: "Fatture OCR - {nickname}" per ogni azienda
- Controllo Duplicati: Basato sul nome file
- Formattazione Automatica:
- Intestazioni: Sfondo grigio, grassetto, centrate
- Colonne: 150px larghezza
- Prima riga: Congelata (frozen)
- Data Fattura
- Data Scadenza
- Fornitore
- Numero Fattura
- Importo Totale
- Valuta
- Nome File
- Data Elaborazione
Il sistema salva l'ID del foglio in:
.env:COMPANY_{nickname}_SHEET_IDcredentials/spreadsheet_cache.json
Riutilizza lo stesso foglio per export successivi.
🤖 Modalità AI Avanzate
Per FOTO (JPG, PNG):
- Skip Tesseract → AI vision model diretto
- Gemini gestisce meglio angolazione, luce, riflessi
Per PDF:
- Livello 1: Tesseract OCR (gratis) + validazione
- Livello 2: Gemini Flash se confidence < 85%
- Livello 3: Gemini Pro se confidence < 90%
Risparmio: Usa AI solo quando necessario (50-70% meno costi)
- Economico: ~$0.50/MTok (~0.5¢/fattura)
- Veloce: < 3 secondi
- Ottimo OCR
- Consigliato per: Volume alto, budget limitato
- Accuratezza massima: ~$2/MTok (~1-2¢/fattura)
- Migliore OCR del mercato (+20% vs Claude)
- Consigliato per: Documenti critici, massima precisione
- Ragionamento avanzato: ~$3-15/MTok (~2-3¢/fattura)
- Analisi contestuale superiore
- Consigliato per: Layout non standard, documenti complessi
- Gratis, locale
- 70-100% accuratezza su PDF digitali
- 60-80% su foto/scansioni
- Consigliato per: PDF digitali di buona qualità
Soluzione macOS
# Verifica installazione
which tesseract
# Se non trovato, reinstalla
brew reinstall tesseract tesseract-langSoluzione Linux
# Verifica installazione
tesseract --version
# Se non trovato
sudo apt install tesseract-ocr tesseract-ocr-itaSoluzione Windows
- Verifica installazione:
tesseract --versionin CMD - Se manca, reinstalla da: https://github.com/UB-Mannheim/tesseract/wiki
- Aggiungi al PATH:
C:\Program Files\Tesseract-OCR\
# macOS
brew install poppler
# Linux
sudo apt install poppler-utils
# Windows
# Scarica da: https://github.com/oschwartz10612/poppler-windows/releases
# Estrai in C:\Program Files\poppler\
# Aggiungi al PATH: C:\Program Files\poppler\Library\bin\# Trova processo
lsof -i :5001
# Termina processo
lsof -ti:5001 | xargs kill -9
# Oppure usa porta diversa in backend/app.py:
# app.run(host="0.0.0.0", port=5002, debug=True)Causa: Google Drive API non abilitata
Soluzione:
- Google Cloud Console
- Progetto
fatture-ocr - API e servizi → Libreria
- Cerca "Google Drive API"
- Abilita
- Verifica che
credentials/client_secret.jsonesista - Verifica che sia un JSON valido
- Elimina
credentials/token.jsone riautorizza:
rm credentials/token.json
# Riavvia server e riconnetti GooglePossibili cause:
- PDF scansione bassa qualità
- Foto sfocata o con riflessi
- Layout molto personalizzato
Soluzioni:
- Usa modalità AI (Gemini/Claude)
- Migliora qualità scansione/foto
- Usa PDF digitali invece di scansioni
- Per foto: buona illuminazione, inquadratura dritta
- Verifica token in
.env - Controlla
COMPANY_{nickname}_TOKEN - Se perso, crea nuova azienda
# Reinstalla dipendenze
pip install --force-reinstall -r requirements.txt
# Verifica Python version
python3 --version # Deve essere 3.9+È necessario configurare le API AI?
No! L'applicazione funziona perfettamente con solo Tesseract OCR (gratuito, locale). Le API AI sono opzionali per:
- Massima accuratezza
- Foto di bassa qualità
- Layout non standard
Per iniziare basta Tesseract. Aggiungi AI dopo se necessario.
Quanto costano le API AI?
Gemini (Raccomandato):
- Gratis: fino a 1500 richieste/giorno
- Flash: ~$0.50/MTok → ~0.5¢ per fattura
- Pro: ~$2/MTok → ~1-2¢ per fattura
Claude:
- Sonnet 4.5: ~$3-15/MTok → ~2-3¢ per fattura
- $5 crediti gratuiti per nuovi account
Modalità Auto:
- Usa AI solo quando necessario
- Risparmio 50-70% sui costi
- ~€1-2 per 100 fatture
I miei dati sono sicuri?
Tesseract:
- ✅ 100% locale
- ✅ Nessun invio a server esterni
- ✅ Privacy totale
AI (Gemini/Claude):
⚠️ File inviati a server AI per elaborazione- ✅ Dati non usati per training (policy provider)
⚠️ Non usare per documenti molto sensibili
Google Sheets:
⚠️ Dati inviati solo a Google per export- ✅ Controllati da te tramite Google Account
Posso usare lo stesso Google Sheet per più aziende?
No, ogni azienda ha il proprio foglio dedicato:
- "Fatture OCR - acme"
- "Fatture OCR - techcorp"
- ecc.
Questo garantisce:
- ✅ Isolamento dati
- ✅ Controllo duplicati corretto
- ✅ Organizzazione chiara
Come condivido l'accesso con il mio team?
Condividi il token aziendale:
- Copia token da
.env:COMPANY_{nickname}_TOKEN - Invia tramite canale sicuro (password manager, email interna)
- Colleghi inseriscono token nell'interfaccia web
- Accesso immediato ai dati azienda
Nota: Tutti con lo stesso token vedono e modificano gli stessi dati.
Supporta fatture elettroniche XML?
No, attualmente supporta solo:
- PDF (digitali e scansionati)
- Immagini (JPG, PNG, TIFF, ecc.)
Le fatture elettroniche XML richiedono parsing strutturato diverso.
Funziona offline?
Parzialmente:
- ✅ OCR con Tesseract: 100% offline
- ❌ Export Google Sheets: richiede internet
- ❌ AI (Gemini/Claude): richiede internet
Puoi elaborare fatture offline e esportare quando riconnesso.
Qual è l'accuratezza del sistema?
Tesseract (Gratis):
- PDF digitali: >90%
- PDF scansionati: 70-85%
- Foto: 60-80%
AI Gemini Pro:
- PDF digitali: 98-99%
- PDF scansionati: 95-98%
- Foto: 90-95%
Modalità Auto:
- Combina entrambi
- Accuratezza media 92-96%
- Costo medio ~€1 per 100 fatture
fatture-ocr/
├── backend/
│ ├── app.py # Server Flask principale
│ ├── config.py # Configurazioni
│ ├── company_manager.py # Gestione multi-azienda
│ ├── ocr_processor.py # Elaborazione OCR (Tesseract)
│ ├── ai_extractor.py # Estrazione AI (Claude)
│ ├── gemini_extractor.py # Estrazione AI (Gemini)
│ ├── data_extractor.py # Estrazione dati fatture
│ └── sheets_handler.py # Integrazione Google Sheets
├── frontend/
│ ├── index.html # Pagina principale
│ ├── css/styles.css # Stili
│ └── js/app.js # Logica frontend
├── credentials/ # Credenziali Google (gitignore)
│ ├── client_secret.json # OAuth2 credentials
│ ├── token.json # Google auth token
│ └── spreadsheet_cache.json
├── logos/ # Logo aziende (gitignore)
│ └── .gitkeep
├── uploads/ # PDF temporanei (gitignore)
├── sample_invoices/ # Fatture esempio
├── requirements.txt # Dipendenze Python
├── .env # Configurazione (gitignore)
├── .env.example # Template configurazione
└── README.md
| Metodo | PDF Digitali | PDF Scansionati | Foto |
|---|---|---|---|
| Tesseract | >90% | 70-85% | 60-80% |
| Gemini Flash | 96-98% | 92-95% | 85-90% |
| Gemini Pro | 98-99% | 95-98% | 90-95% |
| Claude 4.5 | 98-99% | 95-98% | 90-95% |
| Auto | 92-96% | 88-93% | 82-90% |
- Rate limit Google Sheets: 100 richieste / 100 secondi
- Dimensione file: max 50MB per upload
- Concorrenza: 1 elaborazione alla volta per sessione
- Formati layout: Ottimizzato per layout IT/DE/CH/UK/US standard
⚠️ Credenziali Google condivise: Tutte le aziende condividono lo stesso token OAuth Google. Solo admin può configurare l'account Google. Per isolamento completo, considerare deploy separati per azienda.
✅ Raccomandato:
- Usa PDF digitali (non scansioni) quando possibile
- Modalità Auto per bilanciare costo/accuratezza
- Foto con buona illuminazione e messa a fuoco
- Verifica sempre dati estratti prima dell'export
❌ Evita:
- Foto sfocate o con riflessi
- Scansioni < 200 DPI
- PDF con layout molto personalizzati (senza AI)
Il file .gitignore protegge:
- ✅
.env(token, API keys, sheet_id) - ✅
credentials/(OAuth2 Google) - ✅
logos/(immagini aziendali) - ✅
uploads/(fatture caricate)
- Generati con
secrets.token_hex(16)(32 char hex) - Validazione server-side per ogni richiesta
- Salvati in localStorage del browser
- Nessuna scadenza (sicurezza tramite oscurità)
# Verifica che .env sia gitignored
git check-ignore .env # Deve ritornare: .env
# Genera SECRET_KEY sicuro
python -c "import secrets; print(secrets.token_hex(32))"- Cambia SECRET_KEY in
.env - Usa HTTPS (reverse proxy con nginx/Caddy)
- Limita API keys (usage limits su console provider)
- Backup
.envin luogo sicuro (password manager) - Aggiorna dipendenze regolarmente:
pip list --outdated
pip install --upgrade -r requirements.txtApri una issue su GitHub:
- Repository: https://github.com/cerro333/fatture-ocr_Claude-code
- Includi: versione Python, OS, log errore, steps per riprodurre
Pull requests benvenute! Per modifiche major, apri prima una issue per discutere.
Uso personale e aziendale consentito. Non redistribuire senza autorizzazione.
Sviluppato con:
- Flask - Web framework
- Tesseract OCR - OCR engine
- Google Gemini - AI OCR
- Anthropic Claude - AI reasoning
- Google Sheets API - Data export
- Bootstrap - UI framework
⭐ Se questo progetto ti è utile, lascia una stella su GitHub!
Made with ❤️ for accountants and businesses





