Stamdataservicen på NSP
Design og Arkitektur

Formål

Nærværende dokument giver et overblik over stamdataservicen med fokus på design og arkitektur. Dokumentet har som formål at give et indblik i det underliggende design, de udstillede snitflader på det overordnede niveau samt særlige forhold vedrørende de udstillede registre. Både aftagere af stamdataservicen, kildedataleverandører samt NSP operatør/driftsleverandør kan med fordel læse dette dokument.

Arkitekturoverblik

Stamdata modulet (SDM) er udstillet på NSP, og består af flere komponenter. Der er en række webservices, som tilbyder data-adgang til forskellige registre (enkeltopslag og udtræk af registre), og et dataopsamlings framework, bestående af parsere og importere, der henter data fra en række eksterne kildedataregistre, bl.a. CPR-registret og SKS. Nedenstående figur viser en principskitse over arkitekturen, hvor stamdata services er udstillet på den enkelte NSP instans.

Figur 1 – Stamdatamodulet opsamler data fra kilderegistre og udstiller data på NSP
Adgangen til de data der udstilles via stamdata services er beskyttet af Den Gode Webservice (DGWS), og adgangskontrollen er styret på basis af CVR-nummer.

Fysisk arkitektur

DoDi'en er lavet på en sådan måde at hver stamdata importer er deployet i sin egen WAR-fil, dette gør at den er let at teste, distribuere og skalere, samtidig skal hver parser inkludere et stamdata-core bibliotek (jar fil), der sikrer at database håndtering, filhåndtering, konfigurationshåndtering og generel overvågning håndteres på en passende måde af en stamdata importer.
Stamdata Core bruger JNDI til at slå database forbindelsen op i applikationsserveren, derved sikres at database styring og pooling sker centralt i applikationsserveren.
Den gamle model hvor alle importere var samlet i samme kodebase, og deployet som en WAR-fil viste sig i praksis ikke at være håndterbar at teste og drifte.
Se nedenstående figur der viser en principskitse af de enkelte stamdata importere.
Figur 2 principskitse over stamdata importer WAR filer

Logisk Arkitektur

Den logiske arkitektur er opdelt i dataindsamling, replikering til NSP instanserne og udstilling af data gennem services. I de følgende afsnit beskrives disse elementer af arkitekturen.

Dataindsamling: Stamdata Importer og Parser

Stamdataregistret samler stamdata fra en række kilderegistre hos offentlige myndigheder. Indsamlingen af data implementeres i forhold til hvert enkelt kilderegister ved anvendelse af en registerspecifik Parser, men med anvendelse af en fælles Importer-komponent.
Importer-komponenten kører på DoDi platformen, og er ansvarlig for at indlæse dataset fra registerfiler, der placeres i en dedikeret mappe i filsystemet For hvert register implementeres en transportløsning (f.eks. FTP som push eller pull), der har som opgave at overføre "rå" registerdata fra kilderegistret til NSP platformen.. Hvert register har sin egen dedikerede mappe som automatisk bliver oprettet af Importer-komponenten.
Importeren overvåger filsystemet og aktiverer de registerspecifikke parsere, når nye registerfiler er tilgængelige i filsystemet.
De respektive parsere processerer registerfilerne og overfører registerdata til den lokale database. Parsningen kan i princippet bestå af en direkte dataoverførsel fra fil til database, men indeholder i de fleste tilfælde forretningslogik, f.eks. transformationer af data og denormaliseringer.
Hver importer har sin egen mappe, en mappe kan indeholde en undermappe med registerfiler, eller en LOCKED fil. Importeren står og poller dens pågældende undermappe(r) for registerfiler, samhørende registerfiler skal ligge i en mappe for sig selv. Efter en cooldown tid, hvor importeren sikrer at filstørrelser ikke vokser mere bygynder den at parse filerne. Går alt godt bliver undermappen og filerne slettet igen, og data ligger nu i databasen. Går det skidt ligger der en LOCKED fil i importerens mappe – og en fejlbesked vil blive vist på overvågningssiden, når fejlen er udbedret kan LOCKED filen fjernes manuelt og registerfilerne vil så igen blive forsøgt importeret. Eksempel hvor der er sket en fejl under parsning af CPR-filer:
Mappe: CPR

  • Undermappe: 20120630
    • Fil 1: D100312-L431101
    • Fil 2: D100312-L431101
  • Fejl fil: LOCKED

Figur 3 Principskitse af et importforløb, hvor en parser aktiveres af importeren

Replikering til NSP instanserne

