Vai al contenuto

Formazione: importazione, giornate, registri e attestati

Procedura del candidato aggiornata al 23 settembre 2026. Le correzioni descritte qui sono preparate in ambiente isolato: verificare il verbale di collaudo e la versione installata prima di applicarle operativamente. Questo documento non attesta un rilascio in PROD.

Importare i discenti

Aprire Discenti → Importa CSV nel tenant operativo corretto.

  • Ogni discente deve avere un cliente esistente e accessibile nel tenant operativo. L’import non crea mai clienti.
  • Per un’azienda indicare cliente_partita_iva (alias partita_iva, piva, pi); per un privato indicare cliente_codice_fiscale (alias cliente_cf, cf_cliente). codice_fiscale / cf continuano a identificare il discente, non il cliente.
  • La colonna cliente contiene il nome facoltativo di controllo: il solo nome non identifica più il cliente. Se nome e identificativo non corrispondono, correggere il file.
  • Le righe senza nome e identificativi cliente usano il cliente selezionato nella combo. Se manca anche la selezione, l’import chiede il cliente. Il cliente selezionato deve avere partita IVA o codice fiscale compilato in anagrafica.
  • Identificativi non riconosciuti, non accessibili, discordanti o duplicati bloccano il file. Non vengono sostituiti dal cliente predefinito. Se il cliente non esiste, l’operatore deve crearlo esplicitamente in Anagrafiche e ripetere l’import; non è prevista alcuna creazione autonoma.
  • Scegliere il corso, una singola edizione attiva e le sue giornate interessate. Tutti i discenti del file verranno assegnati alle giornate selezionate: usare importazioni separate per gruppi con calendari diversi.
  • Il corso deve essere autorizzato per l’operatore, anche quando appartiene allo stesso tenant. L’import applica gli stessi filtri IAM della Formazione: un corso non visibile non può essere selezionato né passato manualmente alla richiesta di importazione.
  • La modalità Anteprima (non salva) è selezionata inizialmente: controllare il cliente di ogni riga e la tipologia dell’edizione; poi ricaricare il file e deselezionare Anteprima per confermare il salvataggio. Il riepilogo visualizza al massimo le prime 50 assegnazioni, ma i controlli comprendono tutte le righe.
  • Controllare l’anteprima prima del salvataggio. Il matching utilizza il codice fiscale; in sua assenza servono nome, cognome e data di nascita per riconoscere una persona già presente. Omonimie e identità non accessibili richiedono verifica anagrafica.
  • Se una giornata con capienza configurata è piena, l'importazione viene annullata. Non rimangono iscrizioni parziali del file.

La prenotazione della giornata è distinta dalla presenza e dalla firma. Tablet e PDF mostrano soltanto gli iscritti previsti per la giornata. Il registro amministrativo indica «Non assegnato a questa giornata» nelle celle non pertinenti.

Un’iscrizione completata non viene estesa ad altre giornate. Il rinnovo crea una nuova frequenza dopo il controllo della scadenza o della dichiarazione esplicita, mantenendo separato lo storico precedente, come descritto sotto.

Corso nuovo o aggiornamento e storico

Quando manca uno storico associato al corso o la scadenza precedente, l’import richiede una scelta esplicita:

  • Corso nuovo: confermare che il discente non lo ha mai svolto.
  • Aggiornamento: confermare che il precedente è scaduto; indicare la scadenza se conosciuta. Se ignota, lasciare il campo vuoto: non inserire una data stimata.

La conferma non è preselezionata. Per gruppi omogenei usare i campi del modulo; per situazioni diverse nello stesso CSV compilare tipo_iscrizione (nuovo / aggiornamento), conferma_precedente (si) e, facoltativamente, scadenza_precedente (AAAA-MM-GG o GG/MM/AAAA). Una dichiarazione presente sulla riga prevale integralmente sul modulo: non eredita una conferma mancante. In caso di dubbi fermarsi e verificare.

Una scadenza registrata ancora valida prevale sulla dichiarazione e blocca il rinnovo, compreso il giorno della scadenza. Anche lo storico formativo esplicitamente collegato al corso e al tenant viene verificato. Un rinnovo richiede giornate successive alla scadenza e una nuova edizione; con scadenza ignota dichiarata, le giornate devono essere da oggi in avanti.

