App per il check-in dei visitatori con badge QR: modello dati e flussi
Progetta il modello dati e i flussi per un'app di check-in visitatori con badge QR: notifiche agli host, domande di sicurezza, log di emergenza e cronologia esportabile.

Quale problema deve risolvere il flusso di check-in
Un flusso di check-in non è solo un registro visitatori digitale. Decide chi è dentro, chi stanno incontrando e cosa deve succedere dopo. Quando è fatto bene, la reception resta calma e ottieni registrazioni affidabili per il futuro.
I registri cartacei falliscono in modi prevedibili: nomi scritti male o illeggibili, orari mancanti e persone che dimenticano di fare il checkout. Un foglio sul bancone può anche esporre informazioni private perché chiunque può vedere le voci precedenti. E quando qualcosa cambia in fretta (un host è bloccato in riunione, un visitatore risponde a una domanda di sicurezza con un segnale rosso), lo staff finisce a inseguire le persone al telefono.
Un buon risultato è semplice: il check-in dura meno di un minuto, il badge è chiaro e scansionabile e l'host riceve la notifica giusta senza essere spammato. Ogni visita diventa un record pulito di chi, quando, dove, perché e cosa è stato risposto, così puoi esportarlo per audit o indagini.
Prima di progettare qualsiasi cosa, fissa lo scope. La maggior parte dei team inizia con alcuni tipi di visita: ospiti onsite, appaltatori (spesso con passaggi di sicurezza extra), consegne (a volte senza badge, ma con timestamp) e colloqui (con maggiori esigenze di privacy).
Decidi anche dove vive l'esperienza. Un tablet chiosco è l'ideale per velocità e coerenza. Un'app web per il receptionist è migliore per eccezioni, correzioni e ristampe. Un'opzione mobile può aiutare host o sicurezza a verificare i check-in QR lontano dalla reception.
Ruoli, permessi e gli eventi da tracciare
Un'app di check-in per visitatori vive o muore su due cose: ruoli chiari e una traccia di eventi pulita. Se uno dei due è confuso, otterrai avvisi mancanti, export disordinati e log di cui nessuno si fida.
Ruoli da prevedere
Mantieni i ruoli semplici all'inizio:
- Visitor: inserisce i propri dati e risponde alle domande, ma non può vedere altre visite.
- Host: vede le visite assegnate, riconosce gli arrivi e può richiedere azioni come un accompagnamento.
- Receptionist (front desk): crea visite, corregge refusi evidenti durante il check-in, ristampa badge e effettua i checkout.
- Security: visualizza chi è onsite ora, supporta le chiamate di emergenza e revisiona le note sugli incidenti.
- Admin: gestisce siti, policy ed export, incluse le regole di retention.
I confini dei permessi contano soprattutto attorno ai dati personali e ai report. Decidi presto chi può vedere numeri di telefono, dati di identificazione o foto dei visitatori, e chi può esportare la cronologia completa. Una regola comune è: la reception gestisce il flusso, la security vede la presenza attuale onsite e solo gli admin possono esportare la cronologia completa.
Eventi che dovresti sempre registrare
Pensa in termini di eventi, non solo una singola riga “visita” che viene modificata nel tempo. Questi sono i momenti che ti serviranno dopo per audit e troubleshooting:
- Check-in completed (timestamp, dispositivo, sito)
- Badge issued (ID badge, valore QR, stampato da)
- Host notified (canale usato, stato di consegna)
- Safety answers submitted (quale set di domande o versione è stato mostrato)
- Check-out (chi ha fatto il checkout, come, quando)
Rendi gli eventi critici verificabili e append-only (check-in, notificazione, checkout). Consenti modifiche limitate solo su campi frequentemente errati (ortografia del nome, azienda), e registra cosa è stato cambiato e da chi.
Modello dati core: visitors, visits, badges e sites
Un sistema affidabile parte da un modello pulito. L'idea chiave è separare la persona dall'evento del suo arrivo onsite. Un visitatore ripetuto resta un record, mentre ogni arrivo diventa una nuova visit.
Inizia con due tabelle core: Visitors e Visits.
- Un Visitor è la persona (nome, telefono, email, azienda, foto opzionale o nota ID).
- Una Visit è un singolo evento (data, scopo, chi incontra, dove si dirige).
Un Visitor può avere molte Visits.
Aggiungi Hosts e Sites così i log corrispondono all'operatività dell'azienda. Gli host sono dipendenti o tenant che ricevono avvisi. I site rappresentano sedi fisiche (HQ, Magazzino A). Se servono dettagli in seguito, puoi aggiungere zone (lobby, piano, area sicura) senza rompere la base.
Le tabelle di cui hai davvero bisogno
Mantienilo piccolo:
- Visitors
- Visits
- Hosts
- Sites
- Badges
- Devices (kiosk/tablet/printer)
I badge dovrebbero essere assegnati a una Visit, non permanentemente a un Visitor. Questo evita confusione quando lo stock di badge viene riutilizzato, perso o ristampato due volte.
Status e timestamp che raccontano la verità
Le visite hanno bisogno di timestamp e di uno status che corrisponda a quanto lo staff dice a voce. Conserva almeno created_at, checked_in_at, checked_out_at e canceled_at (o un flag di cancellazione). Abbina questo con uno status chiaro come scheduled, arrived, checked_in, checked_out, no_show, canceled.
Esempio: qualcuno è programmato per le 10:00, arriva alle 9:55 (status: arrived), poi completa le domande e ottiene un badge QR (status: checked_in). Se parte senza fare il checkout, avrai comunque checked_in_at e potrai pulire in seguito con una regola esplicita.
Domande di sicurezza: come modellare domande e risposte
Le domande di sicurezza aiutano solo se puoi fidarti della cronologia in seguito. Un errore comune è salvare le risposte sul profilo del visitatore, che sovrascrive l'ultima volta che hanno risposto. Tratta le domande come template e le risposte come record per visita, così ogni check-in conserva la sua istantanea.
Una struttura semplice funziona bene:
- Un Question Template definisce cosa chiedi.
- Una Visit Answer cattura ciò che è stato risposto durante una specifica visita.
Template di domanda vs risposte per visita
Mantieni i template stabili e salva il testo esatto mostrato (o la versione del template) con la risposta. Se modifichi la formulazione in seguito, le visite più vecchie dovrebbero comunque mostrare ciò che la persona ha effettivamente visto.
I set di domande ti permettono di mostrare quesiti diversi in base al contesto, come sito, tipo di visitatore, finestra temporale (regole temporanee), team dell'host o lingua.
Tipi di risposta e flag di azione
Prevedi più tipi oltre al sì/no. Tipi comuni includono sì/no, testo breve, firma, foto e caricamento di documenti (come un certificato assicurativo). Conserva i metadati dei file (nome, tipo, timestamp) e chi li ha raccolti.
Aggiungi un flag “azione richiesta” sul template, più una regola come “se la risposta è YES, crea un alert di sicurezza.” Esempio: “Porti un oggetto proibito?” Se il visitatore risponde yes, la visita può passare allo stato di review e richiedere approvazione prima che un badge venga stampato.
Avvisi agli host: trigger, canali e tracciamento delle notifiche
Un avviso all'host deve rispondere a una domanda in fretta: “Devo agire ora?” Di solito significa un messaggio breve che include chi è arrivato, dove si trova, perché è lì e se serve approvazione.
Cosa dovrebbe attivare un avviso
Mantieni i trigger prevedibili così gli host si fidano di loro:
- Un ospite si registra alla reception
- Un visitatore programmato è in ritardo di un intervallo predefinito (per esempio 10 minuti)
- Una risposta di sicurezza genera un flag di sicurezza
- Arrivo di un VIP (spesso con priorità diversa)
Rendi i trigger guidati dai dati: collegali a sito, tipo di visita e preferenze dell'host in modo da non hardcodare casi speciali.
Canali, dedupe e tracciamento
Usa canali multipli, ma non sparare tutti ogni volta. Un buon default è un canale primario, più un avviso alla reception sullo schermo se la consegna fallisce.
Mantieni regole semplici:
- Dedupe key: (visit_id + trigger_type + host_id) in una finestra breve
- Priority: normal vs urgent (urgent può provare un secondo canale)
- Quiet hours: rispetta l'orario di lavoro per host o sito
Registra ogni notifica come record separato così puoi auditare cosa è successo. Conserva lo stato (sent, delivered, failed), i dettagli dell'errore, il conteggio dei tentativi e i tempi di retry. Se un messaggio fallisce, passa a un'azione semplice della reception come “Chiama l'host.”
Log di emergenza: catturare la presenza onsite di cui puoi fidarti
Un log di emergenza non è lo stesso di un normale record visitatore. È uno snapshot temporale su cui puoi contare durante una prova, un'evacuazione o un vero incidente, anche se qualcuno dimentica di fare checkout più tardi.
Definisci i tipi di evento e le regole in anticipo. Una prova può essere pianificata e avviata dallo staff. Un incidente può essere creato da utenti autorizzati e poi confermato da un responsabile della sicurezza. Collega ogni evento di emergenza a un sito (e opzionalmente a una zona) così puoi rispondere: “Chi dovrebbe esserci qui adesso?”
Per ogni voce del log di emergenza, cattura i campi minimi che lo rendono affidabile:
- Tipo di evento, sito e zona opzionale
- Orario di inizio, fine e stato (open, closed)
- Chi era onsite all'inizio (visitatori, appaltatori, dipendenti)
- Accuse di ricezione (chi ha confermato i conteggi, quando e da quale dispositivo)
- Identità dell'attore per ogni cambiamento (creato da, chiuso da, modificato da)
Mantieni questi record append-only. Se qualcuno corregge un nome o marca una persona come al sicuro, scrivi una nuova azione timestamped invece di sovrascrivere i vecchi valori.
La vittoria più rapida è un "Current onsite list" con un tocco che prende tutte le visite attive per un sito e congela la lista dentro l'evento di emergenza. Rendilo facile da usare sotto pressione: vista a caratteri grandi, esportazione CSV/PDF e filtro per zone e “non ancora confermati”.
Passo dopo passo: il flusso end-to-end di check-in e check-out
Il flusso dovrebbe funzionare sia per walk-in che per ospiti preregistrati, e lasciare una traccia pulita: chi è arrivato, chi ha approvato, chi è ancora onsite e quando è uscito.
Flusso di check-in (dall'invito al badge)
Se puoi, inizia prima dell'arrivo del visitatore. La preregistrazione crea una Visit collegata a una persona, sito, host e finestra temporale. Poi invia un QR code legato a quella specifica visita così la reception non deve indovinare.
Al chiosco il visitatore scansiona il QR code oppure il receptionist cerca per nome, azienda o telefono. Mostra una rapida conferma d'identità (per esempio nome completo e azienda) prima di procedere, così il “Giovanni R.” sbagliato non viene registrato.
Poi raccogli le domande di sicurezza e le approvazioni. Salva ogni risposta come suo record con timestamp e il testo esatto mostrato.
Dopo i controlli obbligatori, emetti un badge e notifica l'host. Il badge dovrebbe contenere un token QR univoco mappato alla Visit attiva, non alla persona. Poi invia l'avviso all'host e registra lo stato di consegna, i retry e (se supportato) la lettura o l'acknowledgement.
Flusso di check-out (incluso auto check-out)
Il checkout deve essere altrettanto veloce: scansiona il QR del badge, conferma la visita e imposta check_out_time.
Per i checkout mancati, usa una regola di fine giornata per sito che marca le visite come auto checked-out e registra la motivazione. Questo mantiene i conteggi di emergenza più affidabili.
Scenario esemplare: visita di un appaltatore con flag di sicurezza
Un appaltatore di nome Jordan arriva 20 minuti in anticipo per riparare un'unità HVAC. Alla reception Jordan usa un chiosco e scansiona un QR code (o gliene viene emesso uno se è la prima visita). Il sistema crea una nuova Visit legata al sito, all'host previsto e all'ID badge.
Durante il check-in, Jordan risponde a un breve set di domande di sicurezza. Una domanda chiede: “Hai svolto lavori a caldo nelle ultime 24 ore?” Jordan seleziona “Sì.” Quella risposta viene segnalata, quindi lo stato della visita diventa “Pending approval” invece di “Checked in.” Il timestamp e la domanda e risposta esatte sono memorizzati sulla visita.
La receptionist vede tre opzioni chiare:
- Consentire l'ingresso (override con motivo)
- Negare l'ingresso (registrare il motivo)
- Richiedere l'approvazione dell'host (consigliato per risposte segnalate)
Se si richiede l'approvazione, l'host viene notificato immediatamente con chi sta aspettando, perché è segnalato, dove si trova e i pulsanti per la decisione (approve o deny). L'host può anche vedere un breve sommario della cronologia della visita, come la data dell'ultima visita e se ci sono stati flag precedenti.
Una volta approvato, la visita passa a “Checked in” e il badge diventa attivo. Quando Jordan se ne va, la receptionist (o Jordan al chiosco) effettua il checkout. L'app registra l'orario di checkout, lo stato di restituzione del badge e una breve nota come “Completata sostituzione filtro HVAC. Nessun problema.” Se il badge non viene restituito, anche questo viene registrato.
Errori comuni che causano log scadenti e avvisi mancati
I dati scadenti partono spesso da una scorciatoia nel flusso. Il sistema è utile quanto la traccia di audit che può produrre quando qualcuno chiede: “Chi è stato qui, quando e chi lo ha approvato?”
Un errore frequente è mescolare identità del visitatore e cronologia delle visite. La persona dovrebbe restare stabile nel tempo, mentre ogni arrivo è un record a sé. Se sovrascrivi un campo “visit attuale” sul profilo del visitor, perdi la possibilità di auditare visite ripetute, host, risposte di sicurezza e ristampe di badge.
I codici QR sono un'altra trappola. Se un codice QR non scade mai, diventa un pass riutilizzabile e può essere copiato da una foto. Tratta il QR come un token a breve durata legato a uno specifico rilascio di badge e visita, e invalidalo al checkout.
Le modifiche senza tracciamento distruggono la fiducia. Se lo staff può cambiare risposte di sicurezza passate, devi salvare chi ha cambiato cosa e quando, più il valore precedente.
Un outage del chiosco non dovrebbe trasformarsi in “lasciamoli entrare” senza record. Prevedi un fallback, come un flusso su telefono dello staff, un backup cartaceo poi inserito nel sistema, o una modalità offline che si sincronizza quando il dispositivo torna online.
Gli avvisi mancati spesso nascono dalla complessità reale:
- Più siti che condividono un database senza un chiaro campo Site su visite e badge
- Più host per visita (host primario, host di riserva, mailbox del team)
- Cambi di host a visita in corso senza registrare la riassegnazione
Controlli rapidi prima del rollout
Questo funziona solo se i dati restano coerenti nelle giornate intense. Prima di metterlo sul tablet della reception, esegui un test “giornata confusa”: arrivi multipli contemporanei, badge perso e un host che non risponde.
Inizia dal record della visita. Ogni visita dovrebbe avere uno status chiaro (pre-registered, checked-in, checked-out, denied, canceled) e timestamp che corrispondono alla realtà. Se qualcuno inizia il check-in ma si allontana, decidi cosa succede dopo 5-10 minuti: scade automaticamente il tentativo o resta come “started” ma non onsite.
Valida il ciclo di vita del badge end-to-end. Un badge QR dovrebbe essere facile da auditare: quando è stato emesso, quando è diventato attivo e quando è stato restituito o è scaduto. Se un badge viene ristampato, invalida subito il vecchio QR così non ti ritrovi con due badge “attivi” per una visita.
Una checklist breve è sufficiente:
- Gli export corrispondono a ciò che lo staff vede sullo schermo (conteggi, intervalli di date, filtri per sito e host).
- Reinviare un avviso non crea duplicati.
- Il contenuto dell'avviso è utile (nome visitatore, sito, host, flag di sicurezza).
- I fallimenti di consegna sono visibili (sent, delivered, failed) e i retry sono sicuri.
- Una prova di emergenza può produrre una lista onsite in meno di due minuti.
Cronologia visitatori esportabile: reporting, retention e audit trail
Gli export sono il punto in cui un sistema di check-in diventa utile per lavoro reale: conformità, revisioni di incidenti e domande semplici come “Chi era qui martedì scorso alle 15:00?” Decidi presto cosa significa “verità”, perché l'export sarà trattato come il record.
Supporta almeno CSV e XLSX. Il CSV è migliore per audit e importazioni. XLSX è più semplice per molti team non tecnici.
Definisci un set stabile di campi e mantieni il loro significato coerente nel tempo. Un minimo pratico include:
- Visit ID (unico e mai riutilizzato)
- Identità del visitatore (nome più una chiave visitatore stabile)
- Sito e host
- Timestamp di check-in e check-out (con timezone)
- Identificativo badge (valore QR o numero badge)
Mantieni stretta la regola “chi può esportare”. Tipicamente la reception può vedere la lista del giorno, la security può esportare per un intervallo di date e gli admin possono esportare tutto. Tratta l'export come un permesso a sé, non solo “può vedere le visite”.
Regole di retention che resistono alla vita reale
Scrivi la retention in linguaggio semplice così viene applicata con coerenza. Regole comuni includono conservare i log completi delle visite per 12-24 mesi, anonimizzare i dettagli personali dopo il periodo di retention (mantenendo totali e timestamp), conservare i log di emergenza più a lungo se richiesto dalla policy e non cancellare mai i trail di audit anche se si anonimizza un visitatore.
Audit trail e richieste di cancellazione
Aggiungi campi di audit a ogni record visita (created_by/at, edited_by/at) e alle azioni di export (exported_by/at, export_scope, formato file, conteggio righe).
Per le richieste di cancellazione, evita hard delete che rompono i report. Un approccio più sicuro è la “privacy delete”: cancellare o hashare i campi personali (nome, email, telefono), mantenendo però visit ID, timestamp, sito, host e codici motivo così i report restano consistenti.
Passi successivi: trasformare il piano in un'app funzionante
Trasforma il modello in tre schermate focali: un check-in kiosk (veloce, pulsanti grandi), una dashboard receptionist (arrivi del giorno, override, ristampe) e una vista host (chi sta arrivando, chi è onsite, chi richiede attenzione). Quando ogni schermata ha un solo compito, le persone tendono meno a eludere il processo.
Poi lega le automazioni agli eventi, non ai click di pulsanti. Ogni cambiamento di stato dovrebbe essere qualcosa su cui puoi fare affidamento: created, checked in, badge issued, host notified, checked out, e marked as left during an emergency sweep. In questo modo gli avvisi continuano a scattare anche quando staff diversi usano dispositivi diversi.
Una prima release spesso sufficiente per andare live include un sito, un chiosco, una dashboard receptionist, creazione e ristampa di badge QR, notifiche host con tracciamento consegna, domande di sicurezza con una singola regola di revisione e l'esportazione della cronologia visitatori per un intervallo di date.
Se vuoi costruire senza codice, una piattaforma come AppMaster (appmaster.io) può aiutarti a impostare il modello di database, i workflow e più front-end (kiosk, web, mobile) attorno a una singola fonte di verità. Parti in piccolo, pilota in una lobby e poi espandi quando i log e gli avvisi restano coerenti sotto la pressione reale della reception.
FAQ
Punta a meno di un minuto per la maggior parte dei visitatori. Mantieni il percorso veloce in tre passaggi: identificare la visita (scansione QR o ricerca rapida), rispondere alle domande obbligatorie, stampare il badge e notificare l'host. Sposta le eccezioni (correzioni di refusi, approvazioni, ristampe) sullo schermo della reception in modo che il chiosco resti rapido.
Separa la persona dalla visita. Conserva un record stabile Visitor (identità e contatti) e crea un nuovo record Visit per ogni arrivo, così puoi verificare timestamp, host, risposte e emissioni di badge senza sovrascrivere la cronologia.
Tratta i codici QR come token a breve durata legati a uno specifico rilascio di badge e a una visita precisa. Invalida il token al checkout e anche quando ristampi un badge, così non esistono mai due badge attivi per la stessa visita.
Usa eventi append-only per i momenti che ti serviranno dopo: check-in completato, badge emesso, host notificato, risposte di sicurezza salvate e checkout. Quando qualcuno corregge un errore comune come l'ortografia del nome, registra chi l'ha cambiato, quando e qual era il valore precedente.
Inizia con ruoli semplici: visitor, host, receptionist, security e admin. Mantieni strette le autorizzazioni per l'esportazione; un buon default è che la reception gestisca il flusso del giorno, la security veda chi è onsite ora e solo gli admin possano esportare tutta la cronologia.
Conserva le domande come template e salva le risposte per ogni visita, includendo il testo esatto mostrato o la versione del template. In questo modo, se modifichi le domande in seguito, le visite precedenti continueranno a mostrare ciò che il visitatore ha effettivamente visto e risposto.
Registra le notifiche come record separati con stati come sent, delivered o failed, più i dettagli dei tentativi di retry. Usa una regola di deduplica, per esempio un solo avviso per host per trigger per visita in una finestra breve, e prevedi un fallback in caso di fallimento della consegna (ad esempio un promemoria alla reception per chiamare l'host).
Un registro di emergenza dovrebbe congelare uno snapshot con limite temporale di chi è onsite, anche se qualcuno dimentica di fare checkout. Crea un evento di emergenza per un sito, copia dentro tutte le visite attive in quel momento e poi registra conferme e modifiche come nuove azioni timestamped invece di modificare direttamente i record esistenti.
Usa una regola prevedibile di fine giornata per ogni sito che marca le visite ancora attive come auto-checked-out e registra la motivazione. Mantieni intatto l'orario di check-in originale e rendi visibile l'azione di auto-checkout nei log in modo che non sembri che la persona abbia lasciato prima del dovuto.
Inizia con un sito, un chiosco e una dashboard di reception. Includi stampa e ristampa di badge QR, notifiche host con tracking di consegna, un piccolo set di domande di sicurezza con una regola di revisione e un'esportazione CSV/XLSX pulita per un intervallo di date. Poi amplia quando i log restano coerenti nelle giornate più intense.


