Arkivering fra Elektronisk Stoffkartotek (IOM-725)

Arkivering fra Elektronisk Stoffkartotek (IOM-725)


Innledning

Dette integrasjonsprosjektet automatiserer overføringen av HMS-dokumentasjon fra Workplace Safety (Elektronisk Stoffkartotek) til organisasjonens sentrale arkivløsning, Public 360. Løsningen er utviklet som en MuleSoft Process API med navnet workplacesafety-p360-papi, som orkestrerer forretningslogikk og datatransformasjon mellom fagsystemet og arkivet ved bruk av Public 360s Simple Integration Framework (SIF) API.

Gjennom bruk av standardiserte metadata-mappings definert av Sikt og Arbeidsutvalget (AU) for dokumentasjonsforvaltning, sørger integrasjonen for at tre spesifikke dokumenttyper — ferdigstilte substitusjonsvurderinger, registrerte eksponeringer med tilhørende sikkerhetsdatablader (SDS), og gjennomførte risikovurderinger — blir arkivert med korrekt juridisk og vitenskapelig kontekst. Teknisk realiseres dette ved å utnytte Public 360s Simple Integration Framework (SIF) API for automatisert opprettelse av saker og dokumentjournalføring.

We've encountered an issue exporting this macro. Please try exporting again later.

Til arkivering benyttes p360-arkiv-appen

Nøkkel info

Egenskap

Verdi

Kommentar / Beskrivelse

Initiesering av flyt

Tidsstyrt (Scheduled Polling)

Integrasjonen trigges nattlig via en Scheduler for å polle ferske data fra Workplace Safety API (/api/exposures/by-filter) for det siste døgnet.

Flyt mønster

Semi-synkron / batch

Data leses inn i batch per organisasjon (estimert < 100 elementer per kjøring). Selve arkiveringen mot P360 skjer sekvensielt for hvert enkelt element i Items-arrayet.

Bruk av meldingskø

Nei

Meldingskø er ikke vurdert som nødvendig. Amazon S3 benyttes som teknisk mellomlagring (buffer) og backup for datafiler og vedlegg før de overføres til Public 360.

Open API

Nei

Løsningen er en intern integrasjonstjeneste. Tilgang til kilde- og målsystemer krever autentisering via Azure AD (OAuth 2.0) og interne API-nøkler.

IntArk

Ikke brukt

Fellestjenesten IntArk er utgått og benyttes ikke.

Logging og overvåking

Loki / Platon

Integrasjonen sender logger og audit-spor til Loki/Platon-plattformen for monitorering og feilsøking via Grafana.

Denne tabellen oppsummerer de arkitektoniske valgene for workplacesafety-p360-papi, der S3 fungerer som et sikkert lagringspunkt for binærdata under prosessering, mens selve arkivreferansen (Source of Truth) forblir i Public 360.

 

draw.io Diagram

Bakgrunn

Hovedformålet med løsningen er å sikre etterlevelse av norske regulatoriske krav, herunder Arkivloven og Noark 5-standarden. Digital transformasjon av kjemikaliehåndtering krever at data forblir tilgjengelige, autentiske og brukbare over svært lang tid. Dette er spesielt kritisk for eksponeringsregistre, hvor det foreligger et lovmessig krav om 60 års bevaringstid for å sikre dokumentasjonens integritet over generasjoner, for eksempel ved spørsmål om yrkessykdom.

Interessenter

Prosjektet er et samarbeid mellom flere sentrale aktører for å sikre standardisering i sektoren:

  • Sikt (Kunnskapssektorens tjenesteleverandør): Koordinerer anskaffelse og standardisering av systemene.

  • Arbeidsutvalget (AU) for dokumentasjonsforvaltning: Har definert de spesifikke metadata-mappingene som integrasjonen må følge for å sikre juridisk gyldighet.

  • Lokale HMS-ansvarlige: Ansvarlige for datakvalitet i kildesystemet (Workplace Safety).

  • Dokumentasjonsforvaltere: Mottakere av arkivverdig materiale i Public 360.