Il rinnovo crea una nuova frequenza, senza azzerare la precedente: conserva cliente, edizione, presenze, firme, completamento e scadenza originali. Gli attestati generati per frequenze successive hanno documenti distinti. Per completare un rinnovo serve la presenza alle nuove giornate oppure una nuova evidenza caricata e validata dopo la loro conclusione: il documento della vecchia frequenza non basta. Il numero della frequenza è visibile nelle iscrizioni, nel fascicolo e nel libretto; la dichiarazione è consultabile nel dettaglio dell’iscrizione con operatore e data. Le vecchie scadenze mancanti non vengono riempite automaticamente.

Una seconda edizione è bloccata mentre la frequenza precedente è ancora aperta. Ripetere lo stesso import sulla stessa edizione aperta riutilizza l’iscrizione, senza creare un secondo rinnovo. Per un rinnovo usare Discenti → Importa CSV, scegliendo solo le giornate della nuova edizione; il registro generale e l’import storico senza selezione dell’edizione non sono scorciatoie per aggirare questo controllo.

Le integrazioni applicano lo stesso controllo: se manca una conferma necessaria, la conversione deve essere verificata dall’operatore. La riconciliazione legacy si ferma in presenza di più frequenze della stessa coppia corso/discente, per evitare associazioni arbitrarie.

Tipologia della singola edizione

Una edizione con un solo cliente è Aziendale; con più clienti è Multiaziendale. Si considerano anche gli iscritti già assegnati all’edizione, escludendo le iscrizioni annullate. Lo stesso corso può quindi avere entrambe le tipologie di edizione.

Il cliente viene conservato sull’assegnazione alle giornate dell’edizione. Un discente già assegnato a un cliente diverso nella stessa edizione richiede verifica manuale: l’import non sovrascrive l’associazione. Lo stesso vale per una giornata già attribuita a un’altra edizione.

Dati storici senza cliente o edizione espliciti vengono mostrati come Da verificare. La migrazione non deduce clienti dalle aziende correnti del dipendente e non riclassifica automaticamente lo storico. Le impostazioni commerciali storiche a livello di catalogo/WooCommerce rimangono distinte dalla tipologia operativa delle edizioni.

Orari di ogni giornata

Nel calendario o nel wizard scegliere:

  • Mattina e pomeriggio: due fasce complete e separate da una pausa.
  • Solo mattina: una fascia mattutina.
  • Solo pomeriggio: una fascia pomeridiana.
  • Orario continuato: un unico inizio e fine, compilati nella prima fascia; nessuna seconda fascia.

Ogni fascia richiede fine successiva all’inizio. Le fasce sovrapposte non sono accettate. La pausa non contribuisce alle ore del corso. Per l’orario continuato calendario, registro tablet e PDF mostrano una sola fascia e una sola presenza/firma prevista.

Le giornate storiche con una sola fascia non vengono automaticamente dichiarate a orario continuato: serve una scelta esplicita dell’operatore. Ogni giornata può avere una modalità diversa dalle altre.

Compilare e revocare il registro

Il link tablet permette di registrare le presenze e acquisire le firme delle giornate assegnate. Gli invii parziali conservano i campi non inviati; un dispositivo pubblico non può sostituire o cancellare una firma esistente.

Per correggere una firma, usare Rimuovi nel registro amministrativo. La rimozione è tracciata con operatore, iscrizione, giornata e fascia. Se nel frattempo un altro dispositivo ha aggiornato la firma, ricaricare la pagina prima di ripetere la correzione.

Revoca disabilita il link della giornata sia in lettura sia in scrittura. La revoca riguarda la giornata e non soltanto una copia dell'URL; generare nuovamente lo stesso link non lo riattiva. Questa modifica non introduce un comando di riattivazione.

Nel PDF, le pagine aggiuntive di una giornata mantengono data, fascia e QR del relativo questionario anche quando l’elenco dei discenti occupa più pagine. Il QR è riportato a fondo pagina, separato dall’elenco dei discenti. I nomi di aule e docenti vengono stampati come testo, inclusi i caratteri speciali.

Completare e attestare

Il completamento richiede giornate concluse, orari validi, presenze nelle fasce previste e ore almeno pari alla durata configurata del corso. In alternativa è possibile utilizzare il registro firmato o la documentazione dell'ente esterno dopo caricamento e validazione esplicita del corso.

La generazione dell'attestato richiede iscrizione completata e documento di evidenza validato ancora presente nell'archivio. La procedura non certifica automaticamente la conformità normativa o la correttezza del contenuto del documento caricato.

Gli attestati sono associati al discente e alle sue aziende nel tenant corrente. Nel fascicolo e nello ZIP compaiono i documenti comuni del corso e i documenti individuali del titolare. Gli attestati storici privi di titolarità verificata richiedono riconciliazione prima di essere inclusi.

