Vai al contenuto

Match corsi legacy SecureHub -> SafeOps

Data audit: 2026-09-02

Modalita: sola lettura su legacy 10.200.0.251 e database SafeOps.

Artefatti CSV prodotti:

  • /home/safeops/tmp/formazione_legacy_match_20260902/dev/legacy_corsi.csv
  • /home/safeops/tmp/formazione_legacy_match_20260902/dev/safeops_corsi.csv
  • /home/safeops/tmp/formazione_legacy_match_20260902/dev/match_legacy_safeops_corsi.csv
  • /home/safeops/tmp/formazione_legacy_match_20260902/prod/match_legacy_safeops_corsi.csv

Nessuna migrazione, scrittura DB o restart eseguiti.

Sintesi

Il legacy contiene 654 record in corsi; SafeOps Besant contiene 34 corsi catalogo in DEV e 35 in produzione. Il match non deve essere trattato come corso legacy = corso SafeOps uno-a-uno: nel legacy molti record corsi rappresentano edizioni storiche/eventi, mentre in SafeOps il modello corrente usa il corso come catalogo e collega date, partecipanti, registro e attestati.

Correzione criterio dopo revisione: il match operativo principale deve essere categorie_corsi legacy -> corso SafeOps. I record legacy corsi sono da trattare come eventi/edizioni storiche ripetute, collegate alla categoria corso.

Match categoria legacy -> corso SafeOps:

  • categorie legacy totali: 59
  • categorie con alias forte: 36
  • categorie da revisionare: 9
  • categorie non usate: 14
  • iscrizioni coperte da alias forte: 4.324 su 4.695
  • documenti discente coperti da alias forte: 3.391
  • registri coperti da alias forte: 723

CSV corretto per la revisione:

  • /home/safeops/tmp/formazione_legacy_match_20260902/dev/match_legacy_categorie_safeops_corsi.csv
  • /home/safeops/tmp/formazione_legacy_match_20260902/prod/match_legacy_categorie_safeops_corsi.csv

Primo match automatico DEV:

  • match forte: 7
  • match probabile: 88
  • match debole: 172
  • non trovato: 387

Primo match automatico produzione:

  • match forte: 7
  • match probabile: 88
  • match debole: 172
  • non trovato: 387

Perche il match sui record corsi non basta

Solo 7 corsi legacy hanno un codice direttamente sovrapponibile al codice catalogo SafeOps. Il campo legacy codice e spesso un identificativo evento, esempio CRSIN-...; il campo Codice_corso contiene spesso codici storici progressivi o alias non identici a SafeOps, esempio BLSD 01, ANTLIV2 04, PSGRBC 08.

Quindi il match corretto deve usare questa priorita:

  1. Codice_corso/codice legacy normalizzati contro corso.codice SafeOps.
  2. categoria legacy categorie_corsi.nome e categoria_documentale_id.
  3. titolo legacy corsi.nome normalizzato.
  4. durata, date e tipo come controlli di coerenza, non come chiave primaria.
  5. revisione manuale per categorie generiche come ALTRI CORSI, CORSI SPECIFICI, SICUREZZA LAVORATORI, PREPOSTI E DIRIGENTI.

Nota: la priorita sopra va applicata partendo da categorie_corsi, non dai singoli record corsi.

Peso migrazione per categoria legacy

Categorie principali per numero iscrizioni:

  • Corso sicurezza lavoratori aziende ad alto rischio specifico: 537 iscrizioni, 12 documenti
  • Preposti per la sicurezza: 431 iscrizioni, 415 documenti
  • Antincendio livello 2 formazione: 277 iscrizioni, 249 documenti
  • Aggiornamento lavoratori e preposto: 277 iscrizioni, 254 documenti
  • Sicurezza lavoratori alto rischio: 232 iscrizioni, 190 documenti
  • Aggiornamento primo soccorso gruppo A: 230 iscrizioni, 222 documenti
  • DPI terza categoria e lavori in quota: 229 iscrizioni, 222 documenti
  • Spazi confinati: 177 iscrizioni, 167 documenti
  • Aggiornamento antincendio livello 3: 155 iscrizioni, 145 documenti
  • Aggiornamento primo soccorso gruppo B/C: 152 iscrizioni, 141 documenti
  • Carrelli elevatori formazione: 147 iscrizioni, 146 documenti
  • Altri corsi: 143 iscrizioni, 139 documenti
  • Aggiornamento carrelli elevatori: 142 iscrizioni, 128 documenti
  • Primo soccorso gruppo A: 122 iscrizioni, 108 documenti
  • Aggiornamento antincendio livello 2: 113 iscrizioni, 103 documenti

