Gestionale Staffing Eventi: dal modulo di candidatura al margine di ogni turno
Una web application che ha sostituito moduli sparsi e fogli Excel: raccolta delle candidature, ricerca dei profili, pianificazione dei turni e calcolo di costi e margini in tempo reale.
-
endpoint HTTP
-
modelli di dominio
-
form di candidatura attivi
-
+
candidati gestiti
In breve
- Gestionale Staffing Eventi è una web application in Python e Flask che gestisce l'intero ciclo del personale per eventi, dalla candidatura al turno.
- Ogni agenzia partner ha il proprio modulo di candidatura, configurabile senza toccare il codice, ma tutti scrivono nello stesso modello dati.
- La ricerca dei profili combina oltre 20 filtri e modelli pronti come «Disponibili ora» o «Esperti 5+ anni».
- Costi del fornitore, ricavi dal cliente e margine di ogni turno si vedono mentre si pianifica, non a fine mese.
- In produzione da giugno 2025, con consenso privacy tracciato e documenti accessibili solo tramite link firmati a scadenza.
Qual era il problema
L’agenzia raccoglieva le candidature con moduli online diversi per ciascuna delle agenzie per il lavoro con cui collabora, e le riversava a mano in fogli Excel. Ne nascevano tre problemi che si alimentavano a vicenda: ogni cliente voleva un modulo diverso, e ogni nuovo modulo produceva dati non confrontabili con gli altri; trovare la persona giusta, per esempio «un autista con patente D, disponibile a Milano la settimana prossima, che parli inglese», voleva dire aprire più fogli e filtrare a mano; e i margini si scoprivano solo a fine mese, quando non c’era più modo di intervenire.
In più, i dati raccolti includono documenti d’identità, patenti e permessi di soggiorno: servivano tracciabilità del consenso e controllo degli accessi all’altezza del GDPR.
Moduli diversi, un solo modello dati
Ogni agenzia partner ha il proprio modulo di candidatura con un indirizzo dedicato. Campi visibili, obbligatori e opzioni delle tendine si configurano dal pannello di amministrazione, senza toccare il codice, e un modulo esistente si duplica con tutta la sua configurazione.
La scelta decisiva è stata non rendere dinamico lo schema del database. Tutti i moduli scrivono nello stesso modello dati normalizzato, e una tabella di configurazione decide per ciascuno cosa mostrare e cosa rendere obbligatorio: i moduli sono flessibili come se fossero dinamici, ma i candidati restano confrontabili e interrogabili con query normali. Il candidato compila un percorso guidato in tre passaggi, spesso dal telefono, con curriculum e foto profilo scattata sul momento.
Trovare la persona giusta in un clic
La ricerca combina oltre 20 filtri (patente, lingue, città di disponibilità, anni di esperienza, punteggio) e dei modelli di filtraggio già pronti che traducono le domande ricorrenti: «Candidati recenti», «Punteggio alto», «Disponibili ora», «Esperti 5+ anni». Sono nati da come gli operatori formulavano le richieste a voce, e sono diventati il modo più usato per cercare.
Ogni operatore salva le proprie colonne e il loro ordine, perché chi cerca autisti e chi pianifica i turni guarda dati diversi. I profili si valutano con categorie di punteggio configurabili, si archiviano invece di cancellarli e si esportano in CSV, Excel e PDF.
Il margine si vede mentre si pianifica
Ogni turno collega un candidato a un fornitore e a un cliente, ciascuno con la propria tariffa oraria. Il sistema calcola ore effettive, costo del fornitore, ricavo dal cliente e profitto, gestendo le pause, i minimi orari garantiti, che possono essere diversi per fornitore e cliente sullo stesso turno, e i costi extra.
Ogni turno congela la tariffa applicata al momento della creazione, così ritoccare un listino non riscrive lo storico. E il calcolo vive in un solo punto del codice: dà lo stesso risultato ovunque avvenga, dalla creazione alla modifica in linea con doppio clic fino all’importazione massiva.
Condividere senza dare accessi
I clienti dell’agenzia vogliono vedere le liste dei candidati proposti, ma non possono avere un account sul gestionale. I link condivisi risolvono il problema: per ciascuno si scelgono i campi visibili e i filtri applicati, con password e scadenza facoltative, e si tiene il conto degli accessi. Lo stesso meccanismo vale per condividere le giornate di turni.
Dati personali trattati come tali
Per il GDPR non basta una spunta: bisogna poter dimostrare quale informativa è stata accettata, quando e da chi. Ogni consenso registra data e ora, indirizzo IP, browser, versione e impronta dell’informativa in vigore, e da lì si genera il PDF di consenso del singolo candidato.
Curriculum, documenti e foto stanno in un archivio privato su Azure e l’applicazione non ne espone mai l’indirizzo diretto: genera ogni volta un collegamento firmato a scadenza. Un link copiato e girato a terzi smette di funzionare da solo.
Com'è costruito
Flask con pagine generate lato server invece di un’applicazione a pagina singola: gli utenti sono operatori di back-office su desktop, e il rendering lato server ha ridotto tempi di sviluppo e superficie di manutenzione. Le parti che hanno davvero bisogno di reattività (tabelle, filtri, grafici, modifica in linea) sono alimentate da API JSON dedicate.
Il codice è diviso per area funzionale in nove blueprint, il che ha permesso di aggiungere il modulo turni, arrivato su richiesta successiva del cliente, senza toccare la parte candidati già in produzione. Le funzionalità delicate stanno dietro interruttori attivabili a runtime, da spegnere in pochi secondi senza un nuovo rilascio. Database Azure SQL con migrazioni versionate, rilascio automatico su Azure App Service con GitHub Actions.
Cosa è stato consegnato
- Analisi dei requisiti con l'agenzia
- Modello dati e database su Azure SQL
- Backend Flask con 184 endpoint
- Interfaccia responsive con Bootstrap 5 e Chart.js
- Rilascio continuo su Azure con GitHub Actions
- Manutenzione evolutiva in produzione
Scheda tecnica
- Piattaforma: Web application su Azure
- Anno: 2025
- Stato: In produzione
- Tecnologie: Python, Flask, SQLAlchemy, Azure, Chart.js, Web App, Database
Gli screenshot vengono dall’ambiente di produzione: nomi e recapiti sono fittizi, e sono sfocati il marchio del cliente, le agenzie partner e gli importi.
Ti serve un software così?
Se hai un processo che oggi gestisci a mano e vorresti automatizzare, raccontamelo: capiamo insieme se ha senso costruirci sopra uno strumento.

