Vai al contenuto

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 corso CORDPILVQ;
  • 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:

  1. Leggere dal legacy il PDF da documenti.percorso_file.
  2. Caricare il blob nello storage SafeOps con upload_bytes.
  3. Creare documento con:
  4. tenant_key = tenant_besant;
  5. corso_id = CORANTLV2.id;
  6. data_caricamento dalla data documento legacy, se affidabile, altrimenti data import;
  7. data_scadenza uguale alla scadenza del libretto per attestati;
  8. note con legacy_documento_id, legacy_corso_id, legacy_dipendente_id.
  9. Creare sempre documento_version versione 1 con lo stesso minio_key.
  10. Per attestati discente, inserire documento_dipendente(documento_id, dipendente_id).
  11. Aggiornare storico_formativo_discente.attestato_documento_id sulla riga con:
  12. provider_code = securehub_legacy;
  13. external_id = securehub:dipendente_corso:<legacy_dipendente_corso_id>.
  14. Per registri presenza, collegare a registro_documento_id solo 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_id quando il documento sara' caricato;
  • origine legacy e identificativi legacy;
  • stato validazione.

Chiave proposta per evitare duplicati:

  • provider_code = securehub_legacy
  • external_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.tsv
  • events_plan.tsv
  • dates_plan.tsv
  • participants_plan.tsv
  • storico_formativo_discente_plan.tsv
  • documents_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:

  1. Bonificare o mappare i 49 discenti non agganciati.
  2. Confermare i 3 eventi senza documenti.
  3. Fare verifica visuale autenticata nel libretto DEV.
  4. Preparare import file pilota per pochi attestati e registri, copiando i PDF legacy nello storage SafeOps e aggiornando attestato_documento_id / registro_documento_id.
  5. Ripetere il dry-run prima di ogni import successivo o prima di portare in produzione.