Dataindsamlingen fra kilderegistrene foregår på DoDi (for yderligere information om NSP konceptets komponenter henvises til den overordnede NSP dokumentation).

Figur 4 – principskite af envejs-replikeringen fra DoDi til NSP instanserne
Stamdatatabellerne registreres i NSP'ens replikeringsmekanisme, og de parsede registerdata replikeres derfor automatisk ud til de enkelte NSP instanser som illustreret på Figur 4, hvorfra de kan tilgås gennem de udstillede stamdataservices (ikke illustreret).

Særlige forhold

Stamdataservicen anvender en række tabeller til at opbevare stamdataregistrene. Disse tabeller er typisk koblet relativt hårdt op mod kilderegistrenes struktur, og tidligere erfaringer har vist, at der med jævne mellemrum forekommer ændringer i kilderegistrene. Det er derfor forsøgt undgået at andre (NSP) komponenter end stamdataservicen anvender stamdatatabellerne. Hvor andre komponenter har behov for at anvende stamdata internt på NSP, kopieres data ud i separate tabeller, som komponenterne kan bruge i stedet.
På NSP 2.0 anvendes autorisationsregistrets data af STS (til berigelse og verifikation af autorisationsnummer), og der er derfor oprettet en særlig Autorisationstabel til dette formål som illustreret på figuren nedenfor.

Figur 5 – Enkeltopslagsservicen til autorisationsregistret og STS deler datagrundlag.

Fysiske Datamodeller

Datamodellen for hvert enkelt register i Stamdataservicen er defineret i bilaget 'schema.sql'. Nedenfor er registrene beskrevet overordnet i tabelform.

Doseringsforslag

Tabel

Beskrivelse

DrugDosageStructureRelation

relationsmapning mellem lægemidler og deres doseringer.

DosageVersion

Løbenumre for registret. Dette kan bruges til at se om man har den nyeste udgave af registret.

DosageUnit

Enheder lægemidler doseres i (tabletter, kapsler, milliliter, …).

DosageStructure

Tider for dosering og størrelser på doserne.

DosageDrug

Lægemidler med ATC kode etc.

DosageProposal

Doseringsforslag, version 2 af registeret


CPR-registret

Tabel

Beskrivelse

Person

Navne og adresseoplysninger mm om person i CPR-registret.

BarnRelation

En relationsmapning mellem børn og deres forældre.

ForaeldreMyndighedRelation

En relationsmapning mellem børn og deres værger.

UmyndiggoerelseVaergeRelation

En relationsmapning mellem umyndiggjorte og deres værger.

PersonKontakt

Adresserings og flytte oplysninger

PersonFamilie

Familie oplysninger som mor/far mfl.

Person2

Udvidede person oplysninger, kommune-, flyttepåbuds-, folkekirke- og valgoplysninger.

Notat

Notater i cpr registeret

HistoriskePersonnumre

Historiske personnumre

HistoriskeAdresser


HistoriskeUdIndrejseOplysninger


HistoriskeNavneOplysninger


HistoriskeForsvindGenfindOplysninger


HistoriskeStatsBorgerskaber


HistoriskeFolkekirkeOplysninger


HistoriskeCivilstande


HistoriskeSeparationer



SKS-registret

Tabel

Beskrivelse

Organisation

Referencer mellem SKS-koder og sygehusafdelinger fra SKS-registret.


SOR-registret

Tabel

Beskrivelse

Praksis

Tabel over lægepraksis i SOR registret.

SygehusAfdeling

Tabel over sygehusafdelinger i SOR registret.

Apotek

Tabel over apoteker i SOR registret.

Sygehus

Tabel over sygehuse i SOR registret.


Yderregistret

Tabel

Beskrivelse

Yder

Tabel med ydernumre og stamdata. (Visse er tilknyttet en person andre en klinik.)

YderLoebenummer

Løbenumre for registret. Dette kan bruges til at se om man har den nyeste udgave af registret.

YderregisterPerson

Personer som er tilknyttet et ydernummer. Der kan være flere personer pr. Ydernummer.

Yderregister

Tabel med ydernumre og stamdata. (Visse er tilknyttet en person, andre en klinik.)


Autorisationsregistret

Tabel

Beskrivelse

Autorisation

Tabel med autorisationer for sundhedsfaglige personer (læger, kiropraktorer, mv.).


DKMA-registret

Tabel

Beskrivelse

Firma

Liste af leverandører af lægemiddelprodukter.

Formbetegnelse

Liste af formen lægemiddel kan have.

Indikation

Liste af indikationer.

IndikationATCRef

Referencetabel mellem ATC-koder og indikationer.

Laegemiddel

Tabel med lægemidler.