Brukerhistorie

Som organisasjon har vi behov for automatisk og sikker arkivering av HMS-dokumentasjon for å redusere manuelt arbeid og sikre juridisk etterlevelse. Løsningen dekker tre separate og uavhengige behov:

  1. Jobb 1: Arkivering av ferdigstilte substitusjonsvurderinger for å dokumentere utfasing av farlige kjemikalier.

  2. Jobb 2: Arkivering av registrerte eksponeringer med tilhørende sikkerhetsdatablader (SDS) for å ivareta ansattes rettigheter.

  3. Jobb 3: Arkivering av gjennomførte risikovurderinger for å dokumentere virksomhetens forebyggende sikkerhetsarbeid.

Systemer/tjenester

Integrasjonsløsningen workplacesafety-p360-papi fungerer som det sentrale bindeleddet mellom fagsystemet for kjemikaliehåndtering og organisasjonens arkivløsning. Løsningen består av følgende komponenter:

  • Workplace Safety (WPS / Elektronisk Stoffkartotek): Fungerer som kildesystem (Source). Systemet forvalter data om kjemikalier, sikkerhetsdatablader (SDS) og gjennomførte vurderinger. Data hentes ut via Workplace Safety API (kilde for rådata om eksponeringer og kjemikalier), som gir tilgang til moduler for substitusjon, risikovurdering og eksponeringslogger.

  • Public 360 (P360): Fungerer som målsystem (Target) for arkivering. Integrasjonen kommuniserer med P360 gjennom Simple Integration Framework (SIF) API (mottaker for journalføring). Dette rammeverket muliggjør automatisert opprettelse av saker og dokumentjournalføring i henhold til Noark-standarden. En teknisk nøkkelfunksjon er bruken av "recno" (record numbers) for å identifisere korrekte dokumentkategorier og statuser i arkivet.

  • Amazon S3: Fungerer som midlertidig lagringsplass og backup for binærdata under prosessering.

  • PdfGenerator (Java): En egendefinert Java-komponent basert på 'openhtmltopdf' som transformerer JSON-data til statiske PDF-filer for langvarig lagring.

  • MuleSoft workplacesafety-p360-papi: Dette er selve integrasjonsmotoren, utviklet som et Process API. Dets oppgave er å orkestrere prosessen: hente data fra Workplace Safety, transformere metadata og filer (Base64-koding) via DataWeave, og utføre de nødvendige kallene mot P360 SIF API i riktig rekkefølge. API-et håndterer også logikk for feilhåndtering, spesielt viktig siden SIF API kan returnere HTTP 200 selv om en operasjon har feilet internt.

Detaljert liste av alle innvolverte systemer/tjenester Hva utveksler data? Fra hvor / Til hvor?

System

Data

Brukt API (endepunkter)

System

Data

Brukt API (endepunkter)

Config-databasen

Get Slack blacklist

configDB.slack-blacklists

Config-databasen

Get single org

configDB.orgs

Slack

Sender feilmeldinger (inkludert også data på module-id, organisasjons shortName og orgId, og sakens caseId, status, errorMessage og filnavn)

Slack-kanalen (mule-prod)

OAI-databasen

legger auditInfoMap log til databasen

oai-GenAudit

Amazon S3

Laster opp datafiler og vedlegg til mapper ('mule-prod-buckets' bucket).

S3 connector

Public360

Documaster

Tilgangsstyring og logging

  • Autentisering: Bruker OAuth 2.0 Client Credentials flow mot Azure AD for sikker kommunikasjon med P360.

  • Logging: All aktivitet logges med en unik correlationId for å kunne spore en melding fra kilde til mål.

  • Audit-spor: Flyten oppdaterer auditinfoMap i kildesystemet etter vellykket arkivering.

Forretningsregler

Mapping

