Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
<hostnavn>:8080/stamdata-batch-copy-ws/service/StamdataReplication?wsdl

...

3.

...

4     Eksempel på kald til KRS

Som klient sender man et ReplicationRequest til servicen:

...

Code Block
tag:nsi.dk,2011:sor/apotek/v1/168763721800723

er 1687637218007236 168763721800723 revisionsnummeret.

Med andre ord, bestemmer en unik nøgle en bestemt entitet, revisionsnummeret bestemmer et snapshot af den entitet. Begge disse numre er vigtige på flere måder. Den unikke nøgle kan optræde i flere forskellige entry-elementer. Det er på grund af at en entitet ændre sig med tiden, men revisionsnumre vil altid være forskellige.

...

3.

...

6.3      DateTime

DateTime’s i data vil som udgangspunkt være repræsenteret som lokal tidszone, altså fx ”2018-07-11T08:16:47+02:00”, bemærk dog at for datoer ældre end 1894 anvendes UTC, da de moderne tidszoner ikke var indført den gangdengang. Klienter bør derfor altid være i stand til at forstå datoer tider uanset tidszone angivelsetidszoneangivelse.

...

3.

...

7     Paginering

Antallet af records i et register kan være meget stort, i visse tilfælde flere millioner records. Derfor bliver man nødt til at opdele et udtræk i flere kald. Response fra det tidligere eksempel, er et eksempel på en page. Når man er klar til at hente næste page sender man et request med nyt offset i ReplicationResponse beskeden. Offset-parameteren i næste request sættes til det sidste versionsnummeret man har modtaget. Det er muligt at angive hvor mange records man højest ønsker i et svar fra servicen ved at sætte parameteren maxRecords i ReplicationRequest-forespørgelsen. Der er på serveren en øvre grænse på denne parameter der overskriver for høje værdier i en forespørgelse. Hvis parameteren ikke specificeres i kaldet indsættes denne grænse som antal records.

...

4      Registre

Da der løbende kommer nye registre er beskrivelserne af de enkelte registre flyttet til:

https://www.nspop.dk/display/web/SKRS+-+Stamdata+Kopi+Register+Service#SKRS-StamdataKopiRegisterService-Registeroversigt

5      Enkeltopslag i registre

Stamdataservicen tilbyder en service til såkaldte enkeltopslag i følgende registre:

  • Autorisationsregistret
  • CPR-registret

Enkeltopslag i et af de ovennævnte registre foregår som et webservice kald til stamdataservicen på NSP med angivelse af søgekriterier. De konkrete parametre og eventuelle særlige forhold der gør sig gældende for kald til enkeltopslags-snitfladen på stamdataservicen er beskrevet i de følgende afsnit.

5.1     Forespørgsler og dataformat

Enkeltopslags-snitfladen er udstillet som en DGWS 1.0.1 identitetsbaseret webservice. Adgang til enkeltopslagsservices forudsætter en aftale med NSP-operatøren (adgang styres på CVR-nummer). Metoderne for de udstillede registre er beskrevet i separate WSDL-filer, der kan rekvireres ved henvendelse til NSP-operatøren.

Fælles for de udstillede enkeltopslagsservices er at der kræves STS-signerede system ID-kort (dvs. DGWS niveau 3).

5.2     Enkeltopslag i autorisationsregistret

Det er muligt at lave onlineopslag i stamdataservicens kopi af Sundhedsstyrelsens autorisationsregister til fremsøgning af eventuelle autorisationer for en given sundhedsfaglig person. Metoden tager personens CPR-nummer som input, og returnerer personens navn og samtlige autorisationer, der er i kraft for vedkommende [2].

...

[2] Servicen giver et øjebliksbillede af personens autorisationer, dvs. udløbne og fremtidige autorisationer returneres ikke.

...