Azioni e sincronizzazione

I vecchi URL di generazione/sincronizzazione mostrano una conferma. L'operazione avviene con invio del modulo, non all'apertura del collegamento.

Per le iscrizioni dirette da ordine WooCommerce sono assegnate tutte le giornate indicate nei metadati o associate alla variante. Una selezione esplicita contenente giornate inesistenti o di un altro corso viene rifiutata. I preventivi conservano ancora la singola giornata della prenotazione: la prenotazione multigiornata non è inclusa in questa correzione.

Un job WooCommerce con errori segnala un esito di errore al servizio di esecuzione. Il recupero ordini utilizza la data di modifica, includendo così gli aggiornamenti di ordini creati in precedenza. Parametro documentato nell'API ufficiale WooCommerce; la compatibilità dell'installazione va confermata nel collaudo.

I partecipanti rimasti «convertiti» senza iscrizione dopo una pulizia vengono segnalati come da verificare dalla riconciliazione: non vengono ricreate iscrizioni automaticamente.

Iscrizione manuale, registro e preventivi

In Iscrizioni → Aggiungi selezionare corso, discente, una edizione attiva e un cliente esistente autorizzato. Le giornate pianificate sono quelle dell'edizione scelta. La selezione non crea clienti: se manca l'anagrafica, verificare PI per aziende o CF per privati e gestire l'anagrafica esplicitamente.

Nel registro, Aggiungi discenti richiede l'edizione. Il rinnovo è ammesso solo dopo la scadenza e mantiene la frequenza precedente. Le capienze sono controllate sulle giornate, senza sommare indiscriminatamente tutte le edizioni passate.

L'import corsisti con anteprima richiede corsi ed edizioni già preparati; per precedenti senza calendario utilizzare l'import storico nel libretto. Non usare il caricamento dello storico per certificare una nuova frequenza.

Nel link del preventivo il cliente indica nuovo o aggiornamento, conferma quanto verificato e, se nota, la scadenza precedente. Gli stessi campi sono disponibili nel template XLSX. La dichiarazione resta con il partecipante fino alla conversione; non supera un precedente ancora valido. Dopo la conversione, le modifiche passano dal gestionale, non dal link pubblico. La conversione richiede un cliente esistente e un'edizione non ambigua; eventuali mancanze richiedono verifica dell'operatore. Le integrazioni identificano i clienti per PI/CF, non dal solo nome o da un'email condivisa.

Presenze e documenti di evidenza

Le azioni rapide Apri presenze mattina/pomeriggio aprono il registro: non attestano una presenza e non creano una firma. Selezionare la giornata e la fascia effettiva, oppure raccogliere la firma tramite tablet. I flag generali dell'iscrizione non sostituiscono il registro giornaliero.

Per validare un registro firmato o un documento esterno, selezionare esplicitamente le frequenze che il documento copre. Devono avere cliente, edizione e giornate concluse. La selezione non è automatica. Una nuova iscrizione allo stesso corso non eredita la validazione. Cambio di calendario, cliente/edizione o versione del documento invalida l'evidenza associata: effettuare nuovamente la verifica. La riapertura della validazione sospende l'utilizzo dell'evidenza.

Le validazioni legacy a livello corso non vengono convertite automaticamente in dichiarazioni sulle singole frequenze. Prima di completare o rigenerare un attestato, verificare presenze o nuova attribuzione esplicita dell'evidenza.

Integrazioni e ruoli

La credenziale WooCommerce è vincolata al tenant configurato e al provider WooCommerce. Un tenant o provider diverso è rifiutato; lo stato readonly impedisce l'inoltro di scritture. Nessun segreto deve essere inserito nelle guide o nei log.

Le restrizioni IAM configurate si applicano anche agli elenchi FAB di corsi e record collegati. La modalità legacy hybrid resta disponibile per utenti privi di assegnazioni IAM: non costituisce una certificazione di accesso limitato per clienti. Prima dell'apertura ai clienti completare il collaudo dei ruoli e dello scoping in modalità prevista dal tenant.

Installazione del candidato

Richiesta la migrazione f7d932e9f804 prima dell'avvio del codice: aggiunge l'evidenza alla frequenza senza attribuzioni retroattive. Il downgrade rifiuta di cancellare evidenze esistenti. La migrazione è stata preparata per il collaudo, non eseguita su ambienti reali.