Integrasjonen workplacesafety-p360-papi benytter følgende logikk ved opprettelse av sak for eksponering:

  • Tittel-generering: Sakstittelen bygges dynamisk ved å kombinere stoffnavn fra kildesystemet, år/måned for eksponering, og fritekst fra fagsystemets tittelfelt for å sikre unik identifikasjon.

  • Arkivklassifisering: Alle eksponeringssaker klassifiseres med primærkode a.f.05 (Føre tilsyn med helse, miljø og sikkerhet) i arkivdel 3-integrasjon øvrig.

  • Tilgangsbegrensning: På grunn av personopplysningsvern skjermes saken med tilgangskode U.off og hjemmel Offl § 13, og tilgang begrenses til gruppen Integrasjon stoffkartoteket.

  • Mapping for eksponering (Jobb 2):

    • Tittel: {Substansnavn} - {ÅÅÅÅ MM} - {Tittelfelt}.

    • Skjerming: Alle eksponeringssaker merkes med tilgangskode U.off og hjemmel Offl § 13 jfr Fvl § 13.1.

    • Arkivkode: Benytter primærklassifisering a.f.05 (Helse, miljø og sikkerhet).

  • Datoformat: Datoer transformeres fra fagsystemets format (DD/MM/YYYY) til arkivvennlig format (YYYY MM) for titler.

Behandlingstid/responstid og volum

  • Volum: Estimert lavt volum per natt (typisk under 100 elementer per organisasjon).

  • Frekvens: Nattlig batch-kjøring for å minimere belastning på API-ene i arbeidstiden.

Feilhåndtering, konsekvenser av feil og overordnet risikoanalyse

  • Java 17-kompatibilitet: Integrasjonen benytter eksplisitte namespaces for feiltyper for å unngå tilgangsproblemer med interne Java-objekter i Mule 4.6+.

  • SIF API Validering: Siden SIF API kan returnere HTTP 200 ved funksjonelle feil, sjekker integrasjonen eksplisitt Successful-flagget i responsen.

  • Retry-mekanisme: Ved tekniske feil (nettverk/timeout) vil systemet forsøke på nytt ved neste planlagte kjøring.

  • Generelt vil status og dermed eventuelle feil være synlig og tilgjengelig for institusjonen via logg-oversikten (velg module: “P360 arkiv eksamenoppgaver og veilendninger”). Det er også utarbeidet mulighet for at enkelt personer ved institusjonen kan melde seg på for mottak av feilmeldinger på epost daglig.

  • Videre har vi overvåkning av loggene via Humio for å fange opp feil-situasjoner utenfor institusjonens virkeområde, som f.eks. utilgjengelige API endepunkter og bugs i koden.

  • Hva skjer ved overload i kø?

    • Det skjer ikke. Men om vi skulle, på grunn av noe feil, ikke motta meldingene fra eksamensystemene så kan vi alltids polle igjen

  • Hva skjer med ufullstendige meldinger?

    • De vil feile og det vil vi oppdage i loggene og kan ta aksjon basert på det.

  • Inneholder meldingene personopplysninger?

    • Merk at det utveksles mange “meldinger” mellom ulike systemer i løpet av en integrasjon. Melinger fra eksamensystem inneholder ikke noe persondata, men data vi henter fra FS basert på de meldingene gjør det. Filene vi arkiverer (som kommer fra eksamensystemene) kan også potensielt inneholde personopplysninger.

  • Noe om viktige feil/situasjoner som må passes ekstra på (som kan ha stor konsekvens):

    • Oppgavene ikke arkiveres (miste meldinger)

    • Oppgaver arkiveres med feil info. (feiltolking eller feil logikk)

    • Oppgaver arkiveres med feil tilganger

Kommentarer

  • PDF/A: Det bør vurderes å oppgradere PDF-generatoren til å produsere PDF/A-standard for å garantere lesbarhet i hele 60-årsperioden.

  • IntArk: Siden IntArk er avviklet, går all kommunikasjon direkte mellom Process API og endepunktene.