Dashboard Monitoraggio
Bandi e Gare
Pipeline automatizzata che raccoglie, classifica e presenta bandi e gare d'appalto rilevanti per il profilo dell'azienda. Scraping giornaliero, scoring di pertinenza e alert personalizzati per non perdere nessuna opportunità.
Componenti del sistema
🕷️ Scraping Engine
Spider Scrapy dedicati per ogni portale (MePA, TED, SimoG, ANAC). Scheduling giornaliero via cron. Gestione rate-limiting, retry e rotazione user-agent.
🧹 ETL & Deduplicazione
Pipeline Pandas per normalizzazione campi (importi, date, CPV). Deduplicazione fuzzy con similarità testuale. Arricchimento con metadati ente e storico.
🎯 Scoring di Pertinenza
Matching TF-IDF tra descrizione del bando e profilo competenze dell'azienda. Score 0-100% con soglia configurabile per alert automatici.
📊 Dashboard & Alert
Frontend Streamlit con filtri per settore, importo, area geografica, scadenza. Alert email giornalieri per bandi ad alto match. Export CSV per il team commerciale.
Snippet chiave
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import pandas as pd
# Profilo competenze azienda
company_profile = """
Sviluppo software, data engineering, machine learning,
piattaforme cloud, integrazione sistemi, analytics,
automazione processi, gestione documentale digitale
"""
# Scoring pertinenza con TF-IDF
def score_tenders(tenders_df, profile):
corpus = tenders_df['description'].tolist() + [profile]
tfidf = TfidfVectorizer(stop_words='italian', max_features=5000)
matrix = tfidf.fit_transform(corpus)
# Cosine similarity vs profilo azienda
profile_vec = matrix[-1]
scores = cosine_similarity(matrix[:-1], profile_vec).flatten()
tenders_df['match_score'] = (scores * 100).round(1)
return tenders_df.sort_values('match_score', ascending=False)
# Alert per bandi ad alto match
high_match = scored_df[scored_df['match_score'] >= 75]
send_email_alert(high_match, recipients=["commerciale@acme.it"])
Risultati e applicabilità
Il sistema raccoglie e classifica in media 1.800 bandi al mese da 4 portali, con una precisione di matching dell'89% rispetto alla valutazione manuale del team commerciale.
Il tempo tra pubblicazione del bando e notifica all'azienda è inferiore alle 6 ore, contro i 2-3 giorni del monitoraggio manuale precedente. Questo ha permesso di candidarsi a bandi che prima venivano scoperti troppo tardi.
Lo scoring di pertinenza riduce il "rumore" dell'80%: invece di scorrere centinaia di bandi, il team commerciale ne valuta solo quelli realmente rilevanti, con un risparmio stimato di 15+ ore settimanali.
Il sistema è configurabile per qualsiasi settore e profilo aziendale. Il profilo competenze è aggiornabile in autonomia e il modello di scoring si adatta automaticamente. Integrabile con CRM aziendali per tracciare l'intero ciclo dal bando alla candidatura.