Lo script scripts/formazione_reconcile_audit.py è incluso per rendere il pacchetto completo; l'inclusione non autorizza l'applicazione sui dati reali. Usare prima il piano in sola lettura; ogni riconciliazione effettiva richiede verifica e autorizzazione del piano con snapshot. Non crea iscrizioni o clienti.

Errore nella stampa asincrona

Se la stampa non parte o la generazione fallisce, il messaggio invita a riprovare o contattare l’assistenza. I dettagli tecnici del backend non vengono mostrati nel browser. Comunicare all’assistenza il corso e l’orario del tentativo; se disponibile, conservare l’identificativo del task. Un registro ancora in elaborazione non è disponibile per il download; un file non più presente deve essere rigenerato.

Revoca delle assegnazioni IAM

Per gli utenti già collegati a un’identità IAM, la revoca o scadenza dell’ultima assegnazione Formazione e la disattivazione del soggetto o del ruolo rimuovono la visibilità dei corsi anche in modalità hybrid. Non viene ripristinato l’accesso storico esteso al tenant. Per riabilitare l’utente occorre assegnare esplicitamente un ambito valido. Questa correzione non converte automaticamente gli utenti storici privi di collegamento IAM.

Il link pubblico del preventivo mostra un diniego 403 senza il modulo di modifica quando Formazione è disabilitata o la richiesta di scrittura avviene in sola lettura. Nessun dato partecipante viene aggiornato.

Normalizzazione dei partecipanti al preventivo

La ricerca automatica del discente per codice fiscale, email o nominativo resta limitata al tenant corrente anche quando lo slot non ha ancora un cliente. Un cliente indicato restringe ulteriormente la ricerca.

L'azione «Crea dipendente» può riutilizzare un'anagrafica già presente nel tenant corrente. Se il codice fiscale esiste soltanto fuori dal tenant, l'operazione si ferma e richiede una verifica autorizzata: non collega automaticamente quell'anagrafica, non la duplica e non crea clienti. Il messaggio non espone i dati dell'altro tenant.

I moduli della pagina «Partecipanti preventivo» includono il token CSRF della sessione: le operazioni richiedono la pagina autenticata e la protezione rimane attiva.

Ambiti della coda partecipanti

La pagina «Partecipanti preventivo», i relativi contatori e le azioni di collegamento/creazione del discente applicano gli ambiti corso IAM e la visibilità cliente già previsti dal gestionale. Uno slot senza cliente rimane verificabile solo se il corso è accessibile.

La conversione richiede una prenotazione accessibile e tutti i suoi partecipanti visibili. Se anche uno slot non è disponibile, l'operazione si interrompe prima della conversione; non converte soltanto la parte visibile. Passare direttamente un ID nel form non amplia l'accesso. Per gli altri ingressi interni vedere la sezione «Altri ingressi commerciali». Il collaudo dell’integrazione WooCommerce esterna resta distinto.

Docente operativo e responsabile

Il docente opera soltanto sui corsi assegnati tramite IAM. L'amministratore può assegnare al suo ruolo le capacità can_presenze e can_evidenze su CorsoView, insieme a can_list/can_show per raggiungere i corsi. Questi permessi non consentono l'iscrizione di nuovi discenti, il controllo finale, la riapertura o la generazione attestati. Non assegnare can_edit per abilitare le presenze.

La pagina documenti invia i caricamenti a «carica-evidenza» e le azioni finali a «controllo-finale». Il vecchio indirizzo di validazione resta compatibile, ma controlla il permesso dell'azione richiesta: cambiare l'URL o il valore del form non amplia l'accesso.

Il responsabile deve avere l'ambito IAM formazione_manager sul corso/cliente/tenant pertinente. Il controllo finale richiede inoltre can_controllo_finale su CorsoView; per i responsabili esistenti resta valido can_edit sullo stesso view. Completamento e generazione attestati mantengono i permessi FAB già previsti su DipendenteCorsoView (can_completa, can_genera_attestato), aggiungendo il controllo IAM del responsabile. Importare completamenti/scadenze o caricare un attestato esterno dal fascicolo richiede anch'esso il responsabile.

Dopo la validazione il docente può consultare il corso, ma non alterare presenze o sostituire l'evidenza per farlo tornare in attesa. Deve chiedere la riapertura al responsabile. La riapertura non revoca automaticamente i PDF già emessi.