Categorie con iscritti da revisionare manualmente:

  • ALTRI CORSI: 143 iscrizioni, 139 documenti
  • CORSI SPECIFICI: 106 iscrizioni, 91 documenti
  • Corso di Formazione Sicurezza Dirigenti: 28 iscrizioni, 28 documenti
  • CORSO PALA CARICATRICE FRONTALE: 28 iscrizioni, 28 documenti
  • CORSO AGGIORNAMENTO PALA CARICATRICE FRONTALE: 22 iscrizioni, 19 documenti
  • CORSO DI FORMAZIONE PARTE GENERALE LAVORATORI: 20 iscrizioni, 0 documenti
  • corsi: 19 iscrizioni, 12 documenti
  • ADDETTO AI LAVORI ELETTRICI: 4 iscrizioni, 4 documenti
  • ANTINCENDIO: 1 iscrizione, 1 documento

Regola dati consigliata

La migrazione deve creare una tabella di ponte, non affidarsi a match impliciti:

  • legacy_source = securehub
  • legacy_corso_id
  • safeops_corso_id
  • safeops_tenant_key
  • match_status: codice, categoria_alias, titolo, manuale, nuovo_corso
  • match_score
  • reviewed_by
  • reviewed_at
  • note

Questa tabella permette di importare in modo ricostruibile:

  • date legacy -> data_corso/edizioni storiche SafeOps;
  • iscrizioni legacy -> dipendente_corso;
  • attestati/certificati legacy -> documenti del libretto sicurezza;
  • registri legacy -> archivio corso;
  • categorie/scadenze legacy -> scadenze attestato dove coerenti.

Proposta match semantico iniziale

Mappare con alias controllati, da approvare prima della migrazione:

  • BLSD / Aggiornamento BLSD -> BLSD, AGGFORBLS, CORFORBLS
  • Antincendio livello 1/2/3 -> CORANTLV1, CORANTLV2, CORANTLV3
  • Aggiornamento antincendio livello 1/2/3 -> AGGANTLV1, AGGANTLV2, AGGANTLV3
  • Primo soccorso gruppo A -> CORPRSGRA, AGGCPSGRA
  • Primo soccorso gruppo B/C -> CORPSGRBC, AGGCPSGBC
  • Sicurezza lavoratori basso/medio/alto -> CORLAVRBR, CORLAVRMR, CORLAVRAL
  • Aggiornamento lavoratori -> AGGSICLAV o AGGLAVEDI se edile
  • Preposti -> CORFORPRE, AGGCRSPRE
  • PES/PAV -> CORPESPAV, AGGPESPAV
  • PLE -> CORFORPLE, AGGCRSPLE
  • Carrelli elevatori -> CORCARELE, AGGCRSCAR
  • Spazi confinati -> CORSPACON, AGGSPACON
  • DPI/lavori in quota -> CORDPILVQ
  • Gru autocarro -> CORGRUAUT
  • Privacy -> CORFORPRI
  • Gas tossici -> CORGASTOS

Rischi

  • I match fuzzy possono produrre falsi positivi, soprattutto tra formazione e aggiornamento o tra livelli rischio/livelli antincendio.
  • Alcuni corsi legacy sono categorie generiche o corsi esterni/non gestiti: non vanno forzati su un catalogo SafeOps sbagliato.
  • Il legacy non ha tenant: va importato nel perimetro tenant_besant solo dopo controllo.
  • Il legacy non ha esito iscrizione: completamento e scadenza vanno dedotti da attestato/certificato collegato.
  • Date anomale gia rilevate nel legacy, anni 206 e 2206, devono essere escluse o corrette.

Prossimo passo consigliato

  1. Validare la mappa alias categorie_corsi legacy -> SafeOps corso.
  2. Rieseguire il matcher usando alias approvati e separare: auto_match, da_revisionare, creare_nuovo_corso, non_migrare.
  3. Produrre anteprima migrazione con conteggi per corso SafeOps: date, partecipanti, attestati, registri.
  4. Fare import solo su DEV con tabella ponte e dry-run obbligatorio.
  5. Validare campioni reali prima di allineare produzione.