Preloader
Drag
Dashboard del gestionale staffing eventi con filtri per evento e azienda
Web App

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 sintesi

In breve

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.

Form di candidatura su smartphone

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.

Filtri avanzati sui candidati per patente, lingue, disponibilita ed esperienza
Creazione di un turno con calcolo automatico di ore, costo del fornitore e ricavo dal cliente

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.

Link condivisi con campi selezionabili, password, scadenza e conteggio degli accessi

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.

Grafici di distribuzione dei candidati per occupazione, stato civile e taglia
Il pacchetto

Cosa è stato consegnato

In dettaglio

Scheda tecnica

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.

Parliamone

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.