Vai al contenuto

DVR - Modello Rischi e Misure

Questa nota fissa il modello operativo da usare per trasformare la raccolta dati DVR in una base riusabile per:

  • PDF raccolta dati
  • DVR finale esteso
  • DVR finale sintetico
  • allegati per GOE
  • schede attrezzatura
  • tabelle misure di prevenzione e protezione

Non descrive ancora il codice. Congela il modello logico prima dello sviluppo.

Obiettivo

Il Compila DVR React va trattato come:

  • raccolta dati strutturata
  • non documento finale DVR

Il documento finale DVR deve invece essere costruito a partire da un layer intermedio di:

  • rischi del caso
  • misure del rischio
  • attrezzature del caso
  • misure puntuali delle attrezzature

Sorgenti usate

La struttura e' stata derivata dai file reali:

Tipi di rischio

Nei DVR reali le misure non hanno una sola forma. Vanno distinte in 3 pattern:

  1. chapter
  2. rischio di capitolo
  3. include tipicamente:
    • individuazione rischi
    • P/M/R
    • misure attuate
    • misure da osservare
  4. equipment_family
  5. prescrizioni generali per una famiglia di attrezzature
  6. puo' avere anche misure puntuali su singole attrezzature
  7. equipment_item
  8. misure puntuali per una attrezzatura concreta nel GOE

Entita' logiche

case_context

Contiene:

  • azienda
  • sedi
  • organigramma sicurezza
  • attivita'
  • riferimenti documento

goe

Contiene:

  • area / reparto / GOE
  • note descrittive

mansione

Contiene:

  • mansione
  • GOE
  • attivita' / compito
  • note
  • eventuali rischi associati descrittivi

attrezzatura_del_caso

Contiene:

  • GOE
  • famiglia attrezzatura
  • nome attrezzatura
  • marca
  • modello
  • tipo
  • matricola
  • note

case_risk

Contiene:

  • rischio del caso
  • GOE opzionale
  • mansione opzionale
  • attrezzatura opzionale
  • descrizione contesto
  • note valutazione
  • P/M/R
  • stato

misura_del_rischio

Contiene:

  • misura attuata o da osservare
  • testo
  • responsabile
  • scadenza
  • periodicita'
  • priorita'
  • stato
  • note

misura_attrezzatura

Contiene:

  • testo misura
  • responsabile
  • scadenza
  • periodicita'
  • priorita'
  • stato
  • note
  • collegamento alla singola attrezzatura del caso

Relazioni

Le relazioni sono:

  • un case_context ha molti goe
  • un goe ha molte mansioni
  • un goe ha molte attrezzature_del_caso
  • un case_context ha molti case_risk
  • un case_risk ha molte misure_del_rischio
  • una attrezzatura_del_caso ha molte misure_attrezzatura

Relazioni opzionali:

  • un case_risk puo' riferirsi a un goe
  • un case_risk puo' riferirsi a una mansione
  • un case_risk puo' riferirsi a una attrezzatura_del_caso

Stati minimi

case_risk

  • bozza
  • confermato
  • non_applicabile

misura_del_rischio e misura_attrezzatura

  • messa_in_atto
  • da_attuare
  • da_verificare
  • non_applicabile

Catalogo iniziale risk_code

I risk_code canonici iniziali sono:

  • illuminazione_aerazione
  • pavimentazioni
  • pareti_soffitti_coperture
  • porte_portoni
  • percorsi_passaggi
  • segnaletica_orizzontale
  • scale_fisse
  • soppalchi
  • scaffalature
  • superfici_vetrate
  • microclima
  • spogliatoi_servizi_igienici
  • rischio_incendio
  • primo_soccorso
  • macchine_generale
  • attrezzature_manuali
  • mezzi_semoventi_sollevamento
  • lavori_quota_ponteggi
  • impianto_termico
  • impianto_elettrico
  • mmc
  • posture_movimenti_ripetitivi
  • videoterminali
  • rumore
  • vibrazioni_meccaniche
  • campi_elettromagnetici
  • roa
  • agenti_chimici
  • agenti_cancerogeni_mutageni
  • amianto
  • agenti_biologici
  • dpi
  • sorveglianza_sanitaria
  • formazione_informazione_addestramento
  • categorie_particolari_lavoratori
  • stress_lavoro_correlato
  • segnaletica_sicurezza
  • posa_impianto_elettrico