En person kan have flere gyldige autorisationer. Hver autorisation som bliver returneret fra webservicen er forbundet med en uddannelseskode. Tabellen nedenfor  viser en liste over kendte uddannelseskoder og deres tilknyttede uddannelse. Der henvises til Sundhedsstyrelsens løbende vedligeholdte liste af uddannelser, hvortil der udstedes sundhedsfaglige autorisationer for yderligere information (http://autregwebservice.sst.dk/autregservice.asmx). Faggruppenavnet bliver også returneret såfremt uddannelseskoden er kendt af enkeltopslagsservicen.


Uddannelseskode

Faggruppenavn

4498

Optiker

5151

Fysioterapeut

5153

Ergoterapeut

5155

Fodterapeut

5158

Radiograf

5159

Bioanalytiker

5166

Sygeplejerske

5175

Jordemoder

5265

Kiropraktor

5431

Tandplejer

5432

Klinisk Tandtekniker

5433

Tandlæge

5451

Klinisk diætist

7170

Læge

9495

Bandagist


Hvis CPR-nummeret fra forespørgselen er tilknyttet en eller flere autorisationer vil også for- og efternavn for personen blive returneret. Forespørges der på et ugyldigt CPR-nummer eller en person uden gyldige autorisationer returneres der af sikkerhedshensyn tomme navnefelter i svaret – også selv om CPR-nummeret er et korrekt CPR-nummer for en eksisterende person.

5.2.1      Eksempel: Én eller flere autorisationer

Nedenfor ses et ”solskinsscenarie”, hvor der forespørges på en sundhedsfaglig, der har en enkelt gyldig autorisation.

Code Block
languagejava
titleForespørgsel
collapsetrue
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Header>
    …
  </S:Header>
  <S:Body>
    <AuthorizationRequestStructure xmlns="http://nsi.dk/-/stamdata/3.0" xmlns:ns2="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:ns3="http://www.w3.org/2000/09/xmldsig#" xmlns:ns4="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:ns5="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:ns6="http://www.medcom.dk/dgws/2006/04/dgws-1.0.xsd">
      <cpr>1111122222</cpr>
    </AuthorizationRequestStructure>
  </S:Body>
</S:Envelope>
Code Block
languagejava
titleSvar
collapsetrue
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Header>
         …
  </S:Header>
  <S:Body>
    <AuthorizationResponseStructure xmlns="http://nsi.dk/-/stamdata/3.0" >
      <cpr>1111122222</cpr>
      <firstName>Peter</firstName>
      <lastName>Andersen</lastName>
      <authorization>
        <authorizationCode>B1114</authorizationCode>
        <educationCode>2131</educationCode>
      </authorization>
    </AuthorizationResponseStructure>
  </S:Body>
</S:Envelope>

I eksemplet er Peter Andersen tilknyttet CPR 1111122222, og han har en autorisation.

5.2.2      Eksempel: Ingen gyldige autorisationer

Forespørges der på en ikke-eksisterende person eller en person, der ikke har en gyldig autorisation, svares der blot med en tom AutorizationResponseStructure.

I eksemplet nedenfor er headere udeladt, og der henvises til eksemplet i afsnit 5.2.1 for en tilsvarende forespørgsel hvor headere er vist.

Code Block
languagejava
titleForespørgsel
collapsetrue
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Header>
    …
  </S:Header>
  <S:Body>
    <AuthorizationRequestStructure xmlns="http://nsi.dk/-/stamdata/3.0" xmlns:ns2="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:ns3="http://www.w3.org/2000/09/xmldsig#" xmlns:ns4="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:ns5="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:ns6="http://www.medcom.dk/dgws/2006/04/dgws-1.0.xsd">
      <cpr>1111122244</cpr>
    </AuthorizationRequestStructure>
  </S:Body>
</S:Envelope>
Code Block
languagejava
titleSvar
collapsetrue
<soapenv:Envelope …>
  <soapenv:Header>…</soapenv:Header>
  <soapenv:Body>
    <AuthorizationResponseStructure xmlns="http://nsi.dk/-/stamdata/3.0">
  <cpr>1111122222</cpr>
</AuthorizationResponseStructure> 
</soapenv:Body>
</soapenv:Envelope>                                         

Da der ikke er nogen tilknyttede autorisationer, returneres en tom AuthorizationResponseStructure uden angivelse af for- og efternavn.

5.3     CPR-registret: Det Gode CPR-opslag

Stamdataservicen udstiller mulighed for enkeltopslag i CPR-registret gennem en implementering af ’Det Gode CPR-opslag’ som specificeret af MedCom (http://www.medcom.dk/wm110491).

5.3.1      WSDL

WSDL-filer for servicen kan findes på medcoms svn her:

http://svn.medcom.dk/svn/drafts/CPR-opslag/trunk/CPR-opslag/wsdl/

Vær opmærksom på, at der tilføjes Den Gode WebService-felter på, så det vil nok være nemmere at hente wsdl direkte fra servicen. Dette gøres ved at kalde endpoint med ?wsdl tilføjet sådan: http://endpointurl?wsdl

Denne indeholder de tilføjede felter.

Sidst men ikke mindst kan de også hentes med dgws-felter direkte fra leverandørens svn her:

https://fisheye.nspop.dk/browse/public/components/sdm/latest/code/nsp/cpr-ws/src/main/webapp/WEB-INF/wsdl

5.3.2      Endpoints

Det gode CPR-opslag er udstillet i version 1.0.0 og version 1.0.2, som er tilgængelige på hver deres endpoints.

For 1.0.0:

http://stamdatahost:8080/stamdata-cpr-ws/service/DetGodeCPROpslag

For 1.0.2

http://stamdatahost:8080/stamdata-cpr-ws/service/DetGodeCPROpslag-1.0.2

Det anbefales at køre på version 1.0.2, da ikke alle personer kan hentes i 1.0.0 uden valideringsfejl.

5.3.3      Mangelfuld datagrundlag

Datagrundlaget kan i nogle tilfælde mangle værdier som er påkrævet af wsdl skemaet, hvis dette er tilfældet vil felterne udfyldes med en erstatningsværdi.

For PersonInformationStructureType drejer sig om følgende felter:

Felt

Erstatningsværdi

PersonGivenName

UKENDT

PersonSurnameName

UKENDT

PersonNameForAddressingName

UKENDT

PostCodeIdentifier

0000

DistrictName

UKENDT

MunicipalityCode

0000

StreetCode

0000


For AssociatedGeneralPractitionerStructure er det følgende felter:

Felt

Erstatningsværdi

PostCodeIdentifier

0000

DistrictName

UKENDT

Yderligere indeholder datagrundlaget i nogle tilfælde emailadresser, som ikke overholder reglerne i wsdl-skemaet. Hvis dette er tilfældet vil emailadressen fjernes fra svaret.

Hvis der ikke kan findes en tilknyttet læge i datagrundlaget vil AssociatedGeneralPractitionerStructure være udfyldt med følgende værdier:

Felt

Erstatningsværdi

AssociatedGeneralPractitionerIdentifier

000000

AssociatedGeneralPractitionerOrganisationName

UKENDT

DistrictName

UKENDT

EmailAddressIdentifier

UKENDT@example.com

PostCodeIdentifier

0000

StandardAddressIdentifier

UKENDT

TelephoneSubscriberIdentifier

00000000

5.3.4      Fejlfyldt CPR-data

Udover ovenstående erstatningsværdier kan der også være tale om data, som ikke har kunnet indlæses pga. fejlfyldt kildedata. Det kan fx være en dato, der ikke har kunne parses. Hvis der laves opslag på en person, som har fejlfyldt data vil der blive indsat erstatningsværdier for de felter, der er markeret som fejlfyldte eller der vil blive sendt en soap-fejl med beskeden ”Data for personen er markeret som upålideligt”. 

Hvorvidt der kommer en fejl eller der anvendes erstatningsværdier og hvad disse vil være sat til, afhænger af konfigurationen, se mere på http://www.nspop.dk

5.3.5      Navne- og adressebeskyttelse

For CPR-opslag gælder det generelt, at hvis en record i CPR-registret er markeret med navne- og adressebeskyttelse, da vil output være beskyttet ud fra følgende regler:

Søgning via

Hvilke data er beskyttet

getPersonInformation

Alle output-felter på nær CPR-nummer

getPersonWithHealthCareInformation

Alle output-elementer dog ikke:

CPR-nummer
Information om tilknyttet læge
Information om sygesikringsgruppe.

getPersonDetails

Output er ikke beskyttet

Beskyttelse af data sker ved indsættelse erstatningsværdier, værdierne som der bliver erstattet med er afhængig af hvilken XSD type elementet har (dvs. der tages hensyn til de navnebeskyttede felters skema-definition).

Hvorvidt en person er adressebeskyttet kan i svaret bestemmes ud fra ”PersonInformationProtectionIndicator” uanset om output er beskyttet eller læsbart.

5.4     CPR-registret: getPersonDetails

Stamdataservicen udstiller endvidere en variant af ’Det Gode CPR-opslag’, der kan anvendes til søgninger i CPR-registret med følgende input.

  • CPR-nummer
  • liste af CPR-numre
  • fødselsdato
  • navn

Servicen har en enkelt snitflade: getPersonDetails, der er implementeret i forskellige udgaver og muliggør forskellige typer af søgninger. I de følgende afsnit er kaldmulighederne beskrevet med tilhørende eksempler.


Servicen er formelt beskrevet i WSDL og XSD-skemaer, der kan findes her:

Code Block
<src-root>/Dokumentation/bilag/StamdataPersonLookupService/

Eller direkte på driftsoperatørens SVN:

https://fisheye.nspop.dk/browse/public/components/sdm/latest/code/nsp/cpr-ws/src/main/webapp/WEB-INF/wsdl/

Servicen tager hensyn til navnebeskyttelse, og det anbefales at undersøge elementet PersonInformationProtectionIndicator for om værdien er true, da personen i så fald er navnebeskyttet.

5.4.1      Endpoints

På samme måde som DetGodeCprOpslag findes der to endpoints:

http://stamdatahost:8080/stamdata-cpr-ws/service/StamdataPersonLookup

samt

http://stamdatahost:8080/stamdata-cpr-ws/service/StamdataPersonLookup-1.0.1


Det første endpoint findes kun af hensyn til bagud kompatibilitet og anvender wsdl-filer, som ligger i mappen: PERSONLOOKUP_1.0.0.

Det anbefales man anvender StamdataPersonLookup-1.0.1 i nye projekter, wsdl-filerne til denne kan findes i PERSONLOOKUP_1.0.1-mappen.

1.2.2      Mangelfuld data og Fejlfyldt CPR data

Se 5.3.3 Mangelfuld data og 5.3.4 Fejlfyldt CPR data

1.2.3      Eksempel 1: getPersonDetails(<Personnummer>)

I denne variant af getPersonDetails søges på et specifikt CPR nummer. Findes personen i CPR registret returneres de tilhørende CPR informationer. Findes personen ikke i CPR registret returneres et tomt svar.

I dette eksempel vises et kald, og en række mulige svar, afhængigt af søgeresultatet.


Kald 1: (Opslag vha. CPR-nummer)

<stam:PersonLookupRequest>

  <CivilRegistrationNumberPersonQuery>

    1234567890

  </CivilRegistrationNumberPersonQuery>

</stam:PersonLookupRequest>


Svar 1: (Personen blev fundet)

Giver anledning til følgende svar:

 

<stam:PersonLookupResponse>

  <ns:PersonInformationStructure>

    <ns1:RegularCPRPerson>

      <ns1:SimpleCPRPerson>

        <ns2:PersonNameStructure>

          <ns3:PersonGivenName>Peter</ns3:PersonGivenName>

          <ns3:PersonSurnameName>Andersen</ns3:PersonSurnameName>

        </ns2:PersonNameStructure>

        <ns1:PersonCivilRegistrationIdentifier>

          1234567890

        </ns1:PersonCivilRegistrationIdentifier>


        …

      </ns1:SimpleCPRPerson>

      …

      <ns6:PersonInformationProtectionIndicator>

        false

      </ns6:PersonInformationProtectionIndicator>

      </ns1:RegularCPRPerson>

    <ns:PersonAddressStructure>…</ns:PersonAddressStructure>

  </ns:PersonInformationStructure>

</stam:PersonLookupResponse>

 

Svar 2: (Personen blev ikke fundet)

Hvis søgningen ikke giver et positivt resultat, returneres der et tomt svar:


<stam:PersonLookupResponse />


1.2.4      Kald 2: (Opslag vha. navn)

getPersonDetails understøtter også søgninger på personnavn. Svar ved kald til denne variant er strukturelt identiske med svar ved søgninger på CPR nummer eller liste af CPR numre, og der henvises til disse eksempler for svarmuligheder.


 


...