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 |