LaegemiddelNavn

Uforkortede navn på lægemidler.

LaegemiddelAdministrationsvejRef

Mapningstabel mellem lægemidler og deres administrationsveje.

Klausulering

Klausuleringskode, beregnet til ansøgninger om tilskud til behandling.

ATC

ATC koder og tilhørende tekst.

Medicintilskud

Liste med former for medicintilskud.

Opbevaringsbetingelser

Liste over forskellige måder medicin skal opbevares på.

Pakningskombinationer

Tabel med kombinationer af pakninger som kan erstatte hinanden.

OplysningerOmDosisdisponering

Tabel med info priser og substitutionsoplysninger for dosisdispenserede lægemidler.

LaegemiddelDoseringRef

Referencetabel mellem lægemidler og deres dosering.

Beregningsregler

Info om hvordan en pakning prisberegnes.

Pakning

Tabel med pakninger af lægemidler.

PakningskombinationerUdenPriser

Tabel med kombinationer af pakninger som kan erstatte hinanden. Indeholder ikke priser.

EmballagetypeKoder

Forskellige former for emballage brugt til pakning af lægemidler.

PakningsstoerrelsesEnhed

Antallet af enheder der er i en pakning.

SpecialeForNBS

Liste over specialer et lægemiddel bliver brugt indenfor.

Priser

Udspecificering af priser for lægemidler (f.eks. indkøbspris.).

Enhedspriser

Priser for lægemidler.

TakstVersion

Løbenumre for registret. Dette kan bruges til at se om man har den nyeste udgave af registret.

Dosering

Doseringsforslag fra taksten.

Styrkeenhed

Den styrke medicinen i en pakning har.

Rekommandationer

En referencetabel med noter om et lægemiddel anbefales eller ej.

Substitution

Tabeller over lægemidler som kan substituere hinanden.

TilskudsprisgrupperPakningsNiveau

Liste over tilskudsgrupper der er knyttet til en pakning.

SubstitutionAfLaegemidlerUdenFastPris

Normale substitutioner er baseret på pris. For lægemidler uden fast pris ligger substitutioner i denne tabel.

Administrationsvej

Måden hvorpå et lægemiddel kan administreres.

Tilskudsintervaller

Nedre og øvre grænser for tilskud til lægemidler.

UdgaaendeNavne

Liste af navne for lægemidler som ikke længere findes i taksten.

Udleveringsbestemmelser

Bestemmelser over hvornår et lægemiddel må udleveres.

Indholdsstoffer

Indholdsstoffer i et lægemiddel.

Tidsenhed

Hvor ofte og hvornår et lægemiddel skal indtages, etc.


Bemyndigelser

Tabel

Beskrivelse

Bemyndigelse

Tabel med bemyndigelser, indeholdende sundhedsfagligt personels uddelegerede rettigheder

SOR-NPI relationer

Tabel

Beskrivelse

SORRelationer

Tabel med relationer mellem forældre og børn I SOR træet. Tabellen er speciel idet hver eneste node peger på sig selv og alle sine "efterkommere"- Tabellen udstilles ikke via KRS, men bruges kun internt af den kommende samtykkeservice (fra NPI projektet)

SORYderSHAKRelationer

Tabel der mapper SOR koder med SHAKkoder og YDERnumre, tabellen er special da der ikke er relationer til YDER eller SHAK kolonner, men derimod kun en kolonne der via tekst og tal fortæller type og værdi (eksempelvis: "Yder=82058"eller "SHAK=2034010") - Tabellen udstilles ikke via KRS, men bruges kun internt af den kommende samtykkeservice (fra NPI projektet)


Ændringslog

Kilden til dette dokument kan kan erhverves ved henvendelse til NSP-operatøren.

Version

Dato

Ændring

Ansvarlig

0.1

2011-04-28

Initielt dokument

Trifork

1.0

2011-09-12

Opdateret med CPR tjenester

Trifork

1.1

2011-10-05

Review i forbindelse med release af CPR Tjenester

Trifork

1.2

2011-12-09

Kvalitetssikring

Lakeside

1.3

2012-06-19

Tilføjet bemyndigelser og npi-sor tabeller

Trifork

2.0

2012-07-03

Ny version af DoDi, hvor hver importer har sin egen WAR fil

Trifork

2.1

2012-08-24

Fjernet al ikke DoDi (stamdata importer) specifik dokumentation

Trifork A/S

2.2

2014-01-09

Tilføjet CPR2 tabeller

Trifork KPN

2.3

2017-05-17

Tilføjet DosageProposal tabel

Trifork OHE

  • No labels