La disponibilità delle nuove capacità nel catalogo permessi non le assegna automaticamente a utenti o ruoli. Prima del rilascio verificare gli incarichi IAM e applicare assegnazioni esplicite ai docenti interessati; controllare con un account docente e un responsabile. In questa attività sono stati assegnati soltanto ruoli sintetici nel LAB, non account reali.

Altri ingressi commerciali

Elenco ordini, contatori, preventivo, anteprima firmato, CSV fatturazione, pianificazione, preparazione preventivo, invio link e conferma applicano il filtro corso/tenant e verificano gli slot collegati. Un ordine con partecipanti non visibili viene escluso interamente. Gli ordini senza corso assegnato non sono esposti attraverso questa coda filtrata: devono essere risolti con un percorso autorizzato prima dell'operatività. Gli alias diretti del preventivo e del firmato richiedono anche il permesso di accesso alla coda.

Il LAB verifica i dinieghi senza inviare comunicazioni esterne. Questo non equivale al collaudo di una spedizione email o dell'integrazione WooCommerce reale.

Caricare il preventivo firmato

Nel link cliente usare Carica PDF firmato e inviare il modulo completo dei corsisti. Sono accettati file con estensione PDF e intestazione PDF; il tipo dichiarato dal browser non determina il tipo dell’anteprima. Il limite predefinito è 12 MiB, salvo diversa configurazione autorizzata. File vuoti, fuori formato o troppo grandi vengono rifiutati. Questo controllo non verifica la firma digitale né il contenuto legale del documento.

In caso di indisponibilità dell’archivio principale resta il salvataggio di emergenza previsto dal sistema. Ogni nuovo invio usa un file distinto: non sovrascrive quello già collegato al preventivo, anche se il nome è uguale. Attendere il messaggio di conferma prima di considerare concluso l’invio. Il reinvio aggiorna l’allegato collegato solo dopo il salvataggio dei dati.

L’assistenza deve verificare gli allegati non collegati rimasti dopo un errore di salvataggio: questa modifica non introduce una pulizia automatica o una sincronizzazione dell’archivio di emergenza.

Recupero di un invio preventivo non riuscito

Se il salvataggio incontra un errore tecnico, il portale mostra «Invio non completato. Riprova; se il problema persiste, contatta l’assistenza», senza mostrare i dettagli interni dell’errore. Gli errori di compilazione mantengono il messaggio utile per correggere i dati.

In caso di errore al commit, i dati dei corsisti e il riferimento all’allegato precedentemente salvato rimangono invariati. Ripetere l’invio dopo il ripristino; non considerare riuscito un tentativo che ha mostrato un errore. L’allegato del tentativo fallito può restare non collegato nell’archivio e richiedere verifica dell’assistenza.

L’invio del link viene annotato solo quando il servizio email segnala successo. Questa annotazione non prova la consegna nella casella del destinatario. Se il messaggio parte ma il successivo salvataggio fallisce, verificare l’esito prima di reinviarlo: non è garantita l’assenza di duplicati email.

Conferme simultanee dei preventivi

Le conversioni acquisiscono il blocco sul corso prima di quello sulla prenotazione, anche passando dalle code amministrative. Questo coordina il controllo della capienza con le altre iscrizioni. Una conferma può attendere il completamento dell’altra operazione sullo stesso corso.

Ripetere una conferma già riuscita riutilizza l’iscrizione collegata. Se l’ultimo posto viene occupato da un’altra iscrizione, l’operazione viene rifiutata per capienza: aggiornare la pagina e verificare i posti disponibili. Le prove concorrenti su pochi casi non costituiscono una garanzia di prestazioni sotto carico o di assenza di qualunque errore transazionale.

Salvataggi simultanei del registro

Le firme e le conversioni delle prenotazioni acquisiscono i blocchi nello stesso ordine, prima sul corso e poi sulla giornata o prenotazione. I reinvii dal tablet preservano le firme già presenti. In caso di errore di salvataggio, ricaricare il registro per verificare le firme prima di riprovare: una risposta scaduta non dimostra che il salvataggio non sia avvenuto. Gli errori tecnici del database non vengono mostrati al pubblico.

I controlli sulle impostazioni tenant riutilizzano la connessione della richiesta. In caso di inizializzazione simultanea viene mantenuta la configurazione già registrata, senza sostituire i permessi con valori predefiniti. I controlli su tabelle e profili già predisposti non confermano operazioni pendenti della richiesta.

In caso di errore di salvataggio sul tablet, la pagina mostra l’avviso senza presentare un elenco parziale dei discenti. Ricaricare il registro per verificare lo stato completo delle firme prima del reinvio.