Formazione - dry-run import Antincendio livello 2¶
Data: 2026-09-02
Ambiente: DEV SafeOps
Legacy: SecureHub categoria 48
SafeOps target: corso catalogo CORANTLV2
Aggiornamento verifica: 2026-09-03
Esito sintetico¶
Il dry-run ha verificato la migrazione della categoria legacy Antincendio livello 2 verso il corso SafeOps CORANTLV2, senza scrivere su database SafeOps e senza creare date WooCommerce.
| Voce | Conteggio |
|---|---|
| Eventi legacy | 37 |
| Date legacy | 37 |
| Iscrizioni legacy | 277 |
| Iscrizioni pronte | 228 |
| Iscrizioni gia' presenti nel libretto storico | 0 |
| Iscrizioni bloccate per dipendente mancante | 46 |
| Iscrizioni bloccate per codice fiscale mancante | 3 |
| Iscrizioni bloccate per codice fiscale duplicato | 0 |
| Righe libretto storico pronte | 228 |
| Righe libretto storico gia' presenti | 0 |
| Righe documenti legacy | 297 |
| Documenti pronti | 218 |
| Documenti bloccati | 79 |
| Eventi senza documenti | 3 |
Import pilota DEV¶
Dopo il dry-run e' stato applicato solo su DEV l'import delle 228 righe pronte in storico_formativo_discente.
Verifica post-import DEV:
| Controllo | Esito |
|---|---|
Righe securehub_legacy totali |
228 |
Righe securehub_legacy CORANTLV2 |
228 |
Duplicati su provider_code + external_id |
0 |
Righe con cliente_id valorizzato da azienda univoca del dipendente |
100 |
Le righe senza cliente_id non sono state forzate: il dipendente non aveva un'unica azienda ricavabile in modo sicuro nel tenant.
Produzione non modificata da questo import pilota:
| Controllo PROD | Esito |
|---|---|
Righe securehub_legacy totali |
0 |
Righe securehub_legacy CORANTLV2 |
0 |
Import produzione 2026-09-03¶
Dopo nuova verifica dry-run su produzione:
| Controllo PROD pre-import | Esito |
|---|---|
| Eventi legacy categoria 48 | 37 |
| Date legacy | 37 |
| Iscrizioni legacy | 277 |
| Righe pronte per libretto storico | 228 |
| Righe gia' presenti | 0 |
| Bloccate per dipendente non trovato | 46 |
| Bloccate per codice fiscale mancante | 3 |
| Duplicati codice fiscale SafeOps | 0 |
Applicato import controllato solo su storico_formativo_discente produzione:
| Controllo PROD post-import | Esito |
|---|---|
Righe securehub_legacy totali |
228 |
Righe securehub_legacy CORANTLV2 |
228 |
Duplicati provider_code + external_id |
0 |
Non sono state create date corso, edizioni corso, iscrizioni aula o variation WooCommerce da questo import. L'import ha popolato solo il libretto storico dipendente.
File prodotti:
- dry-run DEV aggiornato:
/home/safeops/tmp/formazione_import_dryrun_20260903/antincendio_lv2_dev - dry-run PROD:
/home/safeops/tmp/formazione_import_dryrun_20260903/antincendio_lv2_prod - apply PROD e backup:
/home/safeops/tmp/formazione_import_apply_20260903/antincendio_lv2_prod
Verifica WooCommerce post-import:
- prodotti formazione rilevati: 31;
- variation data/orario rilevate: 2;
- entrambe risultano collegate a edizioni SafeOps produzione (
1740,1741) del corsoCORDPILVQ; - nessuna nuova variation generata dall'import storico
CORANTLV2.
Verifica route e campioni¶
Route DEV controllate da non autenticato:
| URL | Esito |
|---|---|
/formazione-libretto-discente/4396 |
HTTP 302 verso login, nessun 500 |
/formazione-libretto-discente/2520 |
HTTP 302 verso login, nessun 500 |
/formazione-scadenze-attestati/ |
HTTP 302 verso login, nessun 500 |
Campioni verificati nel DB DEV:
| Dipendente | Azienda | Completamento | Scadenza |
|---|---|---|---|
| Cosimo Casaburi | CON.S.A.R. SOC.COOP.CONS | 2024-09-06 | 2029-09-06 |
| Fabrizio Bernardi | non forzata | 2024-09-17 | 2029-09-17 |
La verifica autenticata visuale resta da fare con sessione browser/cookie valido.
Audit file legacy¶
Audit fisico read-only dei file legacy categoria 48 su SecureHub:
| Controllo | Esito |
|---|---|
| Righe documento legacy | 297 |
| Attestati/certificati discente | 249 |
| Registri presenza | 48 |
| Percorsi file presenti | 297 |
| Percorsi file mancanti | 0 |
| Dimensione totale file rilevati | 134743467 byte |
Radici file:
/home/securehub/gestione: 262 file/mnt/besant_docu/static: 35 file
Piano import file pilota¶
Per collegare attestati e registri legacy senza duplicare dati:
- Leggere dal legacy il PDF da
documenti.percorso_file. - Caricare il blob nello storage SafeOps con
upload_bytes. - Creare
documentocon: tenant_key = tenant_besant;corso_id = CORANTLV2.id;data_caricamentodalla data documento legacy, se affidabile, altrimenti data import;data_scadenzauguale alla scadenza del libretto per attestati;noteconlegacy_documento_id,legacy_corso_id,legacy_dipendente_id.- Creare sempre
documento_versionversione 1 con lo stessominio_key. - Per attestati discente, inserire
documento_dipendente(documento_id, dipendente_id). - Aggiornare
storico_formativo_discente.attestato_documento_idsulla riga con: provider_code = securehub_legacy;external_id = securehub:dipendente_corso:<legacy_dipendente_corso_id>.- Per registri presenza, collegare a
registro_documento_idsolo quando il registro e' associabile in modo univoco a una data/corso legacy; in caso contrario lasciarlo come documento corso e marcarlo da revisione.
Import pilota consigliato:
- 5 attestati di discenti gia' importati;
- 2 registri presenza;
- verifica download/preview documentale;
- verifica libretto discente con link attestato;
- nessun import massivo finche' questi controlli non sono positivi.
Blocchi rilevati¶
Le 49 iscrizioni non importabili automaticamente sono divise in:
- 46 dipendenti legacy non trovati in SafeOps tramite codice fiscale.
- 3 iscrizioni collegate a un dipendente legacy senza codice fiscale valido.
I 79 documenti bloccati dipendono dallo stesso problema: il discente non e' agganciabile con certezza a un dipendente SafeOps.
Eventi da revisione per assenza documenti:
| Legacy corso | Codice legacy | Prima data | Iscritti | Documenti discente |
|---|---|---|---|---|
| 327 | ANTILIV2 |
2025-09-24 | 3 | 0 |
| 379 | ANTLIV2 04 |
2025-11-14 | 3 | 0 |
| 613 | ANTILIV2 10 |
2026-06-26 | 16 | 0 |
Decisione dati per il libretto¶
Non serve creare una nuova tabella ponte: SafeOps ha gia' storico_formativo_discente, usata dal libretto sicurezza dipendente.
Per l'import legacy il record deve essere una riga di storico_formativo_discente con:
- tenant;
- dipendente;
- corso catalogo;
- titolo/codice corso;
- data completamento e scadenza;
- attestato o registro collegato tramite
attestato_documento_id/registro_documento_idquando il documento sara' caricato; - origine legacy e identificativi legacy;
- stato validazione.
Chiave proposta per evitare duplicati:
provider_code = securehub_legacyexternal_id = securehub:dipendente_corso:<legacy_dipendente_corso_id>
Il documento SafeOps resta il contenitore file/versioni. Il legame con il discente passa da storico_formativo_discente, non da un campo aggiunto a documento.
File prodotti dal dry-run¶
Directory:
/home/safeops/tmp/formazione_import_dryrun_20260902/antincendio_lv2_dev
File:
summary.tsvevents_plan.tsvdates_plan.tsvparticipants_plan.tsvstorico_formativo_discente_plan.tsvdocuments_plan.tsv
Backup pre-import DEV delle righe legacy gia' presenti:
/home/safeops/tmp/formazione_import_apply_20260902/antincendio_lv2_dev/storico_formativo_discente_existing_securehub_legacy.tsv
Decisione operativa proposta¶
Non procedere ancora con import reale massivo o produzione della categoria 48.
Prossimo passo consigliato:
- Bonificare o mappare i 49 discenti non agganciati.
- Confermare i 3 eventi senza documenti.
- Fare verifica visuale autenticata nel libretto DEV.
- Preparare import file pilota per pochi attestati e registri, copiando i PDF legacy nello storage SafeOps e aggiornando
attestato_documento_id/registro_documento_id. - Ripetere il dry-run prima di ogni import successivo o prima di portare in produzione.