Anteprima migrazione corso legacy -> SafeOps: Preposti¶
Data: 2026-09-02
Modalita: sola lettura. Nessuna scrittura DB, nessun file copiato, nessun restart.
Identita legacy¶
Corso catalogo legacy da considerare:
- tabella:
categorie_corsi id: 37- nome:
Preposti per la sicurezza - scadenza: 5 anni
- categoria documentale certificato:
39 - Certificato Preposti per la sicurezza
Nel legacy i record in corsi sotto questa categoria sono edizioni/eventi storici
ripetuti, non corsi catalogo distinti.
Numeri legacy¶
Totale categoria:
- eventi legacy in
corsi: 40 - date in
date_corsi: 51 - iscrizioni in
dipendente_corso: 431 - documenti discente collegati: 415
Liste complete estratte:
- corsi/eventi legacy:
/home/safeops/tmp/formazione_legacy_match_20260902/preposti/preposti_corsi_legacy.tsv - date/orari legacy:
/home/safeops/tmp/formazione_legacy_match_20260902/preposti/preposti_date_legacy.tsv
I file contengono rispettivamente 40 eventi legacy e 51 date/orari, con proposta
destinazione CORFORPRE o AGGCRSPRE.
Split rilevato nella categoria:
- formazione preposti: 23 eventi, 34 date, 201 iscrizioni, 201 documenti, date dal 2024-09-09 al 2026-07-01
- aggiornamento preposti: 17 eventi, 17 date, 230 iscrizioni, 214 documenti, date dal 2025-01-24 al 2026-06-26
Regola di split proposta:
- se
corsi.nomecontieneAGGIORNAMENTOoppuredurata_ore = 6-> aggiornamento preposti - altrimenti -> formazione preposti
Destinazione SafeOps¶
Catalogo SafeOps esistente:
CORFORPRE->Corso per la Sicurezza sul Lavoro per Preposti- SafeOps id DEV: 39
- tipo:
in_presenza - durata: 12 ore
- capienza: 24
-
date SafeOps gia presenti: 5
-
AGGCRSPRE->Corso di Aggiornamento Sicurezza sul Lavoro per Preposti - SafeOps id DEV: 38
- tipo:
in_presenza - durata: 6 ore
- capienza: 24
- date SafeOps gia presenti: 3
Nota: alcuni eventi legacy di formazione preposti hanno durata 8 ore, altri 12 ore. Questa differenza va mantenuta nello storico/import evento, senza cambiare il catalogo SafeOps prima di una decisione funzionale.
Come diventerebbe in SafeOps¶
Per ogni evento legacy in corsi:
- non creare un nuovo corso catalogo se rientra nello split sopra;
- agganciare l'evento al corso SafeOps
CORFORPREoAGGCRSPRE; - creare o agganciare le date in
data_corso; - preservare orari mattina/pomeriggio quando presenti;
- preservare capienza legacy come metadato evento, se diversa da catalogo SafeOps;
- importare iscrizioni in
dipendente_corso; - impostare
esito = completatosolo quando esiste certificato/attestato collegato; - calcolare
data_scadenza_attestatodalla data completamento + 5 anni quando coerente; - importare certificati come documenti del libretto sicurezza dipendente;
- importare registri come archivio corso/evento.
Marcatura obbligatoria¶
Ogni record importato deve avere ponte legacy:
legacy_source = securehublegacy_categoria_corso_id = 37legacy_corso_idlegacy_date_corso_id, quando applicabilelegacy_dipendente_corso_id, quando applicabilelegacy_documento_id/legacy_allegato_id, quando applicabilesafeops_tenant_key = tenant_besantsafeops_corso_id = 39per formazione o38per aggiornamentomatch_method = categoria_split_nome_duratamatch_status = dry_run | pronto | importato | errore | da_revisionare
Controlli prima di import¶
- verificare 5 eventi campione formazione e 5 aggiornamento;
- verificare che i dipendenti siano agganciabili per codice fiscale;
- bloccare duplicati su coppia
corso_id + dipendente_id; - non importare date anomale;
- non sovrascrivere corsi/date SafeOps esistenti senza ponte legacy;
- non importare certificati senza file fisico verificabile;
- loggare righe scartate con motivo.
Decisione richiesta¶
Questa categoria puo essere migrata in due flussi:
Preposti formazione->CORFORPREPreposti aggiornamento->AGGCRSPRE
Prima dell'import va approvata la regola di split sopra.
Import storico 2026-09-03¶
Eseguita migrazione controllata solo su storico_formativo_discente.
Non sono stati creati:
data_corso;edizione_corso;dipendente_corso;- variazioni WooCommerce;
- documenti/attestati fisici.
Dry-run corretto¶
Piani generati con split da legacy_corso_id:
- DEV:
/home/safeops/tmp/formazione_import_dryrun_20260903/preposti_split_dev_v2/ - produzione:
/home/safeops/tmp/formazione_import_dryrun_20260903/preposti_split_prod_v2/
Risultato:
- partecipazioni legacy totali: 431;
- storico importabile: 426;
- bloccati per CF mancante: 2;
- bloccati per dipendente non trovato in SafeOps: 3;
- duplicati legacy SafeOps: 0.
Split importato:
CORFORPRE: 201 storici, date completamento dal 2024-09-09 al 2026-06-29;AGGCRSPRE: 225 storici, date completamento dal 2025-01-24 al 2026-06-26.
Bloccati:
securehub:dipendente_corso:3280, CF mancante;securehub:dipendente_corso:3279, CF mancante;securehub:dipendente_corso:5032, dipendente non trovato;securehub:dipendente_corso:5034, dipendente non trovato;securehub:dipendente_corso:5031, dipendente non trovato.
Cleanup batch errato¶
Durante il primo apply lo split partecipanti era stato calcolato sul campo nome
del dipendente invece che sul corso legacy. Il batch e' stato eliminato subito con
cleanup mirato sugli external_id del piano Preposti:
- DEV backup:
/home/safeops/tmp/formazione_import_apply_20260903/preposti_split_dev_cleanup/deleted_storico_formativo_discente_backup.tsv - produzione backup:
/home/safeops/tmp/formazione_import_apply_20260903/preposti_split_prod_cleanup/deleted_storico_formativo_discente_backup.tsv - righe rimosse DEV: 426;
- righe rimosse produzione: 426.
Apply finale¶
Apply corretto:
- DEV:
/home/safeops/tmp/formazione_import_apply_20260903/preposti_split_dev_v2/ - produzione:
/home/safeops/tmp/formazione_import_apply_20260903/preposti_split_prod_v2/
Verifica finale DEV e produzione:
AGGCRSPRE: 225;CORFORPRE: 201;- duplicati
provider_code + external_id: 0.