Catalogo iniziale equipment_family_code

Le famiglie attrezzatura canoniche iniziali sono:

  • office_equipment
  • personal_computer
  • portable_electric_tools
  • manual_tools
  • forklift
  • lifting_equipment
  • work_at_height_equipment
  • portable_ladders
  • scaffolding
  • lifeline_systems
  • thermal_plant_equipment
  • electrical_plant_equipment
  • gpl_storage
  • pressure_equipment
  • fire_fighting_equipment
  • first_aid_equipment

Note funzionali sui risk_code

  • spogliatoi_servizi_igienici
  • sostituisce il nome piu' generico spogliatoi_servizi
  • e' piu' aderente ai blocchi reali del DVR
  • macchine_generale
  • va usato come rischio umbrella per prescrizioni generali macchina
  • non deve assorbire automaticamente tutte le misure delle singole attrezzature
  • lavori_quota_ponteggi
  • per ora resta un unico risk_code
  • va considerato candidato a futuro split in:
    • lavori_in_quota
    • ponteggi_opere_provvisionali
    • linee_vita_anticaduta
  • dpi
  • resta un capitolo trasversale
  • non sostituisce i rischi primari
  • categorie_particolari_lavoratori
  • semanticamente copre differenze individuali, genere, provenienza, eta' e fragilita'
  • il nome puo' restare invariato nel primo sviluppo
  • posa_impianto_elettrico
  • va considerato un rischio di attivita_specifica
  • non un rischio universale di tutti i DVR

Mappa equipment_family_code -> risk_code

  • office_equipment
  • impianto_elettrico
  • videoterminali
  • personal_computer
  • videoterminali
  • impianto_elettrico
  • microclima
  • illuminazione_aerazione
  • portable_electric_tools
  • macchine_generale
  • attrezzature_manuali
  • impianto_elettrico
  • rumore
  • vibrazioni_meccaniche
  • manual_tools
  • attrezzature_manuali
  • posture_movimenti_ripetitivi
  • mmc
  • forklift
  • mezzi_semoventi_sollevamento
  • rumore
  • vibrazioni_meccaniche
  • rischio_incendio
  • lifting_equipment
  • mezzi_semoventi_sollevamento
  • macchine_generale
  • lavori_quota_ponteggi
  • work_at_height_equipment
  • lavori_quota_ponteggi
  • dpi
  • portable_ladders
  • lavori_quota_ponteggi
  • scaffolding
  • lavori_quota_ponteggi
  • lifeline_systems
  • lavori_quota_ponteggi
  • dpi
  • thermal_plant_equipment
  • impianto_termico
  • rischio_incendio
  • agenti_chimici
  • electrical_plant_equipment
  • impianto_elettrico
  • posa_impianto_elettrico
  • campi_elettromagnetici
  • gpl_storage
  • rischio_incendio
  • agenti_chimici
  • pressure_equipment
  • macchine_generale
  • rischio_incendio
  • fire_fighting_equipment
  • rischio_incendio
  • segnaletica_sicurezza
  • first_aid_equipment
  • primo_soccorso

Note funzionali su equipment_family_code

  • personal_computer
  • va usato per postazioni VDT vere e proprie
  • office_equipment
  • va usato per stampanti, multifunzione, fax, distruggi documenti e piccole macchine da ufficio
  • portable_electric_tools e manual_tools
  • devono restare separati
  • forklift
  • copre il carrello elevatore
  • non va confuso con lifting_equipment
  • lifting_equipment
  • copre paranchi, gruette e apparecchi di sollevamento dedicati
  • work_at_height_equipment, portable_ladders, scaffolding, lifeline_systems
  • la separazione e' confermata
  • electrical_plant_equipment
  • copre componenti impianto, quadri, linee e distribuzione
  • non utensili elettrici portatili
  • gpl_storage
  • e' mantenuto come nome aderente ai file reali
  • pressure_equipment
  • resta valido anche se usato in pochi casi
  • fire_fighting_equipment
  • confermato
  • first_aid_equipment
  • confermato

Famiglie candidate future, ma non necessarie nel primo sviluppo:

  • warehouse_handling_equipment
  • per transpallet e mezzi minori di movimentazione
  • battery_charging_area
  • utile dove esiste un'area ricarica batterie strutturata
  • portable_fire_extinguishers
  • eventuale sottofamiglia futura di fire_fighting_equipment

Sezione DVR -> entita' generate

Sezione DVR case_context goe mansione attrezzatura_del_caso case_risk misura_del_rischio misura_attrezzatura
anagrafica_azienda si' no no no no no no
organizzazione_sicurezza si' no no no no no no
attivita_processo si' si' no no no no no
mansioni_rischi_speciali no no si' no no no no
attrezzature_personale no no no si' no no no
ambienti_servizi no no no no no no no
luoghi_lavoro no no no no si' si' no
emergenze_primo_soccorso no no no no si' si' no
macchine_attrezzature_impianti no no no no si' si' no
ergonomia_agenti_fisici no no no no si' si' no
agenti_chimici_biologici no no no no si' si' no
dpi_sorveglianza_formazione no no no no si' si' no
rischi_trasversali_documentazione no no no no si' si' no
piano_miglioramento_firme no no no no no no no

Mapping unico Compila -> entita'

Sezione Blocco Entita' generate risk_code Note
anagrafica_azienda dati azienda case_context anagrafica, sedi, riferimenti, orari
organizzazione_sicurezza ruoli sicurezza case_context datore lavoro, RSPP/ASPP, RLS, medici, addetti
attivita_processo descrizione attivita' case_context descrizione attivita' e processo
attivita_processo aree_goe_reparti[] goe qui nasce il catalogo GOE del caso
attivita_processo lavorazioni/interferenze case_context supporto contesto, non rischio diretto
mansioni_rischi_speciali mansioni[] mansione genera le mansioni con riferimento GOE
mansioni_rischi_speciali rischi_associati[] supporto mansione non genera ancora case_risk, arricchisce le mansioni
attrezzature_personale macchine_rischio_specifico[] attrezzatura_del_caso genera schede attrezzatura concrete
attrezzature_personale componenti_sicurezza[] attrezzatura_del_caso sempre attrezzatura concreta
attrezzature_personale elenco_soci_dipendenti[] case_context supporto persone / VDT / mansioni
ambienti_servizi blocchi descrittivi supporto contesto utile per luoghi_lavoro, ma non genera entita' autonome
luoghi_lavoro illuminazione e aerazione case_risk, misura_del_rischio illuminazione_aerazione P/M/R + misure attuate/osservare
luoghi_lavoro pavimentazioni case_risk, misura_del_rischio pavimentazioni idem
luoghi_lavoro pareti/soffitti/coperture case_risk, misura_del_rischio pareti_soffitti_coperture idem
luoghi_lavoro porte e portoni case_risk, misura_del_rischio porte_portoni idem
luoghi_lavoro percorsi e passaggi case_risk, misura_del_rischio percorsi_passaggi idem
luoghi_lavoro segnaletica orizzontale case_risk, misura_del_rischio segnaletica_orizzontale idem
luoghi_lavoro scale fisse case_risk, misura_del_rischio scale_fisse idem
luoghi_lavoro soppalchi case_risk, misura_del_rischio soppalchi idem
luoghi_lavoro scaffalature case_risk, misura_del_rischio scaffalature idem
luoghi_lavoro superfici vetrate case_risk, misura_del_rischio superfici_vetrate idem
luoghi_lavoro microclima case_risk, misura_del_rischio microclima idem
luoghi_lavoro spogliatoi/servizi case_risk, misura_del_rischio spogliatoi_servizi_igienici idem
emergenze_primo_soccorso prevenzione incendi case_risk, misura_del_rischio rischio_incendio capitolo incendio
emergenze_primo_soccorso primo soccorso case_risk, misura_del_rischio primo_soccorso capitolo pronto soccorso
emergenze_primo_soccorso addetti e dotazioni supporto case_context / case_risk arricchimento, non nuovo rischio
macchine_attrezzature_impianti mezzi semoventi case_risk, misura_del_rischio mezzi_semoventi_sollevamento puo' poi collegarsi a attrezzature concrete
macchine_attrezzature_impianti apparecchi a pressione case_risk, misura_del_rischio macchine_generale eventuale famiglia pressure_equipment a supporto
macchine_attrezzature_impianti apparecchi di sollevamento case_risk, misura_del_rischio mezzi_semoventi_sollevamento idem
macchine_attrezzature_impianti scale/lavori in quota case_risk, misura_del_rischio lavori_quota_ponteggi candidato split futuro
macchine_attrezzature_impianti impianto termico case_risk, misura_del_rischio impianto_termico capitolo impianto
macchine_attrezzature_impianti impianto elettrico case_risk, misura_del_rischio impianto_elettrico capitolo impianto
macchine_attrezzature_impianti posa impianto elettrico case_risk, misura_del_rischio posa_impianto_elettrico attivita' specifica
ergonomia_agenti_fisici MMC case_risk, misura_del_rischio mmc capitolo rischio
ergonomia_agenti_fisici posture/movimenti case_risk, misura_del_rischio posture_movimenti_ripetitivi capitolo rischio
ergonomia_agenti_fisici videoterminali case_risk, misura_del_rischio videoterminali usa anche supporto attrezzature/personale
ergonomia_agenti_fisici rumore case_risk, misura_del_rischio rumore capitolo rischio
ergonomia_agenti_fisici vibrazioni case_risk, misura_del_rischio vibrazioni_meccaniche capitolo rischio
ergonomia_agenti_fisici campi elettromagnetici case_risk, misura_del_rischio campi_elettromagnetici capitolo rischio
ergonomia_agenti_fisici ROA case_risk, misura_del_rischio roa capitolo rischio
agenti_chimici_biologici agenti chimici case_risk, misura_del_rischio agenti_chimici capitolo rischio
agenti_chimici_biologici cancerogeni/mutageni case_risk, misura_del_rischio agenti_cancerogeni_mutageni capitolo rischio
agenti_chimici_biologici amianto case_risk, misura_del_rischio amianto capitolo rischio
agenti_chimici_biologici agenti biologici case_risk, misura_del_rischio agenti_biologici capitolo rischio
dpi_sorveglianza_formazione DPI case_risk, misura_del_rischio dpi capitolo trasversale
dpi_sorveglianza_formazione sorveglianza sanitaria case_risk, misura_del_rischio sorveglianza_sanitaria capitolo trasversale
dpi_sorveglianza_formazione formazione/info/addestramento case_risk, misura_del_rischio formazione_informazione_addestramento capitolo trasversale
rischi_trasversali_documentazione categorie particolari case_risk, misura_del_rischio categorie_particolari_lavoratori capitolo trasversale
rischi_trasversali_documentazione stress lavoro correlato case_risk, misura_del_rischio stress_lavoro_correlato capitolo trasversale
rischi_trasversali_documentazione segnaletica sicurezza case_risk, misura_del_rischio segnaletica_sicurezza capitolo trasversale
piano_miglioramento_firme chiusura/firme output finale non genera entita' del modello rischio

Regole di trasformazione del mapping

  • case_context
  • nasce dalle prime 3 sezioni piu' alcune liste di persone
  • goe
  • nasce solo da attivita_processo
  • mansione
  • nasce da mansioni_rischi_speciali
  • attrezzatura_del_caso
  • nasce da attrezzature_personale
  • case_risk
  • nasce solo dai capitoli rischio veri
  • misura_del_rischio
  • nasce dai blocchi misure attuate / da osservare
  • misura_attrezzatura
  • nasce solo quando la prescrizione e' riferita a una attrezzatura concreta in un GOE concreto

Regole di generazione

Quando nasce un case_risk

Un case_risk nasce:

  1. in modo esplicito dal capitolo di rischio compilato
  2. in modo automatico per i capitoli strutturali, ma in stato bozza
  3. in modo suggerito da attrezzature o famiglie tecniche, senza creazione obbligatoria

Quando nasce una misura_del_rischio

Una misura_del_rischio nasce:

  • da misure standard del catalogo rischio
  • oppure da misure specifiche scritte per il caso

Quando nasce una attrezzatura_del_caso

Nasce ogni volta che una attrezzatura concreta viene censita nel compila, con:

  • GOE
  • famiglia
  • nome
  • dettagli identificativi disponibili

Quando nasce una misura_attrezzatura

Nasce quando viene definita una prescrizione puntuale riferita a:

  • una attrezzatura concreta
  • in un GOE concreto

Regola GOE

  • un case_risk puo' avere goe_riferimento
  • una attrezzatura_del_caso deve avere goe_riferimento
  • una misura_attrezzatura eredita il GOE dalla sua attrezzatura

Regola mansione

La mansione:

  • non crea automaticamente una foresta di rischi
  • serve per contestualizzare il rischio
  • serve per associare esposizioni e contesto operativo

Pipeline end-to-end

La pipeline corretta e':

  1. Compila raccolta dati
  2. normalizzazione
  3. PDF raccolta dati
  4. consolidamento rischi
  5. documento finale DVR

Quindi:

  • non Compila -> DVR finale diretto
  • ma Compila -> modello intermedio -> vari documenti finali

Output riusabili

Con questo modello si possono generare:

  • raccolta dati PDF
  • DVR finale esteso
  • DVR finale sintetico
  • allegato rischi per GOE
  • allegato attrezzature
  • tabelle misure di prevenzione e protezione

Decisione operativa

Prima del codice vanno considerati congelati:

  1. risk_code
  2. equipment_family_code
  3. regole di generazione
  4. mappa sezione -> entita' generate

Da qui in poi si puo' passare al modello dati o al mapping del Compila senza riaprire la logica di base.

DDL logico proposto

dvr_goe

Scopo: elenco GOE del caso.

Campi:

  • id
  • PK
  • bigint
  • case_id
  • FK -> dvr_case.id
  • not null
  • indexed
  • code
  • varchar(64)
  • not null
  • name
  • varchar(255)
  • not null
  • description
  • text
  • null
  • notes
  • text
  • null
  • sort_order
  • integer
  • not null
  • default 0
  • created_at
  • datetime
  • not null
  • updated_at
  • datetime
  • not null

Indici e vincoli:

  • unique: (case_id, code)
  • index: (case_id, sort_order)

dvr_mansione

Scopo: mansioni del caso.

Campi:

  • id
  • PK
  • case_id
  • FK -> dvr_case.id
  • not null
  • indexed
  • goe_id
  • FK -> dvr_goe.id
  • null
  • indexed
  • job_title
  • varchar(255)
  • not null
  • task_description
  • text
  • null
  • required_skills
  • text
  • null
  • required_experience
  • text
  • null
  • notes
  • text
  • null
  • sort_order
  • integer
  • not null
  • default 0
  • created_at
  • datetime
  • not null
  • updated_at
  • datetime
  • not null

Indici:

  • (case_id, goe_id)
  • (case_id, sort_order)

dvr_attrezzatura

Scopo: attrezzature concrete del caso.

Campi:

  • id
  • PK
  • case_id
  • FK -> dvr_case.id
  • not null
  • indexed
  • goe_id
  • FK -> dvr_goe.id
  • null
  • indexed
  • equipment_family_code
  • varchar(64)
  • not null
  • indexed
  • equipment_name
  • varchar(255)
  • not null
  • brand
  • varchar(255)
  • null
  • model
  • varchar(255)
  • null
  • equipment_type
  • varchar(255)
  • null
  • serial_number
  • varchar(255)
  • null
  • notes
  • text
  • null
  • sort_order
  • integer
  • not null
  • default 0
  • created_at
  • datetime
  • not null
  • updated_at
  • datetime
  • not null

Indici:

  • (case_id, goe_id)
  • (case_id, equipment_family_code)
  • (case_id, sort_order)

dvr_case_risk

Scopo: rischio istanziato nel caso.

Campi:

  • id
  • PK
  • case_id
  • FK -> dvr_case.id
  • not null
  • indexed
  • risk_code
  • varchar(64)
  • not null
  • indexed
  • primary_section_code
  • varchar(64)
  • not null
  • goe_id
  • FK -> dvr_goe.id
  • null
  • indexed
  • mansione_id
  • FK -> dvr_mansione.id
  • null
  • indexed
  • attrezzatura_id
  • FK -> dvr_attrezzatura.id
  • null
  • indexed
  • context_description
  • text
  • null
  • evaluation_notes
  • text
  • null
  • p_value
  • smallint
  • null
  • m_value
  • smallint
  • null
  • r_value
  • smallint
  • null
  • status
  • varchar(32)
  • not null
  • indexed
  • sort_order
  • integer
  • not null
  • default 0
  • created_at
  • datetime
  • not null
  • updated_at
  • datetime
  • not null

Valori consigliati status:

  • bozza
  • confermato
  • non_applicabile

Indici:

  • (case_id, risk_code)
  • (case_id, primary_section_code)
  • (case_id, status)

Nota:

  • meglio non introdurre subito una unique aggressiva combinata su case_id, risk_code, goe_id, mansione_id, attrezzatura_id

dvr_risk_measure

Scopo: misure del rischio di capitolo.

Campi:

  • id
  • PK
  • case_risk_id
  • FK -> dvr_case_risk.id
  • not null
  • indexed
  • measure_kind
  • varchar(32)
  • not null
  • indexed
  • measure_text
  • text
  • not null
  • responsabile
  • varchar(255)
  • null
  • due_date
  • date
  • null
  • periodicity
  • varchar(128)
  • null
  • priority
  • varchar(32)
  • null
  • status
  • varchar(32)
  • not null
  • indexed
  • notes
  • text
  • null
  • sort_order
  • integer
  • not null
  • default 0
  • created_at
  • datetime
  • not null
  • updated_at
  • datetime
  • not null

Valori consigliati:

  • measure_kind
  • attuata
  • da_osservare
  • status
  • messa_in_atto
  • da_attuare
  • da_verificare
  • non_applicabile

Indici:

  • (case_risk_id, measure_kind)
  • (case_risk_id, sort_order)

dvr_equipment_measure

Scopo: misure puntuali della singola attrezzatura.

Campi:

  • id
  • PK
  • attrezzatura_id
  • FK -> dvr_attrezzatura.id
  • not null
  • indexed
  • risk_code
  • varchar(64)
  • null
  • indexed
  • measure_text
  • text
  • not null
  • responsabile
  • varchar(255)
  • null
  • due_date
  • date
  • null
  • periodicity
  • varchar(128)
  • null
  • priority
  • varchar(32)
  • null
  • status
  • varchar(32)
  • not null
  • indexed
  • notes
  • text
  • null
  • sort_order
  • integer
  • not null
  • default 0
  • created_at
  • datetime
  • not null
  • updated_at
  • datetime
  • not null

Indici:

  • (attrezzatura_id, sort_order)
  • (attrezzatura_id, risk_code)

Scelte di modellazione consigliate

  • risk_code e equipment_family_code
  • varchar semplici nel primo sviluppo
  • non FK obbligatorie a cataloghi master DB
  • responsabile, priority, periodicity
  • testo semplice nel primo sviluppo
  • due_date
  • date, non datetime
  • created_at e updated_at
  • presenti su tutte le nuove tabelle

Cose da non fare nel primo sviluppo

  • enum DB rigidi
  • cataloghi master con FK obbligatorie
  • unique troppo aggressive su dvr_case_risk
  • soft delete ovunque

Ordine implementativo consigliato

  1. dvr_goe
  2. dvr_mansione
  3. dvr_attrezzatura
  4. dvr_case_risk
  5. dvr_risk_measure
  6. dvr_equipment_measure

Strategia di persistenza consigliata

La scelta consigliata e':

  • DvrSectionInstance resta la fonte di raccolta dati raw
  • le tabelle nuove vengono alimentate da una normalizzazione intermedia

Quindi:

  • source of capture = JSON delle sezioni
  • source of reporting/domain = tabelle normalizzate

Questa strategia evita:

  • scrittura diretta da UI su molte tabelle
  • coupling forte tra Compila e modello dominio
  • rotture del Compila durante l'evoluzione del modello

Specifica della normalizzazione

normalize_case_structure(case_id)

Scopo:

  • materializzare la struttura base del caso

Input:

  • anagrafica_azienda
  • organizzazione_sicurezza
  • attivita_processo
  • mansioni_rischi_speciali
  • attrezzature_personale

Output:

  • case_context
  • dvr_goe
  • dvr_mansione
  • dvr_attrezzatura

Regole:

  • legge le sezioni attuali del case
  • riallinea i GOE dal blocco aree_goe_reparti[]
  • riallinea le mansioni dal blocco mansioni[]
  • riallinea le attrezzature dai blocchi:
  • macchine_rischio_specifico[]
  • componenti_sicurezza[]
  • risolve i riferimenti goe_riferimento sui GOE del case
  • aggiorna case_context con i dati aggregati delle prime sezioni

Caratteristiche:

  • idempotente
  • per-case
  • ricostruisce il sottoinsieme struttura

normalize_case_risks(case_id)

Scopo:

  • materializzare i rischi di capitolo

Input:

  • luoghi_lavoro
  • emergenze_primo_soccorso
  • macchine_attrezzature_impianti
  • ergonomia_agenti_fisici
  • agenti_chimici_biologici
  • dpi_sorveglianza_formazione
  • rischi_trasversali_documentazione

Output:

  • dvr_case_risk
  • dvr_risk_measure

Regole:

  • per ogni blocco rischio crea o riallinea un dvr_case_risk
  • valorizza:
  • risk_code
  • primary_section_code
  • context_description
  • evaluation_notes
  • p_value
  • m_value
  • r_value
  • status
  • crea o riallinea le misure:
  • attuata
  • da_osservare

Caratteristiche:

  • non genera ancora dvr_equipment_measure
  • non usa ancora automazioni pesanti da famiglie attrezzatura
  • legge solo i capitoli espliciti

normalize_case_equipment_measures(case_id)

Scopo:

  • materializzare le misure puntuali delle attrezzature

Input:

  • sezioni raw con prescrizioni macchina specifiche
  • dvr_attrezzatura gia' normalizzate

Output:

  • dvr_equipment_measure

Regole:

  • cerca blocchi in cui la misura e' riferita a:
  • una attrezzatura concreta
  • in un GOE concreto
  • risolve la riga dvr_attrezzatura
  • crea le relative dvr_equipment_measure

Nota:

  • questa funzione va tenuta per terza
  • e' la piu' delicata
  • richiede matching piu' preciso

normalize_case_all(case_id)

Scopo:

  • orchestrare tutta la normalizzazione del case

Ordine:

  1. normalize_case_structure(case_id)
  2. normalize_case_risks(case_id)
  3. normalize_case_equipment_measures(case_id) opzionale nel primo slice

Uso:

  • consolidamento del case
  • preparazione raccolta dati
  • preparazione futuro DVR finale

Trigger consigliati

La normalizzazione va attivata su eventi stabili, non a ogni keystroke.

Trigger consigliati:

  • Salva sezione
  • Salva tutto
  • Protocolla raccolta dati
  • Anteprima raccolta dati se serve forzare coerenza
  • in futuro Genera DVR finale

Ordine prudente per il primo slice:

  • almeno Salva tutto
  • Protocolla raccolta dati

Strategia di aggiornamento

La strategia consigliata e':

  • replace per sottoinsieme
  • non merge incrementale troppo furbo

Esempi:

  • normalizzazione GOE:
  • riallinea solo dvr_goe del case
  • normalizzazione mansioni:
  • riallinea solo dvr_mansione del case
  • normalizzazione rischi:
  • riallinea solo i dvr_case_risk provenienti dai capitoli attuali

Vantaggi:

  • prevedibile
  • debuggabile
  • rigenerabile

Regole di identificazione logica

Le chiavi logiche applicative consigliate sono:

  • GOE
  • case_id + code
  • mansione
  • case_id + job_title + goe
  • attrezzatura
  • case_id + equipment_name + goe + family
  • case risk
  • case_id + risk_code + primary_section_code + goe? + mansione? + attrezzatura?

Non e' necessario trasformarle tutte subito in unique DB rigide, ma devono guidare la normalizzazione.

Errori da gestire

La normalizzazione deve degradare in modo controllato su:

  • goe_riferimento mancante
  • equipment_family_code non valorizzato
  • blocchi vuoti
  • valori duplicati
  • riferimenti a GOE non piu' esistenti

In questi casi:

  • non deve interrompere il flusso
  • deve loggare o segnalare
  • deve saltare o degradare con regole semplici

Rollout consigliato

Lo sviluppo del normalizer va diviso in 3 slice:

  1. normalize_case_structure
  2. normalize_case_risks
  3. normalize_case_equipment_measures

Questa e' la sequenza